agentvault 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/approve.js +5 -5
  4. package/dist/cli/commands/archive.js +5 -5
  5. package/dist/cli/commands/backup.js +5 -5
  6. package/dist/cli/commands/cloud-backup.js +12 -12
  7. package/dist/cli/commands/decrypt.js +2 -2
  8. package/dist/cli/commands/deploy.js +1 -1
  9. package/dist/cli/commands/exec.js +2 -2
  10. package/dist/cli/commands/fetch.js +4 -4
  11. package/dist/cli/commands/inference.js +5 -5
  12. package/dist/cli/commands/init.d.ts +1 -1
  13. package/dist/cli/commands/init.js +16 -16
  14. package/dist/cli/commands/list.js +4 -4
  15. package/dist/cli/commands/package.js +2 -2
  16. package/dist/cli/commands/profile.js +1 -1
  17. package/dist/cli/commands/rebuild.js +2 -2
  18. package/dist/cli/commands/show.js +1 -1
  19. package/dist/cli/commands/status.d.ts +1 -1
  20. package/dist/cli/commands/status.js +8 -8
  21. package/dist/cli/commands/trace.js +1 -1
  22. package/dist/cli/commands/wallet-export.js +1 -1
  23. package/dist/cli/commands/wallet-sign.js +1 -1
  24. package/dist/cli/commands/wallet.d.ts +1 -1
  25. package/dist/cli/commands/wallet.js +1 -1
  26. package/dist/cli/index.d.ts +2 -2
  27. package/dist/cli/index.js +3 -3
  28. package/dist/src/archival/archive-manager.d.ts +85 -0
  29. package/dist/src/archival/archive-manager.js +294 -0
  30. package/dist/src/archival/arweave-client.d.ts +88 -0
  31. package/dist/src/archival/arweave-client.js +223 -0
  32. package/dist/src/archival/index.d.ts +8 -0
  33. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  34. package/dist/src/backup/backup.d.ts +67 -0
  35. package/dist/src/backup/backup.js +231 -0
  36. package/dist/src/backup/index.d.ts +7 -0
  37. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  38. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  39. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  40. package/dist/src/cloud-storage/index.d.ts +11 -0
  41. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  42. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  43. package/dist/src/cloud-storage/provider-detector.js +158 -0
  44. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  45. package/dist/src/cloud-storage/types.js +10 -0
  46. package/dist/src/debugging/index.d.ts +6 -0
  47. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  48. package/dist/src/debugging/logs.d.ts +32 -0
  49. package/dist/src/debugging/logs.js +158 -0
  50. package/dist/src/debugging/types.d.ts +91 -0
  51. package/dist/src/debugging/types.js +5 -0
  52. package/dist/src/deployment/deployer.d.ts +52 -0
  53. package/dist/src/deployment/deployer.js +211 -0
  54. package/dist/src/deployment/icpClient.d.ts +144 -0
  55. package/dist/src/deployment/icpClient.js +545 -0
  56. package/dist/src/deployment/index.d.ts +11 -0
  57. package/dist/src/deployment/index.js +14 -0
  58. package/dist/src/deployment/promotion.d.ts +32 -0
  59. package/dist/src/deployment/promotion.js +114 -0
  60. package/dist/src/deployment/types.d.ts +101 -0
  61. package/dist/src/deployment/types.js +5 -0
  62. package/dist/src/icp/batch.d.ts +112 -0
  63. package/dist/src/icp/batch.js +273 -0
  64. package/dist/src/icp/cycles.d.ts +29 -0
  65. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  66. package/dist/src/icp/environment.d.ts +60 -0
  67. package/dist/src/icp/environment.js +183 -0
  68. package/dist/src/icp/icpcli.d.ts +204 -0
  69. package/dist/src/icp/icpcli.js +374 -0
  70. package/dist/src/icp/icwasm.d.ts +94 -0
  71. package/dist/src/icp/icwasm.js +197 -0
  72. package/dist/src/icp/identity.d.ts +50 -0
  73. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  74. package/dist/src/icp/index.d.ts +16 -0
  75. package/dist/src/icp/index.js +20 -0
  76. package/dist/src/icp/optimization.d.ts +16 -0
  77. package/dist/src/icp/optimization.js +225 -0
  78. package/dist/src/icp/tokens.d.ts +24 -0
  79. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  80. package/dist/src/icp/tool-detector.d.ts +31 -0
  81. package/dist/src/icp/tool-detector.js +104 -0
  82. package/dist/src/icp/types.d.ts +493 -0
  83. package/dist/src/icp/types.js +7 -0
  84. package/dist/src/index.d.ts +12 -0
  85. package/dist/src/index.js +18 -0
  86. package/dist/src/inference/bittensor-client.d.ts +108 -0
  87. package/dist/src/inference/bittensor-client.js +224 -0
  88. package/dist/src/inference/index.d.ts +8 -0
  89. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  90. package/dist/src/inference/inference-manager.d.ts +76 -0
  91. package/dist/src/inference/inference-manager.js +228 -0
  92. package/dist/src/metrics/index.d.ts +7 -0
  93. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  94. package/dist/src/metrics/metrics.d.ts +39 -0
  95. package/dist/src/metrics/metrics.js +129 -0
  96. package/dist/src/monitoring/alerting.d.ts +51 -0
  97. package/dist/src/monitoring/alerting.js +169 -0
  98. package/dist/src/monitoring/health.d.ts +40 -0
  99. package/dist/src/monitoring/health.js +164 -0
  100. package/dist/src/monitoring/index.d.ts +10 -0
  101. package/dist/src/monitoring/index.js +12 -0
  102. package/dist/src/monitoring/info.d.ts +15 -0
  103. package/dist/src/monitoring/info.js +109 -0
  104. package/dist/src/monitoring/types.d.ts +93 -0
  105. package/dist/src/monitoring/types.js +7 -0
  106. package/dist/src/network/index.d.ts +5 -0
  107. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  108. package/dist/src/network/network-config.d.ts +31 -0
  109. package/dist/src/network/network-config.js +109 -0
  110. package/dist/src/packaging/compiler.d.ts +61 -0
  111. package/dist/src/packaging/compiler.js +562 -0
  112. package/dist/src/packaging/config-persistence.d.ts +46 -0
  113. package/dist/src/packaging/config-persistence.js +108 -0
  114. package/dist/src/packaging/config-schemas.d.ts +115 -0
  115. package/dist/src/packaging/config-schemas.js +43 -0
  116. package/dist/src/packaging/detector.d.ts +26 -0
  117. package/dist/src/packaging/detector.js +193 -0
  118. package/dist/src/packaging/index.d.ts +16 -0
  119. package/dist/src/packaging/index.js +22 -0
  120. package/dist/src/packaging/packager.d.ts +31 -0
  121. package/dist/src/packaging/packager.js +90 -0
  122. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  123. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  124. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  125. package/dist/src/packaging/parsers/cline.js +185 -0
  126. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  127. package/dist/src/packaging/parsers/generic.js +228 -0
  128. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  129. package/dist/src/packaging/parsers/goose.js +175 -0
  130. package/dist/src/packaging/parsers/index.d.ts +11 -0
  131. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  132. package/dist/src/packaging/serializer.d.ts +108 -0
  133. package/dist/src/packaging/serializer.js +153 -0
  134. package/dist/src/packaging/types.d.ts +131 -0
  135. package/dist/src/packaging/types.js +5 -0
  136. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  137. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  138. package/dist/src/security/index.d.ts +11 -0
  139. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  140. package/dist/src/security/multisig.d.ts +102 -0
  141. package/dist/src/security/multisig.js +283 -0
  142. package/dist/src/security/types.d.ts +207 -0
  143. package/dist/src/security/types.js +217 -0
  144. package/dist/src/security/vetkeys.d.ts +179 -0
  145. package/dist/src/security/vetkeys.js +499 -0
  146. package/dist/src/testing/index.d.ts +6 -0
  147. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  148. package/dist/src/testing/local-runner.d.ts +23 -0
  149. package/dist/src/testing/local-runner.js +226 -0
  150. package/dist/src/testing/types.d.ts +98 -0
  151. package/dist/src/testing/types.js +5 -0
  152. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  153. package/dist/src/wallet/cbor-serializer.js +282 -0
  154. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  155. package/dist/src/wallet/chain-dispatcher.js +241 -0
  156. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  157. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  158. package/dist/src/wallet/index.d.ts +16 -0
  159. package/dist/src/wallet/index.js +22 -0
  160. package/dist/src/wallet/key-derivation.d.ts +117 -0
  161. package/dist/src/wallet/key-derivation.js +325 -0
  162. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  163. package/dist/src/wallet/providers/base-provider.js +58 -0
  164. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  165. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  166. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  167. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  168. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  169. package/dist/src/wallet/providers/solana-provider.js +393 -0
  170. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  171. package/dist/src/wallet/transaction-queue.js +195 -0
  172. package/dist/src/wallet/types.d.ts +167 -0
  173. package/dist/src/wallet/types.js +5 -0
  174. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  175. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  176. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  177. package/dist/src/wallet/wallet-manager.js +451 -0
  178. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  179. package/dist/src/wallet/wallet-storage.js +274 -0
  180. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  183. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  185. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  190. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  192. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  196. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  207. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  208. package/macos-wallet-app/Makefile +47 -0
  209. package/macos-wallet-app/project.yml +40 -0
  210. package/macos-wallet-app/setup.sh +73 -0
  211. package/package.json +10 -2
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  215. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  219. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  221. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  222. package/backups/test-backup.json +0 -28
  223. package/scripts/dev-dashboard.mjs +0 -84
  224. package/site/README.md +0 -63
  225. package/site/docusaurus.config.ts +0 -148
  226. package/site/package-lock.json +0 -18383
  227. package/site/package.json +0 -47
  228. package/site/sidebars.ts +0 -86
  229. package/site/static/.gitkeep +0 -0
  230. package/site/static/img/logo.svg +0 -28
  231. package/site/static/img/og-image.svg +0 -35
  232. package/src/archival/archive-manager.ts +0 -372
  233. package/src/archival/arweave-client.ts +0 -289
  234. package/src/backup/backup.ts +0 -315
  235. package/src/cloud-storage/cloud-sync.ts +0 -461
  236. package/src/cloud-storage/provider-detector.ts +0 -198
  237. package/src/debugging/logs.ts +0 -193
  238. package/src/debugging/types.ts +0 -100
  239. package/src/deployment/deployer.ts +0 -274
  240. package/src/deployment/icpClient.ts +0 -620
  241. package/src/deployment/index.ts +0 -46
  242. package/src/deployment/promotion.ts +0 -161
  243. package/src/deployment/types.ts +0 -111
  244. package/src/icp/batch.ts +0 -374
  245. package/src/icp/environment.ts +0 -215
  246. package/src/icp/icpcli.ts +0 -438
  247. package/src/icp/icwasm.ts +0 -222
  248. package/src/icp/index.ts +0 -94
  249. package/src/icp/optimization.ts +0 -242
  250. package/src/icp/tool-detector.ts +0 -110
  251. package/src/icp/types.ts +0 -574
  252. package/src/index.ts +0 -25
  253. package/src/inference/bittensor-client.ts +0 -304
  254. package/src/inference/inference-manager.ts +0 -327
  255. package/src/metrics/metrics.ts +0 -186
  256. package/src/monitoring/alerting.ts +0 -190
  257. package/src/monitoring/health.ts +0 -197
  258. package/src/monitoring/index.ts +0 -38
  259. package/src/monitoring/info.ts +0 -114
  260. package/src/monitoring/types.ts +0 -99
  261. package/src/network/network-config.ts +0 -129
  262. package/src/packaging/compiler.ts +0 -647
  263. package/src/packaging/config-persistence.ts +0 -135
  264. package/src/packaging/config-schemas.ts +0 -156
  265. package/src/packaging/detector.ts +0 -220
  266. package/src/packaging/index.ts +0 -90
  267. package/src/packaging/packager.ts +0 -118
  268. package/src/packaging/parsers/clawdbot.ts +0 -278
  269. package/src/packaging/parsers/cline.ts +0 -223
  270. package/src/packaging/parsers/generic.ts +0 -266
  271. package/src/packaging/parsers/goose.ts +0 -214
  272. package/src/packaging/serializer.ts +0 -260
  273. package/src/packaging/types.ts +0 -144
  274. package/src/packaging/wasmedge-compiler.ts +0 -406
  275. package/src/security/multisig.ts +0 -415
  276. package/src/security/types.ts +0 -416
  277. package/src/security/vetkeys.ts +0 -655
  278. package/src/testing/local-runner.ts +0 -264
  279. package/src/testing/types.ts +0 -104
  280. package/src/wallet/cbor-serializer.ts +0 -323
  281. package/src/wallet/chain-dispatcher.ts +0 -313
  282. package/src/wallet/cross-chain-aggregator.ts +0 -346
  283. package/src/wallet/index.ts +0 -76
  284. package/src/wallet/key-derivation.ts +0 -425
  285. package/src/wallet/providers/base-provider.ts +0 -154
  286. package/src/wallet/providers/cketh-provider.ts +0 -434
  287. package/src/wallet/providers/polkadot-provider.ts +0 -503
  288. package/src/wallet/providers/solana-provider.ts +0 -490
  289. package/src/wallet/transaction-queue.ts +0 -284
  290. package/src/wallet/types.ts +0 -178
  291. package/src/wallet/vetkeys-adapter.ts +0 -431
  292. package/src/wallet/wallet-manager.ts +0 -597
  293. package/src/wallet/wallet-storage.ts +0 -380
@@ -0,0 +1,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