agentvault 1.0.1 → 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 (292) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/dist/cli/commands/approve.js +5 -5
  3. package/dist/cli/commands/archive.js +5 -5
  4. package/dist/cli/commands/backup.js +5 -5
  5. package/dist/cli/commands/cloud-backup.js +12 -12
  6. package/dist/cli/commands/decrypt.js +2 -2
  7. package/dist/cli/commands/deploy.js +1 -1
  8. package/dist/cli/commands/exec.js +2 -2
  9. package/dist/cli/commands/fetch.js +4 -4
  10. package/dist/cli/commands/inference.js +5 -5
  11. package/dist/cli/commands/init.d.ts +1 -1
  12. package/dist/cli/commands/init.js +16 -16
  13. package/dist/cli/commands/list.js +4 -4
  14. package/dist/cli/commands/package.js +2 -2
  15. package/dist/cli/commands/profile.js +1 -1
  16. package/dist/cli/commands/rebuild.js +2 -2
  17. package/dist/cli/commands/show.js +1 -1
  18. package/dist/cli/commands/status.d.ts +1 -1
  19. package/dist/cli/commands/status.js +8 -8
  20. package/dist/cli/commands/trace.js +1 -1
  21. package/dist/cli/commands/wallet-export.js +1 -1
  22. package/dist/cli/commands/wallet-sign.js +1 -1
  23. package/dist/cli/commands/wallet.d.ts +1 -1
  24. package/dist/cli/commands/wallet.js +1 -1
  25. package/dist/cli/index.d.ts +2 -2
  26. package/dist/cli/index.js +3 -3
  27. package/dist/src/archival/archive-manager.d.ts +85 -0
  28. package/dist/src/archival/archive-manager.js +294 -0
  29. package/dist/src/archival/arweave-client.d.ts +88 -0
  30. package/dist/src/archival/arweave-client.js +223 -0
  31. package/dist/src/archival/index.d.ts +8 -0
  32. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  33. package/dist/src/backup/backup.d.ts +67 -0
  34. package/dist/src/backup/backup.js +231 -0
  35. package/dist/src/backup/index.d.ts +7 -0
  36. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  37. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  38. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  39. package/dist/src/cloud-storage/index.d.ts +11 -0
  40. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  41. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  42. package/dist/src/cloud-storage/provider-detector.js +158 -0
  43. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  44. package/dist/src/cloud-storage/types.js +10 -0
  45. package/dist/src/debugging/index.d.ts +6 -0
  46. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  47. package/dist/src/debugging/logs.d.ts +32 -0
  48. package/dist/src/debugging/logs.js +158 -0
  49. package/dist/src/debugging/types.d.ts +91 -0
  50. package/dist/src/debugging/types.js +5 -0
  51. package/dist/src/deployment/deployer.d.ts +52 -0
  52. package/dist/src/deployment/deployer.js +211 -0
  53. package/dist/src/deployment/icpClient.d.ts +144 -0
  54. package/dist/src/deployment/icpClient.js +545 -0
  55. package/dist/src/deployment/index.d.ts +11 -0
  56. package/dist/src/deployment/index.js +14 -0
  57. package/dist/src/deployment/promotion.d.ts +32 -0
  58. package/dist/src/deployment/promotion.js +114 -0
  59. package/dist/src/deployment/types.d.ts +101 -0
  60. package/dist/src/deployment/types.js +5 -0
  61. package/dist/src/icp/batch.d.ts +112 -0
  62. package/dist/src/icp/batch.js +273 -0
  63. package/dist/src/icp/cycles.d.ts +29 -0
  64. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  65. package/dist/src/icp/environment.d.ts +60 -0
  66. package/dist/src/icp/environment.js +183 -0
  67. package/dist/src/icp/icpcli.d.ts +204 -0
  68. package/dist/src/icp/icpcli.js +374 -0
  69. package/dist/src/icp/icwasm.d.ts +94 -0
  70. package/dist/src/icp/icwasm.js +197 -0
  71. package/dist/src/icp/identity.d.ts +50 -0
  72. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  73. package/dist/src/icp/index.d.ts +16 -0
  74. package/dist/src/icp/index.js +20 -0
  75. package/dist/src/icp/optimization.d.ts +16 -0
  76. package/dist/src/icp/optimization.js +225 -0
  77. package/dist/src/icp/tokens.d.ts +24 -0
  78. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  79. package/dist/src/icp/tool-detector.d.ts +31 -0
  80. package/dist/src/icp/tool-detector.js +104 -0
  81. package/dist/src/icp/types.d.ts +493 -0
  82. package/dist/src/icp/types.js +7 -0
  83. package/dist/src/index.d.ts +12 -0
  84. package/dist/src/index.js +18 -0
  85. package/dist/src/inference/bittensor-client.d.ts +108 -0
  86. package/dist/src/inference/bittensor-client.js +224 -0
  87. package/dist/src/inference/index.d.ts +8 -0
  88. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  89. package/dist/src/inference/inference-manager.d.ts +76 -0
  90. package/dist/src/inference/inference-manager.js +228 -0
  91. package/dist/src/metrics/index.d.ts +7 -0
  92. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  93. package/dist/src/metrics/metrics.d.ts +39 -0
  94. package/dist/src/metrics/metrics.js +129 -0
  95. package/dist/src/monitoring/alerting.d.ts +51 -0
  96. package/dist/src/monitoring/alerting.js +169 -0
  97. package/dist/src/monitoring/health.d.ts +40 -0
  98. package/dist/src/monitoring/health.js +164 -0
  99. package/dist/src/monitoring/index.d.ts +10 -0
  100. package/dist/src/monitoring/index.js +12 -0
  101. package/dist/src/monitoring/info.d.ts +15 -0
  102. package/dist/src/monitoring/info.js +109 -0
  103. package/dist/src/monitoring/types.d.ts +93 -0
  104. package/dist/src/monitoring/types.js +7 -0
  105. package/dist/src/network/index.d.ts +5 -0
  106. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  107. package/dist/src/network/network-config.d.ts +31 -0
  108. package/dist/src/network/network-config.js +109 -0
  109. package/dist/src/packaging/compiler.d.ts +61 -0
  110. package/dist/src/packaging/compiler.js +562 -0
  111. package/dist/src/packaging/config-persistence.d.ts +46 -0
  112. package/dist/src/packaging/config-persistence.js +108 -0
  113. package/dist/src/packaging/config-schemas.d.ts +115 -0
  114. package/dist/src/packaging/config-schemas.js +43 -0
  115. package/dist/src/packaging/detector.d.ts +26 -0
  116. package/dist/src/packaging/detector.js +193 -0
  117. package/dist/src/packaging/index.d.ts +16 -0
  118. package/dist/src/packaging/index.js +22 -0
  119. package/dist/src/packaging/packager.d.ts +31 -0
  120. package/dist/src/packaging/packager.js +90 -0
  121. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  122. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  123. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  124. package/dist/src/packaging/parsers/cline.js +185 -0
  125. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  126. package/dist/src/packaging/parsers/generic.js +228 -0
  127. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  128. package/dist/src/packaging/parsers/goose.js +175 -0
  129. package/dist/src/packaging/parsers/index.d.ts +11 -0
  130. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  131. package/dist/src/packaging/serializer.d.ts +108 -0
  132. package/dist/src/packaging/serializer.js +153 -0
  133. package/dist/src/packaging/types.d.ts +131 -0
  134. package/dist/src/packaging/types.js +5 -0
  135. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  136. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  137. package/dist/src/security/index.d.ts +11 -0
  138. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  139. package/dist/src/security/multisig.d.ts +102 -0
  140. package/dist/src/security/multisig.js +283 -0
  141. package/dist/src/security/types.d.ts +207 -0
  142. package/dist/src/security/types.js +217 -0
  143. package/dist/src/security/vetkeys.d.ts +179 -0
  144. package/dist/src/security/vetkeys.js +499 -0
  145. package/dist/src/testing/index.d.ts +6 -0
  146. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  147. package/dist/src/testing/local-runner.d.ts +23 -0
  148. package/dist/src/testing/local-runner.js +226 -0
  149. package/dist/src/testing/types.d.ts +98 -0
  150. package/dist/src/testing/types.js +5 -0
  151. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  152. package/dist/src/wallet/cbor-serializer.js +282 -0
  153. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  154. package/dist/src/wallet/chain-dispatcher.js +241 -0
  155. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  156. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  157. package/dist/src/wallet/index.d.ts +16 -0
  158. package/dist/src/wallet/index.js +22 -0
  159. package/dist/src/wallet/key-derivation.d.ts +117 -0
  160. package/dist/src/wallet/key-derivation.js +325 -0
  161. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  162. package/dist/src/wallet/providers/base-provider.js +58 -0
  163. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  164. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  165. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  166. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  167. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  168. package/dist/src/wallet/providers/solana-provider.js +393 -0
  169. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  170. package/dist/src/wallet/transaction-queue.js +195 -0
  171. package/dist/src/wallet/types.d.ts +167 -0
  172. package/dist/src/wallet/types.js +5 -0
  173. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  174. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  175. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  176. package/dist/src/wallet/wallet-manager.js +451 -0
  177. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  178. package/dist/src/wallet/wallet-storage.js +274 -0
  179. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  180. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  183. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  185. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  190. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  192. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  196. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  207. package/macos-wallet-app/Makefile +47 -0
  208. package/macos-wallet-app/project.yml +40 -0
  209. package/macos-wallet-app/setup.sh +73 -0
  210. package/package.json +10 -2
  211. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  215. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  219. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  221. package/backups/test-backup.json +0 -28
  222. package/scripts/dev-dashboard.mjs +0 -84
  223. package/site/README.md +0 -63
  224. package/site/docusaurus.config.ts +0 -148
  225. package/site/package-lock.json +0 -18383
  226. package/site/package.json +0 -47
  227. package/site/sidebars.ts +0 -86
  228. package/site/static/.gitkeep +0 -0
  229. package/site/static/img/logo.svg +0 -28
  230. package/site/static/img/og-image.svg +0 -35
  231. package/src/archival/archive-manager.ts +0 -372
  232. package/src/archival/arweave-client.ts +0 -289
  233. package/src/backup/backup.ts +0 -315
  234. package/src/cloud-storage/cloud-sync.ts +0 -461
  235. package/src/cloud-storage/provider-detector.ts +0 -198
  236. package/src/debugging/logs.ts +0 -193
  237. package/src/debugging/types.ts +0 -100
  238. package/src/deployment/deployer.ts +0 -274
  239. package/src/deployment/icpClient.ts +0 -620
  240. package/src/deployment/index.ts +0 -46
  241. package/src/deployment/promotion.ts +0 -161
  242. package/src/deployment/types.ts +0 -111
  243. package/src/icp/batch.ts +0 -374
  244. package/src/icp/environment.ts +0 -215
  245. package/src/icp/icpcli.ts +0 -438
  246. package/src/icp/icwasm.ts +0 -222
  247. package/src/icp/index.ts +0 -94
  248. package/src/icp/optimization.ts +0 -242
  249. package/src/icp/tool-detector.ts +0 -110
  250. package/src/icp/types.ts +0 -574
  251. package/src/index.ts +0 -25
  252. package/src/inference/bittensor-client.ts +0 -304
  253. package/src/inference/inference-manager.ts +0 -327
  254. package/src/metrics/metrics.ts +0 -186
  255. package/src/monitoring/alerting.ts +0 -190
  256. package/src/monitoring/health.ts +0 -197
  257. package/src/monitoring/index.ts +0 -38
  258. package/src/monitoring/info.ts +0 -114
  259. package/src/monitoring/types.ts +0 -99
  260. package/src/network/network-config.ts +0 -129
  261. package/src/packaging/compiler.ts +0 -647
  262. package/src/packaging/config-persistence.ts +0 -135
  263. package/src/packaging/config-schemas.ts +0 -156
  264. package/src/packaging/detector.ts +0 -220
  265. package/src/packaging/index.ts +0 -90
  266. package/src/packaging/packager.ts +0 -118
  267. package/src/packaging/parsers/clawdbot.ts +0 -278
  268. package/src/packaging/parsers/cline.ts +0 -223
  269. package/src/packaging/parsers/generic.ts +0 -266
  270. package/src/packaging/parsers/goose.ts +0 -214
  271. package/src/packaging/serializer.ts +0 -260
  272. package/src/packaging/types.ts +0 -144
  273. package/src/packaging/wasmedge-compiler.ts +0 -406
  274. package/src/security/multisig.ts +0 -415
  275. package/src/security/types.ts +0 -416
  276. package/src/security/vetkeys.ts +0 -655
  277. package/src/testing/local-runner.ts +0 -264
  278. package/src/testing/types.ts +0 -104
  279. package/src/wallet/cbor-serializer.ts +0 -323
  280. package/src/wallet/chain-dispatcher.ts +0 -313
  281. package/src/wallet/cross-chain-aggregator.ts +0 -346
  282. package/src/wallet/index.ts +0 -76
  283. package/src/wallet/key-derivation.ts +0 -425
  284. package/src/wallet/providers/base-provider.ts +0 -154
  285. package/src/wallet/providers/cketh-provider.ts +0 -434
  286. package/src/wallet/providers/polkadot-provider.ts +0 -503
  287. package/src/wallet/providers/solana-provider.ts +0 -490
  288. package/src/wallet/transaction-queue.ts +0 -284
  289. package/src/wallet/types.ts +0 -178
  290. package/src/wallet/vetkeys-adapter.ts +0 -431
  291. package/src/wallet/wallet-manager.ts +0 -597
  292. package/src/wallet/wallet-storage.ts +0 -380
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Local test runner for canister testing
3
+ *
4
+ * Provides test execution for unit, integration, and load tests against local canisters
5
+ */
6
+ import type { TestRunnerOptions, TestSuite, LoadTestConfig, LoadTestResult } from './types.js';
7
+ /**
8
+ * Run unit tests
9
+ */
10
+ export declare function runUnitTests(options: TestRunnerOptions): Promise<TestSuite>;
11
+ /**
12
+ * Run integration tests
13
+ */
14
+ export declare function runIntegrationTests(options: TestRunnerOptions): Promise<TestSuite>;
15
+ /**
16
+ * Run load tests
17
+ */
18
+ export declare function runLoadTests(config: LoadTestConfig): Promise<LoadTestResult>;
19
+ /**
20
+ * Run tests based on options
21
+ */
22
+ export declare function runTests(options: TestRunnerOptions): Promise<TestSuite | LoadTestResult>;
23
+ //# sourceMappingURL=local-runner.d.ts.map
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Local test runner for canister testing
3
+ *
4
+ * Provides test execution for unit, integration, and load tests against local canisters
5
+ */
6
+ import { execa } from 'execa';
7
+ import path from 'node:path';
8
+ import os from 'node:os';
9
+ import fs from 'node:fs';
10
+ const AGENTVAULT_DIR = path.join(os.homedir(), '.agentvault');
11
+ const TEST_RESULTS_DIR = path.join(AGENTVAULT_DIR, 'test-results');
12
+ /**
13
+ * Ensure test results directory exists
14
+ */
15
+ function ensureTestResultsDir() {
16
+ if (!fs.existsSync(AGENTVAULT_DIR)) {
17
+ fs.mkdirSync(AGENTVAULT_DIR, { recursive: true });
18
+ }
19
+ if (!fs.existsSync(TEST_RESULTS_DIR)) {
20
+ fs.mkdirSync(TEST_RESULTS_DIR, { recursive: true });
21
+ }
22
+ }
23
+ /**
24
+ * Get test results file path
25
+ */
26
+ function getTestResultsPath(agentName, testType) {
27
+ ensureTestResultsDir();
28
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
29
+ return path.join(TEST_RESULTS_DIR, `${agentName}-${testType}-${timestamp}.json`);
30
+ }
31
+ /**
32
+ * Parse vitest output to extract test results
33
+ */
34
+ function parseVitestOutput(stdout) {
35
+ const lines = stdout.split('\n');
36
+ const tests = [];
37
+ let total = 0;
38
+ let passed = 0;
39
+ let failed = 0;
40
+ let skipped = 0;
41
+ let duration = 0;
42
+ for (const line of lines) {
43
+ const match = line.match(/^(PASS|FAIL|SKIP)\s+(.+) \((\d+)ms\)$/);
44
+ if (match) {
45
+ const [, status, nameRaw, timeRaw] = match;
46
+ const name = nameRaw?.trim() || 'unknown';
47
+ const time = timeRaw || '0';
48
+ tests.push({
49
+ name,
50
+ status: status === 'PASS' ? 'passed' : status === 'FAIL' ? 'failed' : 'skipped',
51
+ duration: parseInt(time, 10),
52
+ });
53
+ total++;
54
+ if (status === 'PASS')
55
+ passed++;
56
+ else if (status === 'FAIL')
57
+ failed++;
58
+ else
59
+ skipped++;
60
+ }
61
+ const durationMatch = line.match(/Test Files\s+(\d+)\s+passed\s+\((\d+)\)/);
62
+ if (durationMatch && durationMatch[2]) {
63
+ duration = parseInt(durationMatch[2], 10);
64
+ }
65
+ }
66
+ return {
67
+ name: 'canister-tests',
68
+ total,
69
+ passed,
70
+ failed,
71
+ skipped,
72
+ duration,
73
+ tests,
74
+ };
75
+ }
76
+ /**
77
+ * Run unit tests
78
+ */
79
+ export async function runUnitTests(options) {
80
+ const vitestArgs = [
81
+ 'run',
82
+ '--reporter=verbose',
83
+ ];
84
+ if (options.network) {
85
+ vitestArgs.push(`--env.network=${options.network}`);
86
+ }
87
+ if (options.outputFormat === 'json') {
88
+ vitestArgs.push('--reporter=json');
89
+ }
90
+ vitestArgs.push('tests/unit');
91
+ const result = await execa('npx', ['vitest', ...vitestArgs], {
92
+ reject: false,
93
+ timeout: 120_000,
94
+ });
95
+ const testSuite = parseVitestOutput(result.stdout);
96
+ if (options.outputFormat === 'json') {
97
+ const resultsPath = getTestResultsPath(options.agentName, 'unit');
98
+ fs.writeFileSync(resultsPath, JSON.stringify(testSuite, null, 2), 'utf8');
99
+ console.log(`Test results saved to ${resultsPath}`);
100
+ }
101
+ return testSuite;
102
+ }
103
+ /**
104
+ * Run integration tests
105
+ */
106
+ export async function runIntegrationTests(options) {
107
+ const vitestArgs = [
108
+ 'run',
109
+ '--reporter=verbose',
110
+ ];
111
+ if (options.network) {
112
+ vitestArgs.push(`--env.network=${options.network}`);
113
+ }
114
+ if (options.outputFormat === 'json') {
115
+ vitestArgs.push('--reporter=json');
116
+ }
117
+ vitestArgs.push('tests/integration');
118
+ const result = await execa('npx', ['vitest', ...vitestArgs], {
119
+ reject: false,
120
+ timeout: 300_000,
121
+ });
122
+ const testSuite = parseVitestOutput(result.stdout);
123
+ if (options.outputFormat === 'json') {
124
+ const resultsPath = getTestResultsPath(options.agentName, 'integration');
125
+ fs.writeFileSync(resultsPath, JSON.stringify(testSuite, null, 2), 'utf8');
126
+ console.log(`Test results saved to ${resultsPath}`);
127
+ }
128
+ return testSuite;
129
+ }
130
+ /**
131
+ * Run load tests
132
+ */
133
+ export async function runLoadTests(config) {
134
+ const errors = {};
135
+ let totalRequests = 0;
136
+ let successfulRequests = 0;
137
+ let failedRequests = 0;
138
+ const responseTimes = [];
139
+ const startTime = Date.now();
140
+ const endTime = startTime + (config.duration * 1000);
141
+ const interval = config.duration * 1000 / (config.concurrency * 10);
142
+ const requestPromises = [];
143
+ for (let i = 0; i < config.concurrency * 10; i++) {
144
+ if (Date.now() >= endTime)
145
+ break;
146
+ const startTimeMs = Date.now();
147
+ const request = execa('npx', ['icp', 'canister', 'call', config.canisterId, config.method, ...(config.args ? [config.args] : [])], {
148
+ reject: false,
149
+ timeout: 30_000,
150
+ });
151
+ const requestPromise = request.then((result) => {
152
+ const responseTime = Date.now() - startTimeMs;
153
+ if (result.exitCode === 0) {
154
+ return { success: true, responseTime };
155
+ }
156
+ else {
157
+ const error = result.stderr || 'Unknown error';
158
+ errors[error] = (errors[error] || 0) + 1;
159
+ return { success: false, responseTime, error };
160
+ }
161
+ });
162
+ requestPromises.push(requestPromise);
163
+ await new Promise((resolve) => setTimeout(resolve, interval));
164
+ }
165
+ const results = await Promise.all(requestPromises);
166
+ for (const result of results) {
167
+ totalRequests++;
168
+ if (result.success) {
169
+ successfulRequests++;
170
+ responseTimes.push(result.responseTime);
171
+ }
172
+ else {
173
+ failedRequests++;
174
+ if (result.error) {
175
+ errors[result.error] = (errors[result.error] || 0) + 1;
176
+ }
177
+ }
178
+ }
179
+ const actualDuration = (Date.now() - startTime) / 1000;
180
+ const requestsPerSecond = totalRequests / actualDuration;
181
+ const sortedTimes = responseTimes.sort((a, b) => a - b);
182
+ const minResponseTime = sortedTimes[0] || 0;
183
+ const maxResponseTime = sortedTimes[sortedTimes.length - 1] || 0;
184
+ const avgResponseTime = responseTimes.length > 0
185
+ ? responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length
186
+ : 0;
187
+ const percentiles = {
188
+ p50: sortedTimes[Math.floor(sortedTimes.length * 0.5)] || 0,
189
+ p90: sortedTimes[Math.floor(sortedTimes.length * 0.9)] || 0,
190
+ p95: sortedTimes[Math.floor(sortedTimes.length * 0.95)] || 0,
191
+ p99: sortedTimes[Math.floor(sortedTimes.length * 0.99)] || 0,
192
+ };
193
+ return {
194
+ totalRequests,
195
+ successfulRequests,
196
+ failedRequests,
197
+ requestsPerSecond,
198
+ avgResponseTime,
199
+ minResponseTime,
200
+ maxResponseTime,
201
+ percentiles,
202
+ errors,
203
+ };
204
+ }
205
+ /**
206
+ * Run tests based on options
207
+ */
208
+ export async function runTests(options) {
209
+ switch (options.testType) {
210
+ case 'unit':
211
+ return runUnitTests(options);
212
+ case 'integration':
213
+ return runIntegrationTests(options);
214
+ case 'load-test':
215
+ if (!options.concurrency) {
216
+ throw new Error('Concurrency is required for load tests');
217
+ }
218
+ if (!options.loadDuration) {
219
+ throw new Error('Load duration is required for load tests');
220
+ }
221
+ throw new Error('Load test requires specific LoadTestConfig');
222
+ default:
223
+ throw new Error(`Unknown test type: ${options.testType}`);
224
+ }
225
+ }
226
+ //# sourceMappingURL=local-runner.js.map
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Types for local test runner
3
+ */
4
+ /** Test type */
5
+ export type TestType = 'unit' | 'integration' | 'load-test';
6
+ /** Test result status */
7
+ export type TestStatus = 'passed' | 'failed' | 'skipped';
8
+ /** Individual test case result */
9
+ export interface TestCase {
10
+ /** Test name */
11
+ name: string;
12
+ /** Test status */
13
+ status: TestStatus;
14
+ /** Duration in milliseconds */
15
+ duration: number;
16
+ /** Error message if failed */
17
+ error?: string;
18
+ /** Error stack if failed */
19
+ stack?: string;
20
+ }
21
+ /** Test suite result */
22
+ export interface TestSuite {
23
+ /** Suite name */
24
+ name: string;
25
+ /** Total number of tests */
26
+ total: number;
27
+ /** Number of passed tests */
28
+ passed: number;
29
+ /** Number of failed tests */
30
+ failed: number;
31
+ /** Number of skipped tests */
32
+ skipped: number;
33
+ /** Duration in milliseconds */
34
+ duration: number;
35
+ /** Individual test cases */
36
+ tests: TestCase[];
37
+ }
38
+ /** Test runner options */
39
+ export interface TestRunnerOptions {
40
+ /** Agent name to test */
41
+ agentName: string;
42
+ /** Network to run tests against */
43
+ network: string;
44
+ /** Test type */
45
+ testType: TestType;
46
+ /** Enable watch mode */
47
+ watch?: boolean;
48
+ /** Load test concurrency */
49
+ concurrency?: number;
50
+ /** Load test duration in seconds */
51
+ loadDuration?: number;
52
+ /** Output format */
53
+ outputFormat?: 'json' | 'junit' | 'html';
54
+ /** Verbose output */
55
+ verbose?: boolean;
56
+ }
57
+ /** Load test configuration */
58
+ export interface LoadTestConfig {
59
+ /** Number of concurrent requests */
60
+ concurrency: number;
61
+ /** Test duration in seconds */
62
+ duration: number;
63
+ /** Target canister ID */
64
+ canisterId: string;
65
+ /** Method to call */
66
+ method: string;
67
+ /** Request arguments (Candid format) */
68
+ args?: string;
69
+ /** Ramp-up time in seconds */
70
+ rampUp?: number;
71
+ }
72
+ /** Load test result */
73
+ export interface LoadTestResult {
74
+ /** Total requests sent */
75
+ totalRequests: number;
76
+ /** Successful requests */
77
+ successfulRequests: number;
78
+ /** Failed requests */
79
+ failedRequests: number;
80
+ /** Requests per second */
81
+ requestsPerSecond: number;
82
+ /** Average response time in milliseconds */
83
+ avgResponseTime: number;
84
+ /** Minimum response time in milliseconds */
85
+ minResponseTime: number;
86
+ /** Maximum response time in milliseconds */
87
+ maxResponseTime: number;
88
+ /** Percentiles */
89
+ percentiles: {
90
+ p50: number;
91
+ p90: number;
92
+ p95: number;
93
+ p99: number;
94
+ };
95
+ /** Error breakdown */
96
+ errors: Record<string, number>;
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for local test runner
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,82 @@
1
+ /**
2
+ * CBOR Serializer/Deserializer
3
+ *
4
+ * Uses cbor-x to encode/decode wallet data and transactions.
5
+ * Provides efficient binary serialization for wallet operations.
6
+ */
7
+ import type { WalletData, Transaction, TransactionRequest, SignedTransaction } from './types.js';
8
+ /**
9
+ * CBOR serializer options
10
+ */
11
+ interface CborOptions {
12
+ /** Include diagnostic info */
13
+ diagnostic?: boolean;
14
+ /** Use indefinite-length encoding */
15
+ indefinite?: boolean;
16
+ }
17
+ /**
18
+ * Serialize wallet data to CBOR
19
+ *
20
+ * @param wallet - Wallet data to serialize
21
+ * @param options - CBOR encoding options
22
+ * @returns CBOR-encoded wallet data
23
+ */
24
+ export declare function serializeWallet(wallet: WalletData, _options?: CborOptions): Uint8Array;
25
+ /**
26
+ * Deserialize CBOR data to wallet
27
+ *
28
+ * @param data - CBOR-encoded wallet data
29
+ * @returns Deserialized wallet data
30
+ */
31
+ export declare function deserializeWallet(data: Uint8Array): WalletData;
32
+ /**
33
+ * Serialize transaction to CBOR
34
+ *
35
+ * @param transaction - Transaction to serialize
36
+ * @returns CBOR-encoded transaction
37
+ */
38
+ export declare function serializeTransaction(transaction: Transaction): Uint8Array;
39
+ /**
40
+ * Deserialize CBOR data to transaction
41
+ *
42
+ * @param data - CBOR-encoded transaction data
43
+ * @returns Deserialized transaction
44
+ */
45
+ export declare function deserializeTransaction(data: Uint8Array): Transaction;
46
+ /**
47
+ * Serialize transaction request to CBOR
48
+ *
49
+ * @param request - Transaction request to serialize
50
+ * @returns CBOR-encoded transaction request
51
+ */
52
+ export declare function serializeTransactionRequest(request: TransactionRequest): Uint8Array;
53
+ /**
54
+ * Deserialize CBOR data to transaction request
55
+ *
56
+ * @param data - CBOR-encoded transaction request data
57
+ * @returns Deserialized transaction request
58
+ */
59
+ export declare function deserializeTransactionRequest(data: Uint8Array): TransactionRequest;
60
+ /**
61
+ * Serialize signed transaction to CBOR
62
+ *
63
+ * @param signedTx - Signed transaction to serialize
64
+ * @returns CBOR-encoded signed transaction
65
+ */
66
+ export declare function serializeSignedTransaction(signedTx: SignedTransaction): Uint8Array;
67
+ /**
68
+ * Deserialize CBOR data to signed transaction
69
+ *
70
+ * @param data - CBOR-encoded signed transaction data
71
+ * @returns Deserialized signed transaction
72
+ */
73
+ export declare function deserializeSignedTransaction(data: Uint8Array): SignedTransaction;
74
+ /**
75
+ * Validate CBOR data structure
76
+ *
77
+ * @param data - CBOR-encoded data
78
+ * @returns True if data appears valid
79
+ */
80
+ export declare function validateCborData(data: Uint8Array): boolean;
81
+ export {};
82
+ //# sourceMappingURL=cbor-serializer.d.ts.map