agentvault 1.0.0 → 1.0.2

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 (293) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/approve.js +5 -5
  4. package/dist/cli/commands/archive.js +5 -5
  5. package/dist/cli/commands/backup.js +5 -5
  6. package/dist/cli/commands/cloud-backup.js +12 -12
  7. package/dist/cli/commands/decrypt.js +2 -2
  8. package/dist/cli/commands/deploy.js +1 -1
  9. package/dist/cli/commands/exec.js +2 -2
  10. package/dist/cli/commands/fetch.js +4 -4
  11. package/dist/cli/commands/inference.js +5 -5
  12. package/dist/cli/commands/init.d.ts +1 -1
  13. package/dist/cli/commands/init.js +16 -16
  14. package/dist/cli/commands/list.js +4 -4
  15. package/dist/cli/commands/package.js +2 -2
  16. package/dist/cli/commands/profile.js +1 -1
  17. package/dist/cli/commands/rebuild.js +2 -2
  18. package/dist/cli/commands/show.js +1 -1
  19. package/dist/cli/commands/status.d.ts +1 -1
  20. package/dist/cli/commands/status.js +8 -8
  21. package/dist/cli/commands/trace.js +1 -1
  22. package/dist/cli/commands/wallet-export.js +1 -1
  23. package/dist/cli/commands/wallet-sign.js +1 -1
  24. package/dist/cli/commands/wallet.d.ts +1 -1
  25. package/dist/cli/commands/wallet.js +1 -1
  26. package/dist/cli/index.d.ts +2 -2
  27. package/dist/cli/index.js +3 -3
  28. package/dist/src/archival/archive-manager.d.ts +85 -0
  29. package/dist/src/archival/archive-manager.js +294 -0
  30. package/dist/src/archival/arweave-client.d.ts +88 -0
  31. package/dist/src/archival/arweave-client.js +223 -0
  32. package/dist/src/archival/index.d.ts +8 -0
  33. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  34. package/dist/src/backup/backup.d.ts +67 -0
  35. package/dist/src/backup/backup.js +231 -0
  36. package/dist/src/backup/index.d.ts +7 -0
  37. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  38. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  39. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  40. package/dist/src/cloud-storage/index.d.ts +11 -0
  41. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  42. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  43. package/dist/src/cloud-storage/provider-detector.js +158 -0
  44. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  45. package/dist/src/cloud-storage/types.js +10 -0
  46. package/dist/src/debugging/index.d.ts +6 -0
  47. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  48. package/dist/src/debugging/logs.d.ts +32 -0
  49. package/dist/src/debugging/logs.js +158 -0
  50. package/dist/src/debugging/types.d.ts +91 -0
  51. package/dist/src/debugging/types.js +5 -0
  52. package/dist/src/deployment/deployer.d.ts +52 -0
  53. package/dist/src/deployment/deployer.js +211 -0
  54. package/dist/src/deployment/icpClient.d.ts +144 -0
  55. package/dist/src/deployment/icpClient.js +545 -0
  56. package/dist/src/deployment/index.d.ts +11 -0
  57. package/dist/src/deployment/index.js +14 -0
  58. package/dist/src/deployment/promotion.d.ts +32 -0
  59. package/dist/src/deployment/promotion.js +114 -0
  60. package/dist/src/deployment/types.d.ts +101 -0
  61. package/dist/src/deployment/types.js +5 -0
  62. package/dist/src/icp/batch.d.ts +112 -0
  63. package/dist/src/icp/batch.js +273 -0
  64. package/dist/src/icp/cycles.d.ts +29 -0
  65. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  66. package/dist/src/icp/environment.d.ts +60 -0
  67. package/dist/src/icp/environment.js +183 -0
  68. package/dist/src/icp/icpcli.d.ts +204 -0
  69. package/dist/src/icp/icpcli.js +374 -0
  70. package/dist/src/icp/icwasm.d.ts +94 -0
  71. package/dist/src/icp/icwasm.js +197 -0
  72. package/dist/src/icp/identity.d.ts +50 -0
  73. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  74. package/dist/src/icp/index.d.ts +16 -0
  75. package/dist/src/icp/index.js +20 -0
  76. package/dist/src/icp/optimization.d.ts +16 -0
  77. package/dist/src/icp/optimization.js +225 -0
  78. package/dist/src/icp/tokens.d.ts +24 -0
  79. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  80. package/dist/src/icp/tool-detector.d.ts +31 -0
  81. package/dist/src/icp/tool-detector.js +104 -0
  82. package/dist/src/icp/types.d.ts +493 -0
  83. package/dist/src/icp/types.js +7 -0
  84. package/dist/src/index.d.ts +12 -0
  85. package/dist/src/index.js +18 -0
  86. package/dist/src/inference/bittensor-client.d.ts +108 -0
  87. package/dist/src/inference/bittensor-client.js +224 -0
  88. package/dist/src/inference/index.d.ts +8 -0
  89. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  90. package/dist/src/inference/inference-manager.d.ts +76 -0
  91. package/dist/src/inference/inference-manager.js +228 -0
  92. package/dist/src/metrics/index.d.ts +7 -0
  93. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  94. package/dist/src/metrics/metrics.d.ts +39 -0
  95. package/dist/src/metrics/metrics.js +129 -0
  96. package/dist/src/monitoring/alerting.d.ts +51 -0
  97. package/dist/src/monitoring/alerting.js +169 -0
  98. package/dist/src/monitoring/health.d.ts +40 -0
  99. package/dist/src/monitoring/health.js +164 -0
  100. package/dist/src/monitoring/index.d.ts +10 -0
  101. package/dist/src/monitoring/index.js +12 -0
  102. package/dist/src/monitoring/info.d.ts +15 -0
  103. package/dist/src/monitoring/info.js +109 -0
  104. package/dist/src/monitoring/types.d.ts +93 -0
  105. package/dist/src/monitoring/types.js +7 -0
  106. package/dist/src/network/index.d.ts +5 -0
  107. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  108. package/dist/src/network/network-config.d.ts +31 -0
  109. package/dist/src/network/network-config.js +109 -0
  110. package/dist/src/packaging/compiler.d.ts +61 -0
  111. package/dist/src/packaging/compiler.js +562 -0
  112. package/dist/src/packaging/config-persistence.d.ts +46 -0
  113. package/dist/src/packaging/config-persistence.js +108 -0
  114. package/dist/src/packaging/config-schemas.d.ts +115 -0
  115. package/dist/src/packaging/config-schemas.js +43 -0
  116. package/dist/src/packaging/detector.d.ts +26 -0
  117. package/dist/src/packaging/detector.js +193 -0
  118. package/dist/src/packaging/index.d.ts +16 -0
  119. package/dist/src/packaging/index.js +22 -0
  120. package/dist/src/packaging/packager.d.ts +31 -0
  121. package/dist/src/packaging/packager.js +90 -0
  122. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  123. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  124. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  125. package/dist/src/packaging/parsers/cline.js +185 -0
  126. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  127. package/dist/src/packaging/parsers/generic.js +228 -0
  128. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  129. package/dist/src/packaging/parsers/goose.js +175 -0
  130. package/dist/src/packaging/parsers/index.d.ts +11 -0
  131. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  132. package/dist/src/packaging/serializer.d.ts +108 -0
  133. package/dist/src/packaging/serializer.js +153 -0
  134. package/dist/src/packaging/types.d.ts +131 -0
  135. package/dist/src/packaging/types.js +5 -0
  136. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  137. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  138. package/dist/src/security/index.d.ts +11 -0
  139. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  140. package/dist/src/security/multisig.d.ts +102 -0
  141. package/dist/src/security/multisig.js +283 -0
  142. package/dist/src/security/types.d.ts +207 -0
  143. package/dist/src/security/types.js +217 -0
  144. package/dist/src/security/vetkeys.d.ts +179 -0
  145. package/dist/src/security/vetkeys.js +499 -0
  146. package/dist/src/testing/index.d.ts +6 -0
  147. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  148. package/dist/src/testing/local-runner.d.ts +23 -0
  149. package/dist/src/testing/local-runner.js +226 -0
  150. package/dist/src/testing/types.d.ts +98 -0
  151. package/dist/src/testing/types.js +5 -0
  152. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  153. package/dist/src/wallet/cbor-serializer.js +282 -0
  154. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  155. package/dist/src/wallet/chain-dispatcher.js +241 -0
  156. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  157. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  158. package/dist/src/wallet/index.d.ts +16 -0
  159. package/dist/src/wallet/index.js +22 -0
  160. package/dist/src/wallet/key-derivation.d.ts +117 -0
  161. package/dist/src/wallet/key-derivation.js +325 -0
  162. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  163. package/dist/src/wallet/providers/base-provider.js +58 -0
  164. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  165. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  166. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  167. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  168. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  169. package/dist/src/wallet/providers/solana-provider.js +393 -0
  170. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  171. package/dist/src/wallet/transaction-queue.js +195 -0
  172. package/dist/src/wallet/types.d.ts +167 -0
  173. package/dist/src/wallet/types.js +5 -0
  174. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  175. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  176. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  177. package/dist/src/wallet/wallet-manager.js +451 -0
  178. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  179. package/dist/src/wallet/wallet-storage.js +274 -0
  180. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  183. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  185. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  190. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  192. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  196. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  207. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  208. package/macos-wallet-app/Makefile +47 -0
  209. package/macos-wallet-app/project.yml +40 -0
  210. package/macos-wallet-app/setup.sh +73 -0
  211. package/package.json +10 -2
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  215. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  219. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  221. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  222. package/backups/test-backup.json +0 -28
  223. package/scripts/dev-dashboard.mjs +0 -84
  224. package/site/README.md +0 -63
  225. package/site/docusaurus.config.ts +0 -148
  226. package/site/package-lock.json +0 -18383
  227. package/site/package.json +0 -47
  228. package/site/sidebars.ts +0 -86
  229. package/site/static/.gitkeep +0 -0
  230. package/site/static/img/logo.svg +0 -28
  231. package/site/static/img/og-image.svg +0 -35
  232. package/src/archival/archive-manager.ts +0 -372
  233. package/src/archival/arweave-client.ts +0 -289
  234. package/src/backup/backup.ts +0 -315
  235. package/src/cloud-storage/cloud-sync.ts +0 -461
  236. package/src/cloud-storage/provider-detector.ts +0 -198
  237. package/src/debugging/logs.ts +0 -193
  238. package/src/debugging/types.ts +0 -100
  239. package/src/deployment/deployer.ts +0 -274
  240. package/src/deployment/icpClient.ts +0 -620
  241. package/src/deployment/index.ts +0 -46
  242. package/src/deployment/promotion.ts +0 -161
  243. package/src/deployment/types.ts +0 -111
  244. package/src/icp/batch.ts +0 -374
  245. package/src/icp/environment.ts +0 -215
  246. package/src/icp/icpcli.ts +0 -438
  247. package/src/icp/icwasm.ts +0 -222
  248. package/src/icp/index.ts +0 -94
  249. package/src/icp/optimization.ts +0 -242
  250. package/src/icp/tool-detector.ts +0 -110
  251. package/src/icp/types.ts +0 -574
  252. package/src/index.ts +0 -25
  253. package/src/inference/bittensor-client.ts +0 -304
  254. package/src/inference/inference-manager.ts +0 -327
  255. package/src/metrics/metrics.ts +0 -186
  256. package/src/monitoring/alerting.ts +0 -190
  257. package/src/monitoring/health.ts +0 -197
  258. package/src/monitoring/index.ts +0 -38
  259. package/src/monitoring/info.ts +0 -114
  260. package/src/monitoring/types.ts +0 -99
  261. package/src/network/network-config.ts +0 -129
  262. package/src/packaging/compiler.ts +0 -647
  263. package/src/packaging/config-persistence.ts +0 -135
  264. package/src/packaging/config-schemas.ts +0 -156
  265. package/src/packaging/detector.ts +0 -220
  266. package/src/packaging/index.ts +0 -90
  267. package/src/packaging/packager.ts +0 -118
  268. package/src/packaging/parsers/clawdbot.ts +0 -278
  269. package/src/packaging/parsers/cline.ts +0 -223
  270. package/src/packaging/parsers/generic.ts +0 -266
  271. package/src/packaging/parsers/goose.ts +0 -214
  272. package/src/packaging/serializer.ts +0 -260
  273. package/src/packaging/types.ts +0 -144
  274. package/src/packaging/wasmedge-compiler.ts +0 -406
  275. package/src/security/multisig.ts +0 -415
  276. package/src/security/types.ts +0 -416
  277. package/src/security/vetkeys.ts +0 -655
  278. package/src/testing/local-runner.ts +0 -264
  279. package/src/testing/types.ts +0 -104
  280. package/src/wallet/cbor-serializer.ts +0 -323
  281. package/src/wallet/chain-dispatcher.ts +0 -313
  282. package/src/wallet/cross-chain-aggregator.ts +0 -346
  283. package/src/wallet/index.ts +0 -76
  284. package/src/wallet/key-derivation.ts +0 -425
  285. package/src/wallet/providers/base-provider.ts +0 -154
  286. package/src/wallet/providers/cketh-provider.ts +0 -434
  287. package/src/wallet/providers/polkadot-provider.ts +0 -503
  288. package/src/wallet/providers/solana-provider.ts +0 -490
  289. package/src/wallet/transaction-queue.ts +0 -284
  290. package/src/wallet/types.ts +0 -178
  291. package/src/wallet/vetkeys-adapter.ts +0 -431
  292. package/src/wallet/wallet-manager.ts +0 -597
  293. package/src/wallet/wallet-storage.ts +0 -380
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Bittensor Client
3
+ *
4
+ * Handles interaction with Bittensor network for AI inference queries.
5
+ * Supports subnet discovery, module queries, and response handling.
6
+ */
7
+ export class BittensorClient {
8
+ config;
9
+ axiosInstance = null;
10
+ constructor(config = {}) {
11
+ this.config = {
12
+ apiEndpoint: config.apiEndpoint || 'https://api.bittensor.com',
13
+ timeout: config.timeout || 30000,
14
+ apiKey: config.apiKey || '',
15
+ };
16
+ }
17
+ /**
18
+ * Initialize HTTP client (lazy loading)
19
+ */
20
+ async getClient() {
21
+ if (!this.axiosInstance) {
22
+ const axios = await this.importAxios();
23
+ this.axiosInstance = axios.create({
24
+ baseURL: this.config.apiEndpoint,
25
+ timeout: this.config.timeout,
26
+ headers: {
27
+ 'Content-Type': 'application/json',
28
+ ...(this.config.apiKey && { 'X-API-Key': this.config.apiKey }),
29
+ },
30
+ });
31
+ }
32
+ return this.axiosInstance;
33
+ }
34
+ /**
35
+ * Dynamically import axios (optional dependency)
36
+ */
37
+ async importAxios() {
38
+ try {
39
+ const dynamicImport = new Function('modulePath', 'return import(modulePath)');
40
+ const axiosModule = await dynamicImport('axios');
41
+ return axiosModule.default;
42
+ }
43
+ catch (_error) {
44
+ throw new Error('axios is required for BittensorClient. Install with: npm install axios');
45
+ }
46
+ }
47
+ /**
48
+ * Get all subnets
49
+ */
50
+ async getSubnets() {
51
+ try {
52
+ const client = await this.getClient();
53
+ const response = await client.get('/subnets');
54
+ return response.data.subnets || [];
55
+ }
56
+ catch (error) {
57
+ console.error('Failed to fetch subnets:', error);
58
+ return [];
59
+ }
60
+ }
61
+ /**
62
+ * Get subnet by ID
63
+ */
64
+ async getSubnet(netuid) {
65
+ try {
66
+ const subnets = await this.getSubnets();
67
+ return subnets.find((s) => s.netuid === netuid) || null;
68
+ }
69
+ catch (error) {
70
+ console.error(`Failed to fetch subnet ${netuid}:`, error);
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Get modules for a subnet
76
+ */
77
+ async getModules(netuid) {
78
+ try {
79
+ const client = await this.getClient();
80
+ const response = await client.get(`/subnets/${netuid}/modules`);
81
+ return response.data.modules || [];
82
+ }
83
+ catch (error) {
84
+ console.error(`Failed to fetch modules for subnet ${netuid}:`, error);
85
+ return [];
86
+ }
87
+ }
88
+ /**
89
+ * Get module by UID
90
+ */
91
+ async getModule(netuid, uid) {
92
+ try {
93
+ const modules = await this.getModules(netuid);
94
+ return modules.find((m) => m.uid === uid) || null;
95
+ }
96
+ catch (error) {
97
+ console.error(`Failed to fetch module ${netuid}/${uid}:`, error);
98
+ return null;
99
+ }
100
+ }
101
+ /**
102
+ * Send inference request
103
+ */
104
+ async infer(request) {
105
+ const startTime = Date.now();
106
+ try {
107
+ const client = await this.getClient();
108
+ const response = await client.post(`/subnets/${request.netuid}/infer`, {
109
+ uid: request.uid,
110
+ inputs: request.inputs,
111
+ timeout: request.timeout || this.config.timeout,
112
+ });
113
+ const responseTime = Date.now() - startTime;
114
+ if (response.data.success) {
115
+ return {
116
+ success: true,
117
+ data: response.data.output,
118
+ metadata: {
119
+ uid: response.data.uid,
120
+ name: response.data.name,
121
+ netuid: request.netuid,
122
+ responseTime,
123
+ },
124
+ };
125
+ }
126
+ else {
127
+ return {
128
+ success: false,
129
+ error: response.data.error || 'Inference failed',
130
+ };
131
+ }
132
+ }
133
+ catch (error) {
134
+ return {
135
+ success: false,
136
+ error: error instanceof Error ? error.message : 'Unknown error',
137
+ };
138
+ }
139
+ }
140
+ /**
141
+ * Find best module for a subnet
142
+ */
143
+ async findBestModule(netuid, criteria = 'rank') {
144
+ try {
145
+ const modules = await this.getModules(netuid);
146
+ if (modules.length === 0) {
147
+ return null;
148
+ }
149
+ return modules
150
+ .sort((a, b) => b[criteria] - a[criteria])
151
+ .slice(0, 1)[0] || null;
152
+ }
153
+ catch (error) {
154
+ console.error('Failed to find best module:', error);
155
+ return null;
156
+ }
157
+ }
158
+ /**
159
+ * Batch inference to multiple modules
160
+ */
161
+ async batchInfer(request, limit = 5) {
162
+ try {
163
+ const modules = await this.getModules(request.netuid);
164
+ const topModules = modules
165
+ .sort((a, b) => b.rank - a.rank)
166
+ .slice(0, limit);
167
+ const promises = topModules.map((module) => this.infer({ ...request, uid: module.uid }));
168
+ return Promise.all(promises);
169
+ }
170
+ catch (error) {
171
+ console.error('Failed to batch infer:', error);
172
+ return [];
173
+ }
174
+ }
175
+ /**
176
+ * Health check for subnet
177
+ */
178
+ async checkSubnetHealth(netuid) {
179
+ const startTime = Date.now();
180
+ try {
181
+ const modules = await this.getModules(netuid);
182
+ if (modules.length === 0) {
183
+ return {
184
+ healthy: false,
185
+ moduleCount: 0,
186
+ avgResponseTime: 0,
187
+ };
188
+ }
189
+ const responseTime = Date.now() - startTime;
190
+ return {
191
+ healthy: true,
192
+ moduleCount: modules.length,
193
+ avgResponseTime: responseTime,
194
+ };
195
+ }
196
+ catch (_error) {
197
+ return {
198
+ healthy: false,
199
+ moduleCount: 0,
200
+ avgResponseTime: 0,
201
+ };
202
+ }
203
+ }
204
+ /**
205
+ * Get API status
206
+ */
207
+ async getApiStatus() {
208
+ try {
209
+ const client = await this.getClient();
210
+ const response = await client.get('/status');
211
+ return {
212
+ online: response.data.online || false,
213
+ version: response.data.version,
214
+ };
215
+ }
216
+ catch (error) {
217
+ return {
218
+ online: false,
219
+ error: error instanceof Error ? error.message : 'Unknown error',
220
+ };
221
+ }
222
+ }
223
+ }
224
+ //# sourceMappingURL=bittensor-client.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Inference Module
3
+ *
4
+ * Exports inference functionality.
5
+ */
6
+ export * from './bittensor-client.js';
7
+ export * from './inference-manager.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -3,6 +3,6 @@
3
3
  *
4
4
  * Exports inference functionality.
5
5
  */
6
-
7
6
  export * from './bittensor-client.js';
8
7
  export * from './inference-manager.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Inference Manager
3
+ *
4
+ * Manages AI inference requests through Bittensor network.
5
+ * Handles caching, rate limiting, and result aggregation.
6
+ */
7
+ export interface InferenceConfig {
8
+ netuid: number;
9
+ uid?: number;
10
+ batchSize?: number;
11
+ timeout?: number;
12
+ cacheTTL?: number;
13
+ enableCache?: boolean;
14
+ }
15
+ export interface InferenceResult {
16
+ success: boolean;
17
+ data?: any;
18
+ metadata?: {
19
+ netuid: number;
20
+ uid: number;
21
+ timestamp: Date;
22
+ responseTime: number;
23
+ };
24
+ error?: string;
25
+ }
26
+ export interface CachedInference {
27
+ key: string;
28
+ request: any;
29
+ result: any;
30
+ timestamp: Date;
31
+ expiresAt: Date;
32
+ }
33
+ /**
34
+ * Get cached inference result
35
+ */
36
+ export declare function getCachedInference(netuid: number, inputs: Record<string, any>, _ttlMs?: number): CachedInference | null;
37
+ /**
38
+ * Set cached inference result
39
+ */
40
+ export declare function setCachedInference(netuid: number, inputs: Record<string, any>, result: any, ttlMs?: number): void;
41
+ /**
42
+ * Clear all cached inferences
43
+ */
44
+ export declare function clearCache(): void;
45
+ /**
46
+ * Clear expired cached inferences
47
+ */
48
+ export declare function clearExpiredCache(): number;
49
+ /**
50
+ * Get cache statistics
51
+ */
52
+ export declare function getCacheStats(): {
53
+ total: number;
54
+ expired: number;
55
+ sizeBytes: number;
56
+ };
57
+ /**
58
+ * Aggregate multiple inference results
59
+ */
60
+ export declare function aggregateResults(results: InferenceResult[], method?: 'average' | 'majority' | 'first'): any;
61
+ /**
62
+ * Format inference time
63
+ */
64
+ export declare function formatInferenceTime(ms: number): string;
65
+ /**
66
+ * Get inference statistics
67
+ */
68
+ export interface InferenceStats {
69
+ total: number;
70
+ success: number;
71
+ failed: number;
72
+ cached: number;
73
+ avgResponseTime: number;
74
+ }
75
+ export declare function getInferenceStats(history: InferenceResult[]): InferenceStats;
76
+ //# sourceMappingURL=inference-manager.d.ts.map
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Inference Manager
3
+ *
4
+ * Manages AI inference requests through Bittensor network.
5
+ * Handles caching, rate limiting, and result aggregation.
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import os from 'node:os';
10
+ import crypto from 'node:crypto';
11
+ const AGENTVAULT_DIR = path.join(os.homedir(), '.agentvault');
12
+ const INFERENCE_CACHE_DIR = path.join(AGENTVAULT_DIR, 'inference-cache');
13
+ function ensureCacheDir() {
14
+ if (!fs.existsSync(AGENTVAULT_DIR)) {
15
+ fs.mkdirSync(AGENTVAULT_DIR, { recursive: true });
16
+ }
17
+ if (!fs.existsSync(INFERENCE_CACHE_DIR)) {
18
+ fs.mkdirSync(INFERENCE_CACHE_DIR, { recursive: true });
19
+ }
20
+ }
21
+ function generateCacheKey(netuid, inputs) {
22
+ const sortedInputs = JSON.stringify(inputs, Object.keys(inputs).sort());
23
+ return `inference-${netuid}-${crypto.createHash('sha256').update(sortedInputs).digest('hex')}`;
24
+ }
25
+ function getCacheFilePath(key) {
26
+ ensureCacheDir();
27
+ return path.join(INFERENCE_CACHE_DIR, `${key}.json`);
28
+ }
29
+ /**
30
+ * Get cached inference result
31
+ */
32
+ export function getCachedInference(netuid, inputs, _ttlMs = 3600000) {
33
+ try {
34
+ const key = generateCacheKey(netuid, inputs);
35
+ const cachePath = getCacheFilePath(key);
36
+ if (!fs.existsSync(cachePath)) {
37
+ return null;
38
+ }
39
+ const content = fs.readFileSync(cachePath, 'utf8');
40
+ const cached = JSON.parse(content);
41
+ if (new Date(cached.expiresAt) < new Date()) {
42
+ fs.unlinkSync(cachePath);
43
+ return null;
44
+ }
45
+ return cached;
46
+ }
47
+ catch (error) {
48
+ console.error('Failed to get cached inference:', error);
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Set cached inference result
54
+ */
55
+ export function setCachedInference(netuid, inputs, result, ttlMs = 3600000) {
56
+ try {
57
+ const key = generateCacheKey(netuid, inputs);
58
+ const cachePath = getCacheFilePath(key);
59
+ const now = new Date();
60
+ const cached = {
61
+ key,
62
+ request: inputs,
63
+ result,
64
+ timestamp: now,
65
+ expiresAt: new Date(now.getTime() + ttlMs),
66
+ };
67
+ fs.writeFileSync(cachePath, JSON.stringify(cached), 'utf8');
68
+ }
69
+ catch (error) {
70
+ console.error('Failed to cache inference:', error);
71
+ }
72
+ }
73
+ /**
74
+ * Clear all cached inferences
75
+ */
76
+ export function clearCache() {
77
+ try {
78
+ ensureCacheDir();
79
+ const files = fs.readdirSync(INFERENCE_CACHE_DIR);
80
+ for (const file of files) {
81
+ if (file.endsWith('.json')) {
82
+ const filePath = path.join(INFERENCE_CACHE_DIR, file);
83
+ fs.unlinkSync(filePath);
84
+ }
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.error('Failed to clear cache:', error);
89
+ }
90
+ }
91
+ /**
92
+ * Clear expired cached inferences
93
+ */
94
+ export function clearExpiredCache() {
95
+ let cleared = 0;
96
+ try {
97
+ ensureCacheDir();
98
+ const files = fs.readdirSync(INFERENCE_CACHE_DIR);
99
+ const now = new Date();
100
+ for (const file of files) {
101
+ if (file.endsWith('.json')) {
102
+ const filePath = path.join(INFERENCE_CACHE_DIR, file);
103
+ const content = fs.readFileSync(filePath, 'utf8');
104
+ const cached = JSON.parse(content);
105
+ if (new Date(cached.expiresAt) < now) {
106
+ fs.unlinkSync(filePath);
107
+ cleared++;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ catch (error) {
113
+ console.error('Failed to clear expired cache:', error);
114
+ }
115
+ return cleared;
116
+ }
117
+ /**
118
+ * Get cache statistics
119
+ */
120
+ export function getCacheStats() {
121
+ try {
122
+ ensureCacheDir();
123
+ const files = fs.readdirSync(INFERENCE_CACHE_DIR);
124
+ const now = new Date();
125
+ let expired = 0;
126
+ let sizeBytes = 0;
127
+ for (const file of files) {
128
+ if (file.endsWith('.json')) {
129
+ const filePath = path.join(INFERENCE_CACHE_DIR, file);
130
+ const content = fs.readFileSync(filePath, 'utf8');
131
+ const cached = JSON.parse(content);
132
+ if (new Date(cached.expiresAt) < now) {
133
+ expired++;
134
+ }
135
+ sizeBytes += Buffer.byteLength(content);
136
+ }
137
+ }
138
+ return {
139
+ total: files.length,
140
+ expired,
141
+ sizeBytes,
142
+ };
143
+ }
144
+ catch (error) {
145
+ console.error('Failed to get cache stats:', error);
146
+ return { total: 0, expired: 0, sizeBytes: 0 };
147
+ }
148
+ }
149
+ /**
150
+ * Aggregate multiple inference results
151
+ */
152
+ export function aggregateResults(results, method = 'majority') {
153
+ if (results.length === 0) {
154
+ return null;
155
+ }
156
+ if (results.length === 1) {
157
+ return results[0]?.data || null;
158
+ }
159
+ const validResults = results.filter((r) => r.success && r.data);
160
+ if (validResults.length === 0) {
161
+ return null;
162
+ }
163
+ const firstResult = validResults[0];
164
+ if (!firstResult) {
165
+ return null;
166
+ }
167
+ switch (method) {
168
+ case 'first':
169
+ return firstResult.data;
170
+ case 'average':
171
+ if (typeof firstResult.data === 'number') {
172
+ return (validResults.reduce((sum, r) => sum + r.data, 0) / validResults.length);
173
+ }
174
+ return firstResult.data;
175
+ case 'majority':
176
+ default: {
177
+ const counts = new Map();
178
+ for (const result of validResults) {
179
+ const key = JSON.stringify(result.data);
180
+ counts.set(key, (counts.get(key) || 0) + 1);
181
+ }
182
+ let maxCount = 0;
183
+ let majorityResult = null;
184
+ for (const [key, count] of counts.entries()) {
185
+ if (count > maxCount) {
186
+ maxCount = count;
187
+ majorityResult = JSON.parse(key);
188
+ }
189
+ }
190
+ return majorityResult;
191
+ }
192
+ }
193
+ }
194
+ /**
195
+ * Format inference time
196
+ */
197
+ export function formatInferenceTime(ms) {
198
+ if (ms < 1000) {
199
+ return `${ms.toFixed(0)}ms`;
200
+ }
201
+ return `${(ms / 1000).toFixed(2)}s`;
202
+ }
203
+ export function getInferenceStats(history) {
204
+ if (history.length === 0) {
205
+ return {
206
+ total: 0,
207
+ success: 0,
208
+ failed: 0,
209
+ cached: 0,
210
+ avgResponseTime: 0,
211
+ };
212
+ }
213
+ const success = history.filter((r) => r.success).length;
214
+ const cached = history.filter((r) => r.success && r.metadata !== undefined).length;
215
+ const responseTimes = history
216
+ .filter((r) => r.metadata)
217
+ .map((r) => r.metadata.responseTime);
218
+ return {
219
+ total: history.length,
220
+ success,
221
+ failed: history.length - success,
222
+ cached,
223
+ avgResponseTime: responseTimes.length > 0
224
+ ? responseTimes.reduce((sum, t) => sum + t, 0) / responseTimes.length
225
+ : 0,
226
+ };
227
+ }
228
+ //# sourceMappingURL=inference-manager.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Metrics Module
3
+ *
4
+ * Exports metrics functionality.
5
+ */
6
+ export * from './metrics.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * Exports metrics functionality.
5
5
  */
6
-
7
6
  export * from './metrics.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Metrics Module
3
+ *
4
+ * Stores and retrieves canister metrics (cycles, memory, messages, etc.)
5
+ * in JSONL format: ~/.agentvault/metrics/<canister-id>/YYYY-MM-DD.jsonl
6
+ */
7
+ export type MetricName = 'cycles_balance' | 'memory_heap' | 'message_count' | 'request_count' | 'error_count';
8
+ export interface MetricDataPoint {
9
+ timestamp: Date;
10
+ value: number;
11
+ }
12
+ export interface MetricTimeSeries {
13
+ metric: MetricName;
14
+ dataPoints: MetricDataPoint[];
15
+ }
16
+ export interface MetricsSummary {
17
+ canisterId: string;
18
+ metrics: Record<MetricName, {
19
+ current: number;
20
+ min: number;
21
+ max: number;
22
+ avg: number;
23
+ delta?: number;
24
+ }>;
25
+ period: {
26
+ start: Date;
27
+ end: Date;
28
+ };
29
+ }
30
+ export interface CollectorConfig {
31
+ interval?: number;
32
+ retentionDays?: number;
33
+ }
34
+ export declare function storeMetrics(canisterId: string, metrics: Record<MetricName, number>): void;
35
+ export declare function getTimeSeries(canisterId: string, metric: MetricName, from: Date, to: Date): MetricTimeSeries;
36
+ export declare function getSummary(canisterId: string, days?: number): MetricsSummary;
37
+ export declare function pruneOldData(canisterId: string, retentionDays: number): void;
38
+ export declare function startCollector(canisterId: string, config?: CollectorConfig): NodeJS.Timeout;
39
+ //# sourceMappingURL=metrics.d.ts.map