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,114 @@
1
+ /**
2
+ * Environment promotion for canister deployment
3
+ *
4
+ * Handles promoting canisters between environments (dev -> staging -> production)
5
+ * CLE-102: Wired to actual deploy path
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import os from 'node:os';
10
+ import { parse, stringify } from 'yaml';
11
+ const AGENTVAULT_DIR = path.join(os.homedir(), '.agentvault');
12
+ const HISTORY_DIR = path.join(AGENTVAULT_DIR, 'history');
13
+ function ensureHistoryDir() {
14
+ if (!fs.existsSync(AGENTVAULT_DIR)) {
15
+ fs.mkdirSync(AGENTVAULT_DIR, { recursive: true });
16
+ }
17
+ if (!fs.existsSync(HISTORY_DIR)) {
18
+ fs.mkdirSync(HISTORY_DIR, { recursive: true });
19
+ }
20
+ }
21
+ function getHistoryPath(agentName) {
22
+ ensureHistoryDir();
23
+ return path.join(HISTORY_DIR, `${agentName}.yaml`);
24
+ }
25
+ export function loadDeploymentHistory(agentName) {
26
+ const historyPath = getHistoryPath(agentName);
27
+ if (!fs.existsSync(historyPath)) {
28
+ return [];
29
+ }
30
+ const content = fs.readFileSync(historyPath, 'utf8');
31
+ const parsed = parse(content);
32
+ if (Array.isArray(parsed)) {
33
+ return parsed;
34
+ }
35
+ return [];
36
+ }
37
+ export function saveDeploymentHistory(agentName, history) {
38
+ const historyPath = getHistoryPath(agentName);
39
+ fs.writeFileSync(historyPath, stringify(history), 'utf8');
40
+ }
41
+ export function addDeploymentToHistory(deployment) {
42
+ const history = loadDeploymentHistory(deployment.agentName);
43
+ history.push(deployment);
44
+ saveDeploymentHistory(deployment.agentName, history);
45
+ }
46
+ export function getLatestDeployment(agentName, environment) {
47
+ const history = loadDeploymentHistory(agentName);
48
+ const envHistory = history.filter((d) => d.environment === environment && d.success);
49
+ if (envHistory.length === 0) {
50
+ return null;
51
+ }
52
+ return envHistory.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime())[0] ?? null;
53
+ }
54
+ export function getAllDeployments(agentName) {
55
+ return loadDeploymentHistory(agentName);
56
+ }
57
+ /**
58
+ * Promote a canister from one environment to another
59
+ * Now calls actual deploy when skipDeploy is false
60
+ */
61
+ export async function promoteCanister(agentName, fromEnv, toEnv, options = {}) {
62
+ const sourceDeployment = getLatestDeployment(agentName, fromEnv);
63
+ if (!sourceDeployment) {
64
+ throw new Error(`No successful deployment found for ${agentName} in ${fromEnv} environment`);
65
+ }
66
+ const targetCanisterId = options.targetCanisterId || sourceDeployment.canisterId;
67
+ if (!options.skipDeploy && options.wasmPath) {
68
+ const { deployAgent } = await import('./deployer.js');
69
+ const deployResult = await deployAgent({
70
+ wasmPath: options.wasmPath,
71
+ network: toEnv,
72
+ canisterId: targetCanisterId,
73
+ mode: 'upgrade',
74
+ });
75
+ const targetDeployment = {
76
+ agentName,
77
+ environment: toEnv,
78
+ canisterId: deployResult.canister.canisterId,
79
+ wasmHash: deployResult.canister.wasmHash || sourceDeployment.wasmHash,
80
+ timestamp: new Date(),
81
+ version: sourceDeployment.version + 1,
82
+ success: true,
83
+ };
84
+ addDeploymentToHistory(targetDeployment);
85
+ return targetDeployment;
86
+ }
87
+ const targetDeployment = {
88
+ agentName,
89
+ environment: toEnv,
90
+ canisterId: targetCanisterId,
91
+ wasmHash: sourceDeployment.wasmHash,
92
+ timestamp: new Date(),
93
+ version: sourceDeployment.version + 1,
94
+ success: true,
95
+ };
96
+ addDeploymentToHistory(targetDeployment);
97
+ return targetDeployment;
98
+ }
99
+ /**
100
+ * Get deployment history for rollback
101
+ */
102
+ export function getDeploymentForRollback(agentName, environment, version) {
103
+ const history = loadDeploymentHistory(agentName);
104
+ const found = history.find((d) => d.environment === environment && d.version === version);
105
+ return found !== undefined ? found : null;
106
+ }
107
+ /**
108
+ * Get deployments by time range for rollback
109
+ */
110
+ export function getDeploymentsByTimeRange(agentName, environment, fromTime, toTime) {
111
+ const history = loadDeploymentHistory(agentName);
112
+ return history.filter((d) => d.environment === environment && d.timestamp >= fromTime && d.timestamp <= toTime && d.success).sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
113
+ }
114
+ //# sourceMappingURL=promotion.js.map
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Types for ICP canister deployment
3
+ */
4
+ /**
5
+ * Network target for deployment
6
+ *
7
+ * - 'local': Local dfx/icp replica
8
+ * - 'ic': IC mainnet
9
+ * - string: Named environment from icp.yaml (e.g. 'dev', 'staging', 'production')
10
+ */
11
+ export type NetworkType = 'local' | 'ic' | string;
12
+ /**
13
+ * Which tool is being used for deployment
14
+ */
15
+ export type DeployToolType = 'icp' | 'dfx' | 'sdk';
16
+ /**
17
+ * Deployment status codes
18
+ */
19
+ export type DeploymentStatus = 'pending' | 'deploying' | 'deployed' | 'failed' | 'running' | 'stopping' | 'stopped';
20
+ /**
21
+ * Information about a deployed canister
22
+ */
23
+ export interface CanisterInfo {
24
+ /** Canister ID on the network */
25
+ canisterId: string;
26
+ /** Network where the canister is deployed */
27
+ network: NetworkType;
28
+ /** Agent name associated with this canister */
29
+ agentName: string;
30
+ /** Deployment timestamp */
31
+ deployedAt: Date;
32
+ /** WASM module hash (for verification) */
33
+ wasmHash?: string;
34
+ }
35
+ /**
36
+ * Options for deployment operation
37
+ */
38
+ export interface DeployOptions {
39
+ /** Path to the WASM file to deploy */
40
+ wasmPath: string;
41
+ /** Target network for deployment */
42
+ network: NetworkType;
43
+ /** Existing canister ID (for upgrades) */
44
+ canisterId?: string;
45
+ /** Skip confirmation prompts */
46
+ skipConfirmation?: boolean;
47
+ /** Path to dfx identity to use */
48
+ identityPath?: string;
49
+ /** Named environment from icp.yaml */
50
+ environment?: string;
51
+ /** Identity name for icp-cli */
52
+ identity?: string;
53
+ /** Cycles allocation for deployment */
54
+ cycles?: string;
55
+ /** Deploy mode (auto, install, reinstall, upgrade) */
56
+ mode?: 'auto' | 'install' | 'reinstall' | 'upgrade';
57
+ /** Override project root for icp.yaml lookup */
58
+ projectRoot?: string;
59
+ }
60
+ /**
61
+ * Result of a successful deployment
62
+ */
63
+ export interface DeployResult {
64
+ /** Deployed canister information */
65
+ canister: CanisterInfo;
66
+ /** Whether this was a new deployment or upgrade */
67
+ isUpgrade: boolean;
68
+ /** Cycles consumed by deployment */
69
+ cyclesUsed?: bigint;
70
+ /** Any warnings during deployment */
71
+ warnings: string[];
72
+ /** Which tool was used for deployment */
73
+ deployTool?: DeployToolType;
74
+ }
75
+ /**
76
+ * Error that occurred during deployment
77
+ */
78
+ export interface DeploymentError {
79
+ /** Error code for programmatic handling */
80
+ code: string;
81
+ /** Human-readable error message */
82
+ message: string;
83
+ /** Network where the error occurred */
84
+ network?: NetworkType;
85
+ /** Canister ID if applicable */
86
+ canisterId?: string;
87
+ }
88
+ /**
89
+ * Configuration for ICP client
90
+ */
91
+ export interface ICPClientConfig {
92
+ /** Target network */
93
+ network: NetworkType;
94
+ /** Host URL (defaults based on network) */
95
+ host?: string;
96
+ /** Path to dfx identity file for signing */
97
+ identity?: string;
98
+ /** Canister ID for operations (optional, used when deploying/upgrading) */
99
+ canisterId?: string;
100
+ }
101
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for ICP canister deployment
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Batched canister operations
3
+ *
4
+ * Executes multiple canister operations in parallel with dependency ordering,
5
+ * retries, and configurable concurrency.
6
+ */
7
+ import type { IcpCommonOptions } from '../icp/types.js';
8
+ export type BatchOperationType = 'call' | 'query' | 'status' | 'deploy';
9
+ export interface BatchOperation {
10
+ /** Operation ID (auto-generated) */
11
+ id: string;
12
+ /** Operation type */
13
+ type: BatchOperationType;
14
+ /** Target canister ID */
15
+ canisterId: string;
16
+ /** Method name (for call/query) */
17
+ method?: string;
18
+ /** Arguments (Candid format) */
19
+ args?: string;
20
+ /** Options for the operation */
21
+ options?: IcpCommonOptions;
22
+ /** Dependencies (operation IDs that must complete first) */
23
+ dependsOn?: string[];
24
+ }
25
+ export interface BatchResult {
26
+ /** Operation ID */
27
+ operationId: string;
28
+ /** Whether this operation succeeded */
29
+ success: boolean;
30
+ /** Result data (if success) */
31
+ data?: unknown;
32
+ /** Error message (if failure) */
33
+ error?: string;
34
+ /** Execution duration in milliseconds */
35
+ durationMs: number;
36
+ }
37
+ export interface BatchExecutionResult {
38
+ /** Total operations */
39
+ total: number;
40
+ /** Successful operations */
41
+ succeeded: number;
42
+ /** Failed operations */
43
+ failed: number;
44
+ /** Individual results */
45
+ results: BatchResult[];
46
+ /** Total execution time */
47
+ totalDurationMs: number;
48
+ }
49
+ export interface BatchConfig {
50
+ /** Maximum concurrent operations */
51
+ maxConcurrency: number;
52
+ /** Timeout per operation in milliseconds */
53
+ operationTimeoutMs: number;
54
+ /** Whether to stop on first failure */
55
+ stopOnFailure: boolean;
56
+ /** Retry failed operations */
57
+ retryCount: number;
58
+ /** Retry delay in milliseconds */
59
+ retryDelayMs: number;
60
+ }
61
+ /**
62
+ * BatchExecutor class for managing and executing batched canister operations
63
+ */
64
+ export declare class BatchExecutor {
65
+ private operations;
66
+ private config;
67
+ constructor(config?: Partial<BatchConfig>);
68
+ /**
69
+ * Add a single operation to the batch
70
+ */
71
+ addOperation(operation: BatchOperation): void;
72
+ /**
73
+ * Add multiple operations to the batch
74
+ */
75
+ addOperations(ops: BatchOperation[]): void;
76
+ /**
77
+ * Execute all operations in the batch
78
+ */
79
+ execute(): Promise<BatchExecutionResult>;
80
+ /**
81
+ * Execute an operation with retry logic
82
+ */
83
+ private executeWithRetry;
84
+ /**
85
+ * Get a dry-run plan of execution order
86
+ */
87
+ executeDryRun(): {
88
+ order: string[];
89
+ parallelGroups: string[][];
90
+ };
91
+ /**
92
+ * Clear all operations
93
+ */
94
+ clear(): void;
95
+ }
96
+ /**
97
+ * Create a new batch executor with custom config
98
+ */
99
+ export declare function createBatchExecutor(config?: Partial<BatchConfig>): BatchExecutor;
100
+ /**
101
+ * Helper to create a status-check operation
102
+ */
103
+ export declare function createStatusOperation(canisterId: string, options?: IcpCommonOptions): BatchOperation;
104
+ /**
105
+ * Helper to create a query operation
106
+ */
107
+ export declare function createQueryOperation(canisterId: string, method: string, args?: string, options?: IcpCommonOptions): BatchOperation;
108
+ /**
109
+ * Helper to create a call operation
110
+ */
111
+ export declare function createCallOperation(canisterId: string, method: string, args?: string, options?: IcpCommonOptions): BatchOperation;
112
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Batched canister operations
3
+ *
4
+ * Executes multiple canister operations in parallel with dependency ordering,
5
+ * retries, and configurable concurrency.
6
+ */
7
+ import { canisterStatus, canisterCall } from '../icp/icpcli.js';
8
+ const DEFAULT_BATCH_CONFIG = {
9
+ maxConcurrency: 10,
10
+ operationTimeoutMs: 30000,
11
+ stopOnFailure: false,
12
+ retryCount: 2,
13
+ retryDelayMs: 1000,
14
+ };
15
+ let operationCounter = 0;
16
+ function generateOperationId() {
17
+ return `op_${++operationCounter}_${Date.now()}`;
18
+ }
19
+ /**
20
+ * Topologically sort operations by dependency graph
21
+ */
22
+ function sortOperationsByDeps(operations) {
23
+ const opMap = new Map(operations.map((op) => [op.id, op]));
24
+ const visited = new Set();
25
+ const visiting = new Set();
26
+ const sorted = [];
27
+ function visit(opId) {
28
+ if (visited.has(opId))
29
+ return;
30
+ if (visiting.has(opId)) {
31
+ throw new Error(`Circular dependency detected involving operation: ${opId}`);
32
+ }
33
+ visiting.add(opId);
34
+ const op = opMap.get(opId);
35
+ if (op !== undefined) {
36
+ if (op.dependsOn) {
37
+ for (const depId of op.dependsOn) {
38
+ visit(depId);
39
+ }
40
+ }
41
+ visiting.delete(opId);
42
+ visited.add(opId);
43
+ sorted.push(op);
44
+ }
45
+ }
46
+ for (const op of operations) {
47
+ visit(op.id);
48
+ }
49
+ return sorted;
50
+ }
51
+ /**
52
+ * Execute a single batch operation
53
+ */
54
+ async function executeOperation(operation, config) {
55
+ const startTime = Date.now();
56
+ let result;
57
+ const timeoutPromise = new Promise((_, reject) => {
58
+ setTimeout(() => reject(new Error(`Operation timeout after ${config.operationTimeoutMs}ms`)), config.operationTimeoutMs);
59
+ });
60
+ try {
61
+ const executionPromise = (async () => {
62
+ switch (operation.type) {
63
+ case 'status': {
64
+ const statusResult = await canisterStatus({
65
+ canister: operation.canisterId,
66
+ ...operation.options,
67
+ });
68
+ return {
69
+ operationId: operation.id,
70
+ success: statusResult.success,
71
+ data: statusResult.stdout,
72
+ error: statusResult.success ? undefined : statusResult.stderr,
73
+ durationMs: 0,
74
+ };
75
+ }
76
+ case 'call':
77
+ case 'query': {
78
+ if (!operation.method) {
79
+ throw new Error('Method name is required for call/query operations');
80
+ }
81
+ const callResult = await canisterCall({
82
+ canister: operation.canisterId,
83
+ method: operation.method,
84
+ args: operation.args,
85
+ ...operation.options,
86
+ });
87
+ return {
88
+ operationId: operation.id,
89
+ success: callResult.success,
90
+ data: callResult.stdout,
91
+ error: callResult.success ? undefined : callResult.stderr,
92
+ durationMs: 0,
93
+ };
94
+ }
95
+ case 'deploy':
96
+ return {
97
+ operationId: operation.id,
98
+ success: true,
99
+ data: { message: 'Deploy operation placeholder' },
100
+ durationMs: 0,
101
+ };
102
+ default:
103
+ return {
104
+ operationId: operation.id,
105
+ success: false,
106
+ error: `Unknown operation type: ${operation.type}`,
107
+ durationMs: 0,
108
+ };
109
+ }
110
+ })();
111
+ result = await Promise.race([executionPromise, timeoutPromise]);
112
+ }
113
+ catch (error) {
114
+ result = {
115
+ operationId: operation.id,
116
+ success: false,
117
+ error: error instanceof Error ? error.message : 'Unknown error',
118
+ durationMs: 0,
119
+ };
120
+ }
121
+ result.durationMs = Date.now() - startTime;
122
+ return result;
123
+ }
124
+ /**
125
+ * BatchExecutor class for managing and executing batched canister operations
126
+ */
127
+ export class BatchExecutor {
128
+ operations = new Map();
129
+ config;
130
+ constructor(config = {}) {
131
+ this.config = { ...DEFAULT_BATCH_CONFIG, ...config };
132
+ }
133
+ /**
134
+ * Add a single operation to the batch
135
+ */
136
+ addOperation(operation) {
137
+ this.operations.set(generateOperationId(), operation);
138
+ }
139
+ /**
140
+ * Add multiple operations to the batch
141
+ */
142
+ addOperations(ops) {
143
+ for (const op of ops) {
144
+ this.operations.set(generateOperationId(), op);
145
+ }
146
+ }
147
+ /**
148
+ * Execute all operations in the batch
149
+ */
150
+ async execute() {
151
+ const startTime = Date.now();
152
+ const allOperations = Array.from(this.operations.values());
153
+ const sortedOps = sortOperationsByDeps(allOperations);
154
+ let succeeded = 0;
155
+ let failed = 0;
156
+ const executionResults = [];
157
+ for (let i = 0; i < sortedOps.length; i += this.config.maxConcurrency) {
158
+ const batch = sortedOps.slice(i, i + this.config.maxConcurrency);
159
+ const batchResults = await Promise.all(batch.map((op) => this.executeWithRetry(op)));
160
+ for (const result of batchResults) {
161
+ executionResults.push(result);
162
+ if (result.success) {
163
+ succeeded++;
164
+ }
165
+ else {
166
+ failed++;
167
+ if (this.config.stopOnFailure) {
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return {
174
+ total: allOperations.length,
175
+ succeeded,
176
+ failed,
177
+ results: executionResults,
178
+ totalDurationMs: Date.now() - startTime,
179
+ };
180
+ }
181
+ /**
182
+ * Execute an operation with retry logic
183
+ */
184
+ async executeWithRetry(operation) {
185
+ let lastError;
186
+ let delay = this.config.retryDelayMs;
187
+ for (let attempt = 0; attempt <= this.config.retryCount; attempt++) {
188
+ try {
189
+ const result = await executeOperation(operation, this.config);
190
+ if (result.success || attempt === this.config.retryCount) {
191
+ return result;
192
+ }
193
+ lastError = result.error;
194
+ }
195
+ catch (error) {
196
+ lastError = error instanceof Error ? error.message : 'Unknown error';
197
+ }
198
+ if (attempt < this.config.retryCount) {
199
+ await new Promise((resolve) => setTimeout(resolve, delay));
200
+ delay *= 2;
201
+ }
202
+ }
203
+ return {
204
+ operationId: operation.id,
205
+ success: false,
206
+ error: lastError || 'Max retries exceeded',
207
+ durationMs: 0,
208
+ };
209
+ }
210
+ /**
211
+ * Get a dry-run plan of execution order
212
+ */
213
+ executeDryRun() {
214
+ const allOperations = Array.from(this.operations.values());
215
+ const sortedOps = sortOperationsByDeps(allOperations);
216
+ const order = sortedOps.map((op) => op.id);
217
+ const parallelGroups = [];
218
+ for (let i = 0; i < sortedOps.length; i += this.config.maxConcurrency) {
219
+ parallelGroups.push(sortedOps.slice(i, i + this.config.maxConcurrency).map((op) => op.id));
220
+ }
221
+ return { order, parallelGroups };
222
+ }
223
+ /**
224
+ * Clear all operations
225
+ */
226
+ clear() {
227
+ this.operations.clear();
228
+ }
229
+ }
230
+ /**
231
+ * Create a new batch executor with custom config
232
+ */
233
+ export function createBatchExecutor(config) {
234
+ return new BatchExecutor(config);
235
+ }
236
+ /**
237
+ * Helper to create a status-check operation
238
+ */
239
+ export function createStatusOperation(canisterId, options) {
240
+ return {
241
+ id: generateOperationId(),
242
+ type: 'status',
243
+ canisterId,
244
+ options,
245
+ };
246
+ }
247
+ /**
248
+ * Helper to create a query operation
249
+ */
250
+ export function createQueryOperation(canisterId, method, args, options) {
251
+ return {
252
+ id: generateOperationId(),
253
+ type: 'query',
254
+ canisterId,
255
+ method,
256
+ args,
257
+ options,
258
+ };
259
+ }
260
+ /**
261
+ * Helper to create a call operation
262
+ */
263
+ export function createCallOperation(canisterId, method, args, options) {
264
+ return {
265
+ id: generateOperationId(),
266
+ type: 'call',
267
+ canisterId,
268
+ method,
269
+ args,
270
+ options,
271
+ };
272
+ }
273
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Cycles Management
3
+ *
4
+ * Provides cycles management via icp-cli.
5
+ * Check balances, mint cycles, transfer cycles.
6
+ */
7
+ /**
8
+ * Check cycle balance of a canister.
9
+ *
10
+ * @param canister - Canister ID or name
11
+ * @returns Command result with balance in stdout
12
+ */
13
+ export declare function checkBalance(canister: string): Promise<any>;
14
+ /**
15
+ * Mint cycles to a canister.
16
+ *
17
+ * @param amount - Amount to mint
18
+ * @returns Command result
19
+ */
20
+ export declare function mintCycles(amount: string): Promise<any>;
21
+ /**
22
+ * Transfer cycles between canisters.
23
+ *
24
+ * @param amount - Amount to transfer
25
+ * @param to - Recipient principal or canister ID
26
+ * @returns Command result
27
+ */
28
+ export declare function transferCycles(amount: string, to: string): Promise<any>;
29
+ //# sourceMappingURL=cycles.d.ts.map
@@ -4,37 +4,25 @@
4
4
  * Provides cycles management via icp-cli.
5
5
  * Check balances, mint cycles, transfer cycles.
6
6
  */
7
-
8
- import {
9
- cyclesBalance,
10
- cyclesMint,
11
- cyclesTransfer,
12
- } from './icpcli.js';
13
-
7
+ import { cyclesBalance, cyclesMint, cyclesTransfer, } from './icpcli.js';
14
8
  /**
15
9
  * Check cycle balance of a canister.
16
10
  *
17
11
  * @param canister - Canister ID or name
18
12
  * @returns Command result with balance in stdout
19
13
  */
20
- export async function checkBalance(
21
- canister: string,
22
- ): Promise<any> {
23
- return cyclesBalance({ canister });
14
+ export async function checkBalance(canister) {
15
+ return cyclesBalance({ canister });
24
16
  }
25
-
26
17
  /**
27
18
  * Mint cycles to a canister.
28
19
  *
29
20
  * @param amount - Amount to mint
30
21
  * @returns Command result
31
22
  */
32
- export async function mintCycles(
33
- amount: string,
34
- ): Promise<any> {
35
- return cyclesMint({ amount });
23
+ export async function mintCycles(amount) {
24
+ return cyclesMint({ amount });
36
25
  }
37
-
38
26
  /**
39
27
  * Transfer cycles between canisters.
40
28
  *
@@ -42,9 +30,7 @@ export async function mintCycles(
42
30
  * @param to - Recipient principal or canister ID
43
31
  * @returns Command result
44
32
  */
45
- export async function transferCycles(
46
- amount: string,
47
- to: string,
48
- ): Promise<any> {
49
- return cyclesTransfer({ amount, to });
33
+ export async function transferCycles(amount, to) {
34
+ return cyclesTransfer({ amount, to });
50
35
  }
36
+ //# sourceMappingURL=cycles.js.map