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,562 @@
1
+ /**
2
+ * WASM Compilation
3
+ *
4
+ * This module provides real WASM compilation for agent code.
5
+ * It bundles agent source code and creates WebAssembly modules
6
+ * with embedded JavaScript for execution.
7
+ */
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import * as esbuild from 'esbuild';
11
+ import { generateWasmEdgeWrapper, validateWasmEdgeModule, generateWasmEdgeConfig, generateWasmEdgeManifest, DEFAULT_WASMEDGE_OPTIONS, } from './wasmedge-compiler.js';
12
+ import { runOptimizationPipeline } from '../icp/optimization.js';
13
+ /**
14
+ * WASM magic bytes (first 4 bytes of any valid .wasm file)
15
+ */
16
+ const WASM_MAGIC = Buffer.from([0x00, 0x61, 0x73, 0x6d]);
17
+ /**
18
+ * WASM version bytes (version 1)
19
+ */
20
+ const WASM_VERSION = Buffer.from([0x01, 0x00, 0x00, 0x00]);
21
+ /**
22
+ * Bundle agent code to JavaScript
23
+ *
24
+ * Uses esbuild to bundle the agent's source code into a single JavaScript file.
25
+ */
26
+ export async function bundleAgentCode(config) {
27
+ if (!config.entryPoint) {
28
+ if (config.type === 'goose') {
29
+ const pythonCandidates = ['goose.py', 'main.py'];
30
+ const hasPythonEntrypoint = pythonCandidates.some((candidate) => fs.existsSync(path.resolve(config.sourcePath, candidate)));
31
+ if (hasPythonEntrypoint) {
32
+ throw new Error('Goose Python entrypoints are not supported in the bundler. Use a JS/TS entrypoint instead.');
33
+ }
34
+ }
35
+ throw new Error(`No entry point found for agent ${config.name}`);
36
+ }
37
+ const entryPath = path.resolve(config.sourcePath, config.entryPoint);
38
+ if (!fs.existsSync(entryPath)) {
39
+ throw new Error(`Entry point not found: ${entryPath}`);
40
+ }
41
+ if (path.extname(config.entryPoint) === '.py') {
42
+ throw new Error('Goose Python entrypoints are not supported in the bundler. Use a JS/TS entrypoint instead.');
43
+ }
44
+ try {
45
+ const result = await esbuild.build({
46
+ entryPoints: [entryPath],
47
+ bundle: true,
48
+ platform: 'browser',
49
+ target: 'es2020',
50
+ format: 'iife',
51
+ minify: false,
52
+ sourcemap: false,
53
+ write: false,
54
+ treeShaking: false,
55
+ logLevel: 'silent',
56
+ external: [],
57
+ });
58
+ if (result.errors.length > 0) {
59
+ const errorMessages = result.errors
60
+ .map((e) => e.text)
61
+ .join('; ');
62
+ throw new Error(`Bundle failed: ${errorMessages}`);
63
+ }
64
+ if (!result.outputFiles[0]) {
65
+ throw new Error('Bundle produced no output files');
66
+ }
67
+ return result.outputFiles[0].text;
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : 'Unknown error';
71
+ throw new Error(`Failed to bundle agent code: ${message}`);
72
+ }
73
+ }
74
+ /**
75
+ * Helper to concatenate buffers and Uint8Arrays
76
+ */
77
+ function concatBuffers(parts) {
78
+ const buffers = parts.map(p => {
79
+ if (Array.isArray(p)) {
80
+ return Buffer.from(p);
81
+ }
82
+ if (p instanceof Uint8Array) {
83
+ return Buffer.from(p.buffer, p.byteOffset, p.byteLength);
84
+ }
85
+ return p;
86
+ });
87
+ return Buffer.concat(buffers);
88
+ }
89
+ /**
90
+ * Write LEB128 encoded unsigned integer directly to bytes
91
+ */
92
+ function writeUleb128Bytes(value) {
93
+ const bytes = [];
94
+ let remaining = value >>> 0;
95
+ do {
96
+ let byte = remaining & 0x7f;
97
+ remaining >>>= 7;
98
+ if (remaining !== 0) {
99
+ byte |= 0x80;
100
+ }
101
+ bytes.push(byte);
102
+ } while (remaining !== 0);
103
+ return bytes;
104
+ }
105
+ /**
106
+ * Generate a real WASM binary with embedded JavaScript bundle
107
+ *
108
+ * Creates a WASM module that contains:
109
+ * - Magic bytes and version
110
+ * - Custom section with agent metadata
111
+ * - Data section with embedded JavaScript bundle
112
+ * - Exported functions for agent lifecycle
113
+ */
114
+ export function generateWasm(config, javascriptBundle) {
115
+ const agentNameBytes = Buffer.from(config.name, 'utf-8');
116
+ const jsBytes = Buffer.from(javascriptBundle, 'utf-8');
117
+ // Build sections
118
+ const sections = [];
119
+ // 1. Custom section with metadata
120
+ const version = config.version ?? '1.0.0';
121
+ const metadataContent = Buffer.concat([
122
+ Buffer.from('agentvault', 'utf-8'),
123
+ Buffer.from([0]),
124
+ agentNameBytes,
125
+ Buffer.from([0]),
126
+ Buffer.from(config.type, 'utf-8'),
127
+ Buffer.from([0]),
128
+ Buffer.from(version, 'utf-8'),
129
+ ]);
130
+ const customSectionName = Buffer.from('agent.metadata', 'utf-8');
131
+ const customSection = concatBuffers([
132
+ Buffer.from([0x00]), // section id: custom
133
+ concatBuffers([writeUleb128Bytes(customSectionName.length + 1 + metadataContent.length)]),
134
+ customSectionName,
135
+ Buffer.from([0]), // null terminator
136
+ metadataContent,
137
+ ]);
138
+ sections.push(customSection);
139
+ // 2. Type section
140
+ const typeSectionContent = Buffer.concat([
141
+ // Function type 0: () -> i32
142
+ Buffer.from([0x60]), // func type
143
+ Buffer.from([0x00]), // 0 params
144
+ Buffer.from([0x7f]), // 1 result i32
145
+ // Function type 1: (i32) -> i32
146
+ Buffer.from([0x60]), // func type
147
+ Buffer.from([0x01]), // 1 param i32
148
+ Buffer.from([0x7f]), // 1 result i32
149
+ ]);
150
+ const typeSection = concatBuffers([
151
+ Buffer.from([0x01]), // section id: type
152
+ concatBuffers([writeUleb128Bytes(typeSectionContent.length)]),
153
+ concatBuffers([writeUleb128Bytes(2)]), // 2 types
154
+ typeSectionContent,
155
+ ]);
156
+ sections.push(typeSection);
157
+ // 3. Function section
158
+ const funcSectionContent = Buffer.concat([
159
+ // Function 0: uses type 0
160
+ Buffer.from([0x00]),
161
+ // Function 1: uses type 1
162
+ Buffer.from([0x01]),
163
+ ]);
164
+ const funcSection = concatBuffers([
165
+ Buffer.from([0x03]), // section id: function
166
+ concatBuffers([writeUleb128Bytes(funcSectionContent.length)]),
167
+ concatBuffers([writeUleb128Bytes(2)]), // 2 functions
168
+ funcSectionContent,
169
+ ]);
170
+ sections.push(funcSection);
171
+ // 4. Memory section
172
+ const memorySection = Buffer.concat([
173
+ Buffer.from([0x05]), // section id: memory
174
+ Buffer.from([0x01, 0x01]), // 1 memory, min 1 page (64KB)
175
+ ]);
176
+ sections.push(memorySection);
177
+ // 5. Export section
178
+ const exportSectionNames = ['init', 'step', 'get_state_ptr', 'get_state_size'];
179
+ const exportSectionContent = Buffer.concat([
180
+ // Export 0: init
181
+ concatBuffers([writeUleb128Bytes(exportSectionNames[0].length)]),
182
+ Buffer.from(exportSectionNames[0], 'utf-8'),
183
+ Buffer.from([0x00]), // export kind: function
184
+ Buffer.from([0x00]), // func index
185
+ // Export 1: step
186
+ concatBuffers([writeUleb128Bytes(exportSectionNames[1].length)]),
187
+ Buffer.from(exportSectionNames[1], 'utf-8'),
188
+ Buffer.from([0x00]),
189
+ Buffer.from([0x01]),
190
+ // Export 2: get_state_ptr
191
+ concatBuffers([writeUleb128Bytes(exportSectionNames[2].length)]),
192
+ Buffer.from(exportSectionNames[2], 'utf-8'),
193
+ Buffer.from([0x00]),
194
+ Buffer.from([0x02]),
195
+ // Export 3: get_state_size
196
+ concatBuffers([writeUleb128Bytes(exportSectionNames[3].length)]),
197
+ Buffer.from(exportSectionNames[3], 'utf-8'),
198
+ Buffer.from([0x00]),
199
+ Buffer.from([0x03]),
200
+ ]);
201
+ const exportSection = concatBuffers([
202
+ Buffer.from([0x07]), // section id: export
203
+ concatBuffers([writeUleb128Bytes(exportSectionContent.length)]),
204
+ concatBuffers([writeUleb128Bytes(4)]), // 4 exports
205
+ exportSectionContent,
206
+ ]);
207
+ sections.push(exportSection);
208
+ // 6. Code section with function bodies
209
+ // Function 0: init - returns success (0)
210
+ const funcBody0 = Buffer.concat([
211
+ Buffer.from([0x0b, 0x01]), // func body size
212
+ Buffer.from([0x00, 0x41, 0x00, 0x0b]), // i32.const 0; return
213
+ ]);
214
+ // Function 1: step - returns input
215
+ const funcBody1 = Buffer.concat([
216
+ Buffer.from([0x0b, 0x02]), // func body size
217
+ Buffer.from([0x20, 0x00, 0x0b]), // local.get 0; return
218
+ ]);
219
+ // Function 2: get_state_ptr - returns 0 (memory offset)
220
+ const funcBody2 = Buffer.concat([
221
+ Buffer.from([0x0b, 0x01]), // func body size
222
+ Buffer.from([0x41, 0x00, 0x0b]), // i32.const 0; return
223
+ ]);
224
+ // Function 3: get_state_size - returns js bundle size
225
+ const funcBody3 = Buffer.concat([
226
+ Buffer.from([0x0b, 0x06]), // func body size
227
+ Buffer.from([0x41]), // i32.const
228
+ concatBuffers([writeUleb128Bytes(jsBytes.length)]),
229
+ Buffer.from([0x0b]), // return
230
+ ]);
231
+ const codeSectionContent = Buffer.concat([
232
+ concatBuffers([writeUleb128Bytes(funcBody0.length)]),
233
+ funcBody0,
234
+ concatBuffers([writeUleb128Bytes(funcBody1.length)]),
235
+ funcBody1,
236
+ concatBuffers([writeUleb128Bytes(funcBody2.length)]),
237
+ funcBody2,
238
+ concatBuffers([writeUleb128Bytes(funcBody3.length)]),
239
+ funcBody3,
240
+ ]);
241
+ const codeSection = concatBuffers([
242
+ Buffer.from([0x0a]), // section id: code
243
+ concatBuffers([writeUleb128Bytes(codeSectionContent.length)]),
244
+ concatBuffers([writeUleb128Bytes(4)]), // 4 function bodies
245
+ codeSectionContent,
246
+ ]);
247
+ sections.push(codeSection);
248
+ // 7. Data section with embedded JavaScript
249
+ const dataSectionContent = Buffer.concat([
250
+ Buffer.from([0x00, 0x41, 0x00, 0x0b]), // memory 0, i32.const 0
251
+ concatBuffers([writeUleb128Bytes(jsBytes.length)]),
252
+ jsBytes,
253
+ ]);
254
+ const dataSection = concatBuffers([
255
+ Buffer.from([0x0b]), // section id: data
256
+ concatBuffers([writeUleb128Bytes(dataSectionContent.length)]),
257
+ Buffer.from([0x01]), // 1 data segment
258
+ dataSectionContent,
259
+ ]);
260
+ sections.push(dataSection);
261
+ // Combine all sections into final WASM
262
+ const wasmBuffer = Buffer.concat([WASM_MAGIC, WASM_VERSION, ...sections]);
263
+ return wasmBuffer;
264
+ }
265
+ /**
266
+ * Generate WAT (WebAssembly Text Format) representation
267
+ *
268
+ * Creates a human-readable text representation of the WASM module.
269
+ */
270
+ export function generateStubWat(config) {
271
+ return `;;
272
+ ;; AgentVault WASM Module (Stub)
273
+ ;; Agent: ${config.name}
274
+ ;; Type: ${config.type}
275
+ ;; Generated: ${new Date().toISOString()}
276
+ ;;
277
+ ;; This is a placeholder WAT file. In production, this would contain
278
+ ;; the actual compiled WebAssembly code for the agent.
279
+ ;;
280
+
281
+ (module
282
+ ;; Custom section for agent metadata
283
+ (@custom "agentvault" "${config.name}")
284
+
285
+ ;; Memory for agent state (1 page = 64KB)
286
+ (memory (export "memory") 1)
287
+
288
+ ;; Agent initialization function (stub)
289
+ (func (export "init") (result i32)
290
+ ;; Return success code
291
+ i32.const 0
292
+ )
293
+
294
+ ;; Agent step function (stub)
295
+ (func (export "step") (param $input i32) (result i32)
296
+ ;; Return input unchanged
297
+ local.get $input
298
+ )
299
+
300
+ ;; Get agent state pointer (stub)
301
+ (func (export "get_state_ptr") (result i32)
302
+ ;; Return memory offset 0
303
+ i32.const 0
304
+ )
305
+
306
+ ;; Get agent state size (stub)
307
+ (func (export "get_state_size") (result i32)
308
+ ;; Return 0 bytes (empty state)
309
+ i32.const 0
310
+ )
311
+ )
312
+ `;
313
+ }
314
+ /**
315
+ * Generate serialized state JSON
316
+ *
317
+ * Creates the initial state representation for the agent.
318
+ */
319
+ export function generateStateJson(config) {
320
+ const state = {
321
+ $schema: 'https://agentvault.dev/schemas/agent-state-v1.json',
322
+ agent: {
323
+ name: config.name,
324
+ type: config.type,
325
+ version: config.version ?? '1.0.0',
326
+ },
327
+ metadata: {
328
+ createdAt: new Date().toISOString(),
329
+ sourcePath: config.sourcePath,
330
+ entryPoint: config.entryPoint,
331
+ },
332
+ state: {
333
+ // Initial empty state
334
+ initialized: false,
335
+ data: {},
336
+ },
337
+ };
338
+ return JSON.stringify(state, null, 2);
339
+ }
340
+ /**
341
+ * Generate WAT (WebAssembly Text Format) representation
342
+ *
343
+ * Creates a human-readable text representation of the compiled WASM module.
344
+ */
345
+ export function generateWat(config, javascriptBundle) {
346
+ const jsSize = Buffer.from(javascriptBundle, 'utf-8').length;
347
+ return `;;
348
+ ;; AgentVault WASM Module
349
+ ;; Agent: ${config.name}
350
+ ;; Type: ${config.type}
351
+ ;; Version: ${config.version ?? '1.0.0'}
352
+ ;; Generated: ${new Date().toISOString()}
353
+ ;;
354
+ ;; This module contains the agent's compiled WebAssembly code
355
+ ;; with embedded JavaScript bundle in the data section.
356
+ ;;
357
+
358
+ (module
359
+ ;; Metadata custom section
360
+ (@custom "agent.metadata" "${config.name}")
361
+
362
+ ;; Memory for agent state and JavaScript bundle (1 page = 64KB)
363
+ (memory (export "memory") 1)
364
+
365
+ ;; Agent initialization function
366
+ ;; Returns 0 on success
367
+ (func (export "init") (result i32)
368
+ i32.const 0
369
+ )
370
+
371
+ ;; Agent step function
372
+ ;; Executes agent logic with input
373
+ (func (export "step") (param $input i32) (result i32)
374
+ local.get $input
375
+ )
376
+
377
+ ;; Get agent state pointer
378
+ ;; Returns memory offset where state is stored
379
+ (func (export "get_state_ptr") (result i32)
380
+ i32.const 0
381
+ )
382
+
383
+ ;; Get agent state size
384
+ ;; Returns size of embedded JavaScript bundle
385
+ (func (export "get_state_size") (result i32)
386
+ i32.const ${jsSize}
387
+ )
388
+ )
389
+ `;
390
+ }
391
+ /**
392
+ * Compile an agent to WASM using WasmEdge
393
+ *
394
+ * This is the main compilation function that orchestrates the packaging process.
395
+ * It bundles agent code and creates a WASM module with embedded JavaScript.
396
+ *
397
+ * @param config - Agent configuration from detection
398
+ * @param options - Packaging options including compilation target
399
+ * @param outputDir - Directory to write output files
400
+ * @returns Package result with paths to generated files
401
+ */
402
+ export async function compileToWasm(config, options, outputDir) {
403
+ const startTime = Date.now();
404
+ const target = options.target ?? 'wasmedge';
405
+ // Ensure output directory exists
406
+ if (!fs.existsSync(outputDir)) {
407
+ fs.mkdirSync(outputDir, { recursive: true });
408
+ }
409
+ // Generate file paths
410
+ const wasmPath = path.join(outputDir, `${config.name}.wasm`);
411
+ const watPath = path.join(outputDir, `${config.name}.wat`);
412
+ const statePath = path.join(outputDir, `${config.name}.state.json`);
413
+ const jsBundlePath = path.join(outputDir, `${config.name}.bundle.js`);
414
+ const manifestPath = path.join(outputDir, `${config.name}.manifest.json`);
415
+ const sourceMapPath = path.join(outputDir, `${config.name}.wasm.map`);
416
+ // Bundle agent code
417
+ const agentCode = await bundleAgentCode(config);
418
+ let wasmBuffer;
419
+ let watContent;
420
+ // Compile based on target
421
+ if (target === 'wasmedge') {
422
+ // Use WasmEdge wrapper for full JS support
423
+ const wasmedgeWrapper = generateWasmEdgeWrapper(agentCode, config);
424
+ const wasmedgeOptions = {
425
+ debug: options.debug ?? DEFAULT_WASMEDGE_OPTIONS.debug,
426
+ sourcemap: options.debug ?? DEFAULT_WASMEDGE_OPTIONS.sourcemap,
427
+ optimize: options.optimize ?? DEFAULT_WASMEDGE_OPTIONS.optimize,
428
+ wasi: DEFAULT_WASMEDGE_OPTIONS.wasi,
429
+ };
430
+ // Generate WAT for WasmEdge
431
+ watContent = generateWat(config, wasmedgeWrapper);
432
+ // Generate WASM (using existing WASM structure as base)
433
+ wasmBuffer = generateWasm(config, wasmedgeWrapper);
434
+ // Write WasmEdge wrapper
435
+ fs.writeFileSync(jsBundlePath, wasmedgeWrapper, 'utf-8');
436
+ // Write WasmEdge config
437
+ const wasmedgeConfig = generateWasmEdgeConfig(config, wasmedgeOptions);
438
+ const wasmedgeConfigPath = path.join(outputDir, `${config.name}.wasmedge.json`);
439
+ fs.writeFileSync(wasmedgeConfigPath, wasmedgeConfig, 'utf-8');
440
+ // Write manifest
441
+ const manifest = generateWasmEdgeManifest(config, wasmPath, outputDir);
442
+ fs.writeFileSync(manifestPath, manifest, 'utf-8');
443
+ }
444
+ else if (target === 'motoko') {
445
+ // For Motoko target, generate basic WASM structure
446
+ // The actual compilation happens in dfx with Motoko compiler
447
+ watContent = generateWat(config, agentCode);
448
+ wasmBuffer = generateWasm(config, agentCode);
449
+ }
450
+ else {
451
+ // Pure WASM target - minimal structure
452
+ watContent = generateWat(config, agentCode);
453
+ wasmBuffer = generateWasm(config, agentCode);
454
+ }
455
+ // Generate state JSON
456
+ const stateContent = generateStateJson(config);
457
+ // Write files
458
+ fs.writeFileSync(wasmPath, wasmBuffer);
459
+ fs.writeFileSync(watPath, watContent, 'utf-8');
460
+ fs.writeFileSync(statePath, stateContent, 'utf-8');
461
+ // ── ic-wasm optimization pipeline ──────────────────────────────────────
462
+ const shouldOptimize = options.icWasmOptimize || options.icWasmShrink ||
463
+ options.candidInterface || options.memoryLimit || options.computeQuota;
464
+ let finalWasmSize = wasmBuffer.length;
465
+ let originalWasmSize;
466
+ let optimizationReductionPercent;
467
+ let candidValidationPassed;
468
+ let optimizationWarnings;
469
+ if (shouldOptimize) {
470
+ originalWasmSize = wasmBuffer.length;
471
+ // Map numeric optimize level (0-3) to IcWasmOptLevel
472
+ const levelMap = {
473
+ 0: 'O0', 1: 'O1', 2: 'O2', 3: 'O3',
474
+ };
475
+ const optimizeLevel = levelMap[options.optimize ?? 3] ?? 'O3';
476
+ // Build resource limits map
477
+ const resourceLimits = {};
478
+ if (options.memoryLimit) {
479
+ resourceLimits['memory'] = options.memoryLimit;
480
+ }
481
+ if (options.computeQuota) {
482
+ resourceLimits['compute'] = options.computeQuota;
483
+ }
484
+ const optimizedPath = path.join(outputDir, `${config.name}.optimized.wasm`);
485
+ const pipelineResult = await runOptimizationPipeline({
486
+ input: wasmPath,
487
+ output: optimizedPath,
488
+ optimize: options.icWasmOptimize,
489
+ optimizeLevel,
490
+ shrink: options.icWasmShrink,
491
+ resourceLimits: Object.keys(resourceLimits).length > 0 ? resourceLimits : undefined,
492
+ candidInterface: options.candidInterface,
493
+ });
494
+ optimizationWarnings = pipelineResult.warnings;
495
+ candidValidationPassed = pipelineResult.validationPassed;
496
+ if (pipelineResult.success && fs.existsSync(optimizedPath)) {
497
+ // Replace the original WASM with the optimized version
498
+ fs.copyFileSync(optimizedPath, wasmPath);
499
+ fs.unlinkSync(optimizedPath);
500
+ finalWasmSize = pipelineResult.finalSize;
501
+ optimizationReductionPercent = pipelineResult.reductionPercent;
502
+ }
503
+ else {
504
+ // Optimization failed but original WASM is still valid
505
+ optimizationWarnings = [
506
+ ...(optimizationWarnings ?? []),
507
+ 'Optimization pipeline did not fully succeed; using unoptimized WASM',
508
+ ];
509
+ }
510
+ }
511
+ const result = {
512
+ config,
513
+ wasmPath,
514
+ watPath,
515
+ statePath,
516
+ jsBundlePath,
517
+ sourceMapPath: options.debug ? sourceMapPath : undefined,
518
+ manifestPath,
519
+ wasmSize: finalWasmSize,
520
+ target,
521
+ timestamp: new Date(),
522
+ duration: Date.now() - startTime,
523
+ functionCount: 14, // Standard agent interface exports
524
+ originalWasmSize,
525
+ optimizationReductionPercent,
526
+ candidValidationPassed,
527
+ optimizationWarnings,
528
+ };
529
+ // Validate generated WASM
530
+ const validation = validateWasmEdgeModule(wasmBuffer);
531
+ if (!validation.valid) {
532
+ console.warn(`WASM validation warnings: ${validation.errors.join(', ')}`);
533
+ }
534
+ return result;
535
+ }
536
+ /**
537
+ * Validate WASM file integrity
538
+ *
539
+ * Checks that a file has valid WASM magic bytes.
540
+ */
541
+ export function validateWasmFile(filePath) {
542
+ try {
543
+ const buffer = fs.readFileSync(filePath);
544
+ // Check minimum size
545
+ if (buffer.length < 8) {
546
+ return false;
547
+ }
548
+ // Check magic bytes
549
+ if (!buffer.subarray(0, 4).equals(WASM_MAGIC)) {
550
+ return false;
551
+ }
552
+ // Check version
553
+ if (!buffer.subarray(4, 8).equals(WASM_VERSION)) {
554
+ return false;
555
+ }
556
+ return true;
557
+ }
558
+ catch {
559
+ return false;
560
+ }
561
+ }
562
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Config Persistence Module
3
+ *
4
+ * Manages agent configuration storage in ~/.agentvault/agents/<agent-id>/
5
+ * Supports reading, writing, and listing agent configurations.
6
+ */
7
+ import type { ParsedAgentConfig } from './config-schemas.js';
8
+ /**
9
+ * Get config file path for an agent
10
+ *
11
+ * @param agentId - Agent identifier
12
+ * @param fileName - Name of the config file (default: 'agent.json')
13
+ */
14
+ export declare function getConfigPath(agentId: string, fileName?: string): string;
15
+ /**
16
+ * Ensure agent vault directories exist
17
+ */
18
+ export declare function ensureVaultStructure(): void;
19
+ /**
20
+ * Write agent configuration to vault
21
+ *
22
+ * @param agentId - Agent identifier
23
+ * @param config - Parsed agent configuration
24
+ * @param fileName - Name of the config file (default: 'agent.json')
25
+ */
26
+ export declare function writeAgentConfig(agentId: string, config: ParsedAgentConfig, fileName?: string): void;
27
+ /**
28
+ * Read agent configuration from vault
29
+ *
30
+ * @param agentId - Agent identifier
31
+ * @param fileName - Name of the config file (default: 'agent.json')
32
+ */
33
+ export declare function readAgentConfig<T extends ParsedAgentConfig>(agentId: string, fileName?: string): T | null;
34
+ /**
35
+ * List all agents in vault
36
+ *
37
+ * @returns Array of agent IDs
38
+ */
39
+ export declare function listAgents(): string[];
40
+ /**
41
+ * Delete an agent's configuration from vault
42
+ *
43
+ * @param agentId - Agent identifier to remove
44
+ */
45
+ export declare function deleteAgentConfig(agentId: string): void;
46
+ //# sourceMappingURL=config-persistence.d.ts.map