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
package/src/icp/icwasm.ts DELETED
@@ -1,222 +0,0 @@
1
- /**
2
- * ic-wasm Wrapper
3
- *
4
- * TypeScript wrapper around the ic-wasm CLI tool (v0.9.11).
5
- * Provides typed interfaces for WASM optimization, shrinking,
6
- * metadata management, resource limiting, endpoint validation,
7
- * and instrumentation.
8
- *
9
- * Usage pattern:
10
- * ic-wasm [OPTIONS] <INPUT> <COMMAND>
11
- * Output is written with -o <OUTPUT>
12
- */
13
-
14
- import { execa } from 'execa';
15
- import type {
16
- IcWasmResult,
17
- IcWasmOptimizeOptions,
18
- IcWasmShrinkOptions,
19
- IcWasmResourceOptions,
20
- IcWasmMetadataOptions,
21
- IcWasmCheckEndpointsOptions,
22
- IcWasmInstrumentOptions,
23
- IcWasmInfo,
24
- } from './types.js';
25
-
26
- const IC_WASM_BIN = 'ic-wasm';
27
-
28
- /**
29
- * Execute an ic-wasm command and return the result.
30
- *
31
- * @param args - Command-line arguments (after 'ic-wasm')
32
- * @param timeoutMs - Timeout in milliseconds (default 60s)
33
- * @returns Structured result with stdout, stderr, exitCode
34
- */
35
- async function runIcWasm(args: string[], timeoutMs = 60_000): Promise<IcWasmResult> {
36
- try {
37
- const result = await execa(IC_WASM_BIN, args, {
38
- reject: false,
39
- timeout: timeoutMs,
40
- });
41
- return {
42
- success: result.exitCode === 0,
43
- stdout: result.stdout,
44
- stderr: result.stderr,
45
- exitCode: result.exitCode ?? 1,
46
- };
47
- } catch (error) {
48
- const message = error instanceof Error ? error.message : 'Unknown error';
49
- return {
50
- success: false,
51
- stdout: '',
52
- stderr: message,
53
- exitCode: 1,
54
- };
55
- }
56
- }
57
-
58
- /**
59
- * Optimize a WASM module using wasm-opt.
60
- *
61
- * Applies dead-code elimination, constant folding, and other
62
- * optimizations to reduce WASM size and improve performance.
63
- *
64
- * @param options - Optimization options
65
- * @returns Command result
66
- */
67
- export async function optimize(options: IcWasmOptimizeOptions): Promise<IcWasmResult> {
68
- const args = [options.input, 'optimize', '-o', options.output];
69
- if (options.level) {
70
- args.push(`--${options.level}`);
71
- }
72
- return runIcWasm(args, 120_000);
73
- }
74
-
75
- /**
76
- * Shrink a WASM module by removing unused functions and debug info.
77
- *
78
- * This is a lighter-weight optimization focused purely on size reduction
79
- * without the full wasm-opt pipeline.
80
- *
81
- * @param options - Shrink options
82
- * @returns Command result
83
- */
84
- export async function shrink(options: IcWasmShrinkOptions): Promise<IcWasmResult> {
85
- const args = [options.input, 'shrink', '-o', options.output];
86
- return runIcWasm(args);
87
- }
88
-
89
- /**
90
- * Set resource limits on a WASM module.
91
- *
92
- * Embeds resource constraints (memory, compute) into the WASM metadata
93
- * so the ICP runtime can enforce them.
94
- *
95
- * @param options - Resource limit options
96
- * @returns Command result
97
- */
98
- export async function setResource(options: IcWasmResourceOptions): Promise<IcWasmResult> {
99
- const args = [
100
- options.input,
101
- 'resource',
102
- '-o', options.output,
103
- options.name,
104
- options.value,
105
- ];
106
- return runIcWasm(args);
107
- }
108
-
109
- /**
110
- * List metadata in a WASM module.
111
- *
112
- * @param input - Input WASM file path
113
- * @returns Command result with metadata listing in stdout
114
- */
115
- export async function listMetadata(input: string): Promise<IcWasmResult> {
116
- return runIcWasm([input, 'metadata', 'list']);
117
- }
118
-
119
- /**
120
- * Get a specific metadata value from a WASM module.
121
- *
122
- * @param input - Input WASM file path
123
- * @param name - Metadata key name
124
- * @returns Command result with metadata value in stdout
125
- */
126
- export async function getMetadata(input: string, name: string): Promise<IcWasmResult> {
127
- return runIcWasm([input, 'metadata', name]);
128
- }
129
-
130
- /**
131
- * Set metadata on a WASM module.
132
- *
133
- * @param options - Metadata options
134
- * @returns Command result
135
- */
136
- export async function setMetadata(options: IcWasmMetadataOptions): Promise<IcWasmResult> {
137
- if (!options.output) {
138
- return {
139
- success: false,
140
- stdout: '',
141
- stderr: 'Output path is required for set metadata operations',
142
- exitCode: 1,
143
- };
144
- }
145
-
146
- const args = [options.input, 'metadata', options.name, '-o', options.output];
147
-
148
- if (options.data !== undefined) {
149
- args.push('-d', options.data);
150
- } else if (options.file) {
151
- args.push('-f', options.file);
152
- }
153
-
154
- if (options.visibility) {
155
- args.push('-v', options.visibility);
156
- }
157
-
158
- return runIcWasm(args);
159
- }
160
-
161
- /**
162
- * Get detailed information about a WASM canister module.
163
- *
164
- * @param input - Input WASM file path
165
- * @returns Parsed info result
166
- */
167
- export async function info(input: string): Promise<IcWasmInfo> {
168
- const result = await runIcWasm([input, 'info']);
169
- const parsed: IcWasmInfo = { raw: result.stdout };
170
-
171
- // Best-effort parsing of info output into sections
172
- if (result.success && result.stdout) {
173
- const sections: Record<string, string> = {};
174
- const lines = result.stdout.split('\n');
175
- for (const line of lines) {
176
- const colonIdx = line.indexOf(':');
177
- if (colonIdx > 0) {
178
- const key = line.substring(0, colonIdx).trim();
179
- const value = line.substring(colonIdx + 1).trim();
180
- if (key && value) {
181
- sections[key] = value;
182
- }
183
- }
184
- }
185
- if (Object.keys(sections).length > 0) {
186
- parsed.sections = sections;
187
- }
188
- }
189
-
190
- return parsed;
191
- }
192
-
193
- /**
194
- * Validate canister endpoints against a Candid interface.
195
- *
196
- * Compares the exported functions in the WASM module against the
197
- * expected interface defined in a .did file. Returns success if
198
- * all endpoints match.
199
- *
200
- * @param options - Check endpoints options
201
- * @returns Command result (success means validation passed)
202
- */
203
- export async function checkEndpoints(options: IcWasmCheckEndpointsOptions): Promise<IcWasmResult> {
204
- return runIcWasm([
205
- options.input,
206
- 'check-endpoints',
207
- '--interface', options.candidInterface,
208
- ]);
209
- }
210
-
211
- /**
212
- * Instrument a WASM module for execution tracing (experimental).
213
- *
214
- * Modifies the WASM to emit execution traces to stable memory,
215
- * useful for debugging and profiling canister behavior.
216
- *
217
- * @param options - Instrument options
218
- * @returns Command result
219
- */
220
- export async function instrument(options: IcWasmInstrumentOptions): Promise<IcWasmResult> {
221
- return runIcWasm([options.input, 'instrument', '-o', options.output]);
222
- }
package/src/icp/index.ts DELETED
@@ -1,94 +0,0 @@
1
- /**
2
- * ICP Tools Integration Module
3
- *
4
- * Provides typed wrappers around ic-wasm and icp-cli tooling,
5
- * auto-detection of available tools, an optimization pipeline,
6
- * and environment management.
7
- */
8
-
9
- // Types
10
- export type {
11
- ToolName,
12
- ToolInfo,
13
- ToolchainStatus,
14
- IcWasmOptLevel,
15
- IcWasmOptimizeOptions,
16
- IcWasmShrinkOptions,
17
- IcWasmResourceOptions,
18
- IcWasmMetadataOptions,
19
- IcWasmCheckEndpointsOptions,
20
- IcWasmInstrumentOptions,
21
- IcWasmResult,
22
- IcWasmInfo,
23
- MetadataVisibility,
24
- IcWasmOptimizationResult,
25
- IcWasmOptimizationPipelineOptions,
26
- IcWasmOptimizationPipelineResult,
27
- IcpEnvironment,
28
- IcpDeployMode,
29
- IcpCommonOptions,
30
- IcpBuildOptions,
31
- IcpDeployOptions,
32
- IcpCanisterStatusOptions,
33
- IcpCanisterCallOptions,
34
- IcpCyclesBalanceOptions,
35
- IcpCyclesMintOptions,
36
- IcpCyclesTransferOptions,
37
- IcpIdentityListOptions,
38
- IcpIdentityNewOptions,
39
- IcpIdentityExportOptions,
40
- IcpIdentityImportOptions,
41
- IcpNetworkStartOptions,
42
- IcpNetworkStopOptions,
43
- IcpSyncOptions,
44
- IcpTokenBalanceOptions,
45
- IcpTokenTransferOptions,
46
- IcpEnvironmentListOptions,
47
- IcpCliResult,
48
- IcpNetworkConfig,
49
- IcpCyclesConfig,
50
- IcpEnvironmentConfig,
51
- IcpOptimizationConfig,
52
- IcpProjectConfig,
53
- } from './types.js';
54
-
55
- // Re-export monitoring types
56
- export type {
57
- CanisterHealthStatus,
58
- AlertSeverity,
59
- CanisterStatusInfo,
60
- MonitoringAlert,
61
- HealthThresholds,
62
- MonitoringOptions,
63
- ResourceUsageSnapshot,
64
- } from '../monitoring/types.js';
65
-
66
- // Tool detection
67
- export {
68
- detectTool,
69
- detectToolchain,
70
- requireTool,
71
- } from './tool-detector.js';
72
-
73
- // ic-wasm wrapper
74
- export * as icwasm from './icwasm.js';
75
-
76
- // icp-cli wrapper
77
- export * as icpcli from './icpcli.js';
78
-
79
- // Optimization pipeline
80
- export { runOptimizationPipeline } from './optimization.js';
81
-
82
- // Environment management
83
- export {
84
- findConfigFile,
85
- loadConfig,
86
- getEnvironment,
87
- getOptimizationConfig,
88
- listEnvironments,
89
- writeConfig,
90
- generateDefaultConfig,
91
- } from './environment.js';
92
-
93
- // Batched canister operations
94
- export * from './batch.js';
@@ -1,242 +0,0 @@
1
- /**
2
- * Optimization Pipeline
3
- *
4
- * Orchestrates ic-wasm optimize, shrink, resource limiting, metadata
5
- * injection, and Candid validation into a single pipeline that runs
6
- * after WASM generation in the packaging step.
7
- */
8
-
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import { detectTool } from './tool-detector.js';
12
- import * as icwasm from './icwasm.js';
13
- import type {
14
- IcWasmOptimizationPipelineOptions,
15
- IcWasmOptimizationPipelineResult,
16
- IcWasmOptLevel,
17
- } from './types.js';
18
-
19
- /**
20
- * Run the full optimization pipeline on a WASM file.
21
- *
22
- * @param options - Pipeline options
23
- * @returns Pipeline result with metrics
24
- */
25
- export async function runOptimizationPipeline(
26
- options: IcWasmOptimizationPipelineOptions,
27
- ): Promise<IcWasmOptimizationPipelineResult> {
28
- const startTime = Date.now();
29
- const steps: IcWasmOptimizationPipelineResult['steps'] = [];
30
- const warnings: string[] = [];
31
- let currentInput = options.input;
32
-
33
- // Verify input exists
34
- if (!fs.existsSync(options.input)) {
35
- return {
36
- success: false,
37
- outputPath: options.output,
38
- originalSize: 0,
39
- finalSize: 0,
40
- reductionPercent: 0,
41
- totalDurationMs: Date.now() - startTime,
42
- steps: [],
43
- warnings: [`Input file not found: ${options.input}`],
44
- };
45
- }
46
-
47
- const originalSize = fs.statSync(options.input).size;
48
-
49
- // Check if ic-wasm is available
50
- const icWasmTool = await detectTool('ic-wasm');
51
- if (!icWasmTool.available) {
52
- // No optimization possible - copy input to output
53
- fs.copyFileSync(options.input, options.output);
54
- warnings.push('ic-wasm not found; skipping optimization. Install with: cargo install ic-wasm');
55
- return {
56
- success: true,
57
- outputPath: options.output,
58
- originalSize,
59
- finalSize: originalSize,
60
- reductionPercent: 0,
61
- totalDurationMs: Date.now() - startTime,
62
- steps: [],
63
- warnings,
64
- };
65
- }
66
-
67
- // Create temp directory for intermediate files
68
- const tempDir = path.join(path.dirname(options.output), '.icp-optimize-tmp');
69
- if (!fs.existsSync(tempDir)) {
70
- fs.mkdirSync(tempDir, { recursive: true });
71
- }
72
- let tempCounter = 0;
73
- function nextTemp(): string {
74
- return path.join(tempDir, `step_${++tempCounter}.wasm`);
75
- }
76
-
77
- // Step 1: Shrink
78
- if (options.shrink !== false) {
79
- const stepStart = Date.now();
80
- const tempOut = nextTemp();
81
- const result = await icwasm.shrink({ input: currentInput, output: tempOut });
82
- const step = {
83
- step: 'shrink',
84
- success: result.success,
85
- durationMs: Date.now() - stepStart,
86
- sizeAfter: undefined as number | undefined,
87
- error: undefined as string | undefined,
88
- };
89
- if (result.success && fs.existsSync(tempOut)) {
90
- step.sizeAfter = fs.statSync(tempOut).size;
91
- currentInput = tempOut;
92
- } else {
93
- step.error = result.stderr || 'Shrink failed';
94
- warnings.push(`Shrink step failed: ${step.error}`);
95
- }
96
- steps.push(step);
97
- }
98
-
99
- // Step 2: Optimize
100
- if (options.optimize !== false) {
101
- const stepStart = Date.now();
102
- const tempOut = nextTemp();
103
- const level: IcWasmOptLevel = options.optimizeLevel ?? 'O3';
104
- const result = await icwasm.optimize({
105
- input: currentInput,
106
- output: tempOut,
107
- level,
108
- });
109
- const step = {
110
- step: `optimize (${level})`,
111
- success: result.success,
112
- durationMs: Date.now() - stepStart,
113
- sizeAfter: undefined as number | undefined,
114
- error: undefined as string | undefined,
115
- };
116
- if (result.success && fs.existsSync(tempOut)) {
117
- step.sizeAfter = fs.statSync(tempOut).size;
118
- currentInput = tempOut;
119
- } else {
120
- step.error = result.stderr || 'Optimize failed';
121
- warnings.push(`Optimize step failed: ${step.error}`);
122
- }
123
- steps.push(step);
124
- }
125
-
126
- // Step 3: Resource limits
127
- if (options.resourceLimits && Object.keys(options.resourceLimits).length > 0) {
128
- for (const [name, value] of Object.entries(options.resourceLimits)) {
129
- const stepStart = Date.now();
130
- const tempOut: string = nextTemp();
131
- const result = await icwasm.setResource({
132
- input: currentInput as string,
133
- output: tempOut,
134
- name,
135
- value,
136
- });
137
- const step = {
138
- step: `resource (${name}=${value})`,
139
- success: result.success,
140
- durationMs: Date.now() - stepStart,
141
- sizeAfter: undefined as number | undefined,
142
- error: undefined as string | undefined,
143
- };
144
- if (result.success && fs.existsSync(tempOut)) {
145
- step.sizeAfter = fs.statSync(tempOut).size;
146
- currentInput = tempOut;
147
- } else {
148
- step.error = result.stderr || 'Resource limit failed';
149
- warnings.push(`Resource limit '${name}' failed: ${step.error}`);
150
- }
151
- steps.push(step);
152
- }
153
- }
154
-
155
- // Step 4: Metadata injection
156
- if (options.metadata && options.metadata.length > 0) {
157
- for (const meta of options.metadata) {
158
- const stepStart = Date.now();
159
- const tempOut = nextTemp();
160
- const result = await icwasm.setMetadata({
161
- input: currentInput,
162
- output: tempOut,
163
- name: meta.name,
164
- data: meta.data,
165
- visibility: meta.visibility,
166
- });
167
- const step = {
168
- step: `metadata (${meta.name})`,
169
- success: result.success,
170
- durationMs: Date.now() - stepStart,
171
- sizeAfter: undefined as number | undefined,
172
- error: undefined as string | undefined,
173
- };
174
- if (result.success && fs.existsSync(tempOut)) {
175
- step.sizeAfter = fs.statSync(tempOut).size;
176
- currentInput = tempOut;
177
- } else {
178
- step.error = result.stderr || 'Metadata set failed';
179
- warnings.push(`Metadata '${meta.name}' failed: ${step.error}`);
180
- }
181
- steps.push(step);
182
- }
183
- }
184
-
185
- // Step 5: Candid validation (does not produce output, just validates)
186
- let validationPassed: boolean | undefined;
187
- if (options.candidInterface) {
188
- const stepStart = Date.now();
189
- const result = await icwasm.checkEndpoints({
190
- input: currentInput,
191
- candidInterface: options.candidInterface,
192
- });
193
- validationPassed = result.success;
194
- const step = {
195
- step: 'check-endpoints',
196
- success: result.success,
197
- durationMs: Date.now() - stepStart,
198
- sizeAfter: undefined as number | undefined,
199
- error: undefined as string | undefined,
200
- };
201
- if (!result.success) {
202
- step.error = result.stderr || 'Endpoint validation failed';
203
- warnings.push(`Candid validation failed: ${step.error}`);
204
- }
205
- steps.push(step);
206
- }
207
-
208
- // Move final result to output path
209
- if (currentInput !== options.input) {
210
- fs.copyFileSync(currentInput, options.output);
211
- } else {
212
- // No steps modified the file; copy input to output
213
- fs.copyFileSync(options.input, options.output);
214
- }
215
-
216
- const finalSize = fs.statSync(options.output).size;
217
-
218
- // Cleanup temp directory
219
- try {
220
- fs.rmSync(tempDir, { recursive: true, force: true });
221
- } catch {
222
- // Ignore cleanup errors
223
- }
224
-
225
- const reductionPercent = originalSize > 0
226
- ? Math.round(((originalSize - finalSize) / originalSize) * 100)
227
- : 0;
228
-
229
- const allStepsSucceeded = steps.every((s: any) => s.success);
230
-
231
- return {
232
- success: allStepsSucceeded,
233
- outputPath: options.output,
234
- originalSize,
235
- finalSize,
236
- reductionPercent,
237
- totalDurationMs: Date.now() - startTime,
238
- steps,
239
- validationPassed,
240
- warnings,
241
- };
242
- }
@@ -1,110 +0,0 @@
1
- /**
2
- * Tool Detector
3
- *
4
- * Auto-detects availability of ICP tools (ic-wasm, icp, dfx)
5
- * on the current system. Used for hybrid compatibility strategy:
6
- * prefer icp-cli when available, fall back to dfx.
7
- */
8
-
9
- import { execaCommand } from 'execa';
10
- import type { ToolName, ToolInfo, ToolchainStatus } from './types.js';
11
-
12
- /**
13
- * Detect whether a single tool is installed and get its version.
14
- *
15
- * @param name - Tool binary name
16
- * @returns ToolInfo with availability, path, and version
17
- */
18
- export async function detectTool(name: ToolName): Promise<ToolInfo> {
19
- const result: ToolInfo = { name, available: false };
20
-
21
- // Locate the binary
22
- try {
23
- const whichResult = await execaCommand(`which ${name}`, {
24
- reject: false,
25
- timeout: 5000,
26
- });
27
- if (whichResult.exitCode === 0 && whichResult.stdout.trim()) {
28
- result.path = whichResult.stdout.trim();
29
- } else {
30
- return result;
31
- }
32
- } catch {
33
- return result;
34
- }
35
-
36
- // Get the version
37
- try {
38
- const versionResult = await execaCommand(`${name} --version`, {
39
- reject: false,
40
- timeout: 5000,
41
- });
42
- if (versionResult.exitCode === 0) {
43
- const output = versionResult.stdout.trim() || versionResult.stderr.trim();
44
- // Extract version number from output like "ic-wasm 0.9.11" or "icp 0.1.0" or "dfx 0.25.0"
45
- const match = output.match(/(\d+\.\d+\.\d+)/);
46
- if (match) {
47
- result.version = match[1];
48
- } else {
49
- result.version = output;
50
- }
51
- result.available = true;
52
- }
53
- } catch {
54
- // Binary exists but version check failed - still mark as available
55
- result.available = !!result.path;
56
- }
57
-
58
- return result;
59
- }
60
-
61
- /**
62
- * Detect all ICP tools and determine the preferred toolchain.
63
- *
64
- * @returns Complete toolchain status
65
- */
66
- export async function detectToolchain(): Promise<ToolchainStatus> {
67
- const [icWasm, icp, dfx] = await Promise.all([
68
- detectTool('ic-wasm'),
69
- detectTool('icp'),
70
- detectTool('dfx'),
71
- ]);
72
-
73
- let preferredDeployTool: 'icp' | 'dfx' | null = null;
74
- if (icp.available) {
75
- preferredDeployTool = 'icp';
76
- } else if (dfx.available) {
77
- preferredDeployTool = 'dfx';
78
- }
79
-
80
- return {
81
- icWasm,
82
- icp,
83
- dfx,
84
- preferredDeployTool,
85
- canOptimize: icWasm.available,
86
- };
87
- }
88
-
89
- /**
90
- * Require a specific tool, throwing a descriptive error if not found.
91
- *
92
- * @param name - Tool to require
93
- * @param purpose - Human-readable description of why it's needed
94
- * @returns ToolInfo (guaranteed available)
95
- * @throws Error if tool is not available
96
- */
97
- export async function requireTool(name: ToolName, purpose: string): Promise<ToolInfo> {
98
- const tool = await detectTool(name);
99
- if (!tool.available) {
100
- const installHints: Record<ToolName, string> = {
101
- 'ic-wasm': 'Install with: cargo install ic-wasm',
102
- 'icp': 'Install from: https://github.com/dfinity/icp-cli',
103
- 'dfx': 'Install with: sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"',
104
- };
105
- throw new Error(
106
- `Tool '${name}' is required for ${purpose} but was not found.\n${installHints[name]}`
107
- );
108
- }
109
- return tool;
110
- }