agentvault 1.0.0
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.
- package/.dfx/local/network-id +4 -0
- package/.next/trace +2 -0
- package/.vercel/README.txt +11 -0
- package/.vercel/project.json +1 -0
- package/AGENTS.md +43 -0
- package/CHANGELOG.md +196 -0
- package/LICENSE +21 -0
- package/PLAN_VAULT_INTEGRATION.md +318 -0
- package/README.md +253 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +28 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +1 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +28 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +1 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +28 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +1 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +28 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +1 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +1 -0
- package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +28 -0
- package/backups/test-backup.json +28 -0
- package/dist/cli/commands/approve.d.ts +4 -0
- package/dist/cli/commands/approve.js +232 -0
- package/dist/cli/commands/archive.d.ts +4 -0
- package/dist/cli/commands/archive.js +192 -0
- package/dist/cli/commands/backup.d.ts +4 -0
- package/dist/cli/commands/backup.js +164 -0
- package/dist/cli/commands/cloud-backup.d.ts +4 -0
- package/dist/cli/commands/cloud-backup.js +221 -0
- package/dist/cli/commands/cycles.d.ts +8 -0
- package/dist/cli/commands/cycles.js +83 -0
- package/dist/cli/commands/decrypt.d.ts +16 -0
- package/dist/cli/commands/decrypt.js +101 -0
- package/dist/cli/commands/deploy.d.ts +32 -0
- package/dist/cli/commands/deploy.js +208 -0
- package/dist/cli/commands/exec.d.ts +26 -0
- package/dist/cli/commands/exec.js +109 -0
- package/dist/cli/commands/fetch.d.ts +23 -0
- package/dist/cli/commands/fetch.js +164 -0
- package/dist/cli/commands/health.d.ts +8 -0
- package/dist/cli/commands/health.js +72 -0
- package/dist/cli/commands/identity.d.ts +8 -0
- package/dist/cli/commands/identity.js +140 -0
- package/dist/cli/commands/inference.d.ts +4 -0
- package/dist/cli/commands/inference.js +225 -0
- package/dist/cli/commands/info.d.ts +8 -0
- package/dist/cli/commands/info.js +59 -0
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.js +135 -0
- package/dist/cli/commands/instrument.d.ts +8 -0
- package/dist/cli/commands/instrument.js +35 -0
- package/dist/cli/commands/list.d.ts +36 -0
- package/dist/cli/commands/list.js +173 -0
- package/dist/cli/commands/logs.d.ts +8 -0
- package/dist/cli/commands/logs.js +96 -0
- package/dist/cli/commands/monitor.d.ts +8 -0
- package/dist/cli/commands/monitor.js +84 -0
- package/dist/cli/commands/network.d.ts +14 -0
- package/dist/cli/commands/network.js +258 -0
- package/dist/cli/commands/package.d.ts +36 -0
- package/dist/cli/commands/package.js +188 -0
- package/dist/cli/commands/profile.d.ts +8 -0
- package/dist/cli/commands/profile.js +76 -0
- package/dist/cli/commands/promote.d.ts +8 -0
- package/dist/cli/commands/promote.js +89 -0
- package/dist/cli/commands/rebuild.d.ts +21 -0
- package/dist/cli/commands/rebuild.js +140 -0
- package/dist/cli/commands/rollback.d.ts +8 -0
- package/dist/cli/commands/rollback.js +120 -0
- package/dist/cli/commands/show.d.ts +36 -0
- package/dist/cli/commands/show.js +200 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.js +34 -0
- package/dist/cli/commands/status.d.ts +14 -0
- package/dist/cli/commands/status.js +83 -0
- package/dist/cli/commands/test.d.ts +8 -0
- package/dist/cli/commands/test.js +109 -0
- package/dist/cli/commands/tokens.d.ts +8 -0
- package/dist/cli/commands/tokens.js +62 -0
- package/dist/cli/commands/trace.d.ts +8 -0
- package/dist/cli/commands/trace.js +68 -0
- package/dist/cli/commands/wallet-export.d.ts +13 -0
- package/dist/cli/commands/wallet-export.js +140 -0
- package/dist/cli/commands/wallet-history.d.ts +10 -0
- package/dist/cli/commands/wallet-history.js +127 -0
- package/dist/cli/commands/wallet-import.d.ts +10 -0
- package/dist/cli/commands/wallet-import.js +209 -0
- package/dist/cli/commands/wallet-multi-send.d.ts +17 -0
- package/dist/cli/commands/wallet-multi-send.js +195 -0
- package/dist/cli/commands/wallet-process-queue.d.ts +19 -0
- package/dist/cli/commands/wallet-process-queue.js +209 -0
- package/dist/cli/commands/wallet-sign.d.ts +13 -0
- package/dist/cli/commands/wallet-sign.js +207 -0
- package/dist/cli/commands/wallet.d.ts +12 -0
- package/dist/cli/commands/wallet.js +794 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.js +96 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.js +14 -0
- package/fixup_1_0_OSS_release.md +136 -0
- package/fixup_REALEASE_PRD.md +136 -0
- package/package.json +79 -0
- package/pnpm-workspace.yaml +5 -0
- package/scripts/dev-dashboard.mjs +84 -0
- package/site/README.md +63 -0
- package/site/docusaurus.config.ts +148 -0
- package/site/package-lock.json +18383 -0
- package/site/package.json +47 -0
- package/site/sidebars.ts +86 -0
- package/site/static/.gitkeep +0 -0
- package/site/static/img/logo.svg +28 -0
- package/site/static/img/og-image.svg +35 -0
- package/src/archival/archive-manager.ts +372 -0
- package/src/archival/arweave-client.ts +289 -0
- package/src/archival/index.ts +8 -0
- package/src/backup/backup.ts +315 -0
- package/src/backup/index.ts +7 -0
- package/src/cloud-storage/cloud-sync.ts +461 -0
- package/src/cloud-storage/index.ts +11 -0
- package/src/cloud-storage/provider-detector.ts +198 -0
- package/src/cloud-storage/types.ts +104 -0
- package/src/debugging/index.ts +6 -0
- package/src/debugging/logs.ts +193 -0
- package/src/debugging/types.ts +100 -0
- package/src/deployment/deployer.ts +274 -0
- package/src/deployment/icpClient.ts +620 -0
- package/src/deployment/index.ts +46 -0
- package/src/deployment/promotion.ts +161 -0
- package/src/deployment/types.ts +111 -0
- package/src/icp/batch.ts +374 -0
- package/src/icp/cycles.ts +50 -0
- package/src/icp/environment.ts +215 -0
- package/src/icp/icpcli.ts +438 -0
- package/src/icp/icwasm.ts +222 -0
- package/src/icp/identity.ts +77 -0
- package/src/icp/index.ts +94 -0
- package/src/icp/optimization.ts +242 -0
- package/src/icp/tokens.ts +36 -0
- package/src/icp/tool-detector.ts +110 -0
- package/src/icp/types.ts +574 -0
- package/src/index.ts +25 -0
- package/src/inference/bittensor-client.ts +304 -0
- package/src/inference/index.ts +8 -0
- package/src/inference/inference-manager.ts +327 -0
- package/src/metrics/index.ts +7 -0
- package/src/metrics/metrics.ts +186 -0
- package/src/monitoring/alerting.ts +190 -0
- package/src/monitoring/health.ts +197 -0
- package/src/monitoring/index.ts +38 -0
- package/src/monitoring/info.ts +114 -0
- package/src/monitoring/types.ts +99 -0
- package/src/network/index.ts +5 -0
- package/src/network/network-config.ts +129 -0
- package/src/packaging/compiler.ts +647 -0
- package/src/packaging/config-persistence.ts +135 -0
- package/src/packaging/config-schemas.ts +156 -0
- package/src/packaging/detector.ts +220 -0
- package/src/packaging/index.ts +90 -0
- package/src/packaging/packager.ts +118 -0
- package/src/packaging/parsers/clawdbot.ts +278 -0
- package/src/packaging/parsers/cline.ts +223 -0
- package/src/packaging/parsers/generic.ts +266 -0
- package/src/packaging/parsers/goose.ts +214 -0
- package/src/packaging/parsers/index.ts +11 -0
- package/src/packaging/serializer.ts +260 -0
- package/src/packaging/types.ts +144 -0
- package/src/packaging/wasmedge-compiler.ts +406 -0
- package/src/security/index.ts +17 -0
- package/src/security/multisig.ts +415 -0
- package/src/security/types.ts +416 -0
- package/src/security/vetkeys.ts +655 -0
- package/src/testing/index.ts +6 -0
- package/src/testing/local-runner.ts +264 -0
- package/src/testing/types.ts +104 -0
- package/src/wallet/cbor-serializer.ts +323 -0
- package/src/wallet/chain-dispatcher.ts +313 -0
- package/src/wallet/cross-chain-aggregator.ts +346 -0
- package/src/wallet/index.ts +76 -0
- package/src/wallet/key-derivation.ts +425 -0
- package/src/wallet/providers/base-provider.ts +154 -0
- package/src/wallet/providers/cketh-provider.ts +434 -0
- package/src/wallet/providers/polkadot-provider.ts +503 -0
- package/src/wallet/providers/solana-provider.ts +490 -0
- package/src/wallet/transaction-queue.ts +284 -0
- package/src/wallet/types.ts +178 -0
- package/src/wallet/vetkeys-adapter.ts +431 -0
- package/src/wallet/wallet-manager.ts +597 -0
- package/src/wallet/wallet-storage.ts +380 -0
- package/vercel.json +8 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ic-wasm Wrapper
|
|
3
|
+
*
|
|
4
|
+
* TypeScript wrapper around the ic-wasm CLI tool (v0.9.11).
|
|
5
|
+
* Provides typed interfaces for WASM optimization, shrinking,
|
|
6
|
+
* metadata management, resource limiting, endpoint validation,
|
|
7
|
+
* and instrumentation.
|
|
8
|
+
*
|
|
9
|
+
* Usage pattern:
|
|
10
|
+
* ic-wasm [OPTIONS] <INPUT> <COMMAND>
|
|
11
|
+
* Output is written with -o <OUTPUT>
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { execa } from 'execa';
|
|
15
|
+
import type {
|
|
16
|
+
IcWasmResult,
|
|
17
|
+
IcWasmOptimizeOptions,
|
|
18
|
+
IcWasmShrinkOptions,
|
|
19
|
+
IcWasmResourceOptions,
|
|
20
|
+
IcWasmMetadataOptions,
|
|
21
|
+
IcWasmCheckEndpointsOptions,
|
|
22
|
+
IcWasmInstrumentOptions,
|
|
23
|
+
IcWasmInfo,
|
|
24
|
+
} from './types.js';
|
|
25
|
+
|
|
26
|
+
const IC_WASM_BIN = 'ic-wasm';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Execute an ic-wasm command and return the result.
|
|
30
|
+
*
|
|
31
|
+
* @param args - Command-line arguments (after 'ic-wasm')
|
|
32
|
+
* @param timeoutMs - Timeout in milliseconds (default 60s)
|
|
33
|
+
* @returns Structured result with stdout, stderr, exitCode
|
|
34
|
+
*/
|
|
35
|
+
async function runIcWasm(args: string[], timeoutMs = 60_000): Promise<IcWasmResult> {
|
|
36
|
+
try {
|
|
37
|
+
const result = await execa(IC_WASM_BIN, args, {
|
|
38
|
+
reject: false,
|
|
39
|
+
timeout: timeoutMs,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
success: result.exitCode === 0,
|
|
43
|
+
stdout: result.stdout,
|
|
44
|
+
stderr: result.stderr,
|
|
45
|
+
exitCode: result.exitCode ?? 1,
|
|
46
|
+
};
|
|
47
|
+
} catch (error) {
|
|
48
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
stdout: '',
|
|
52
|
+
stderr: message,
|
|
53
|
+
exitCode: 1,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Optimize a WASM module using wasm-opt.
|
|
60
|
+
*
|
|
61
|
+
* Applies dead-code elimination, constant folding, and other
|
|
62
|
+
* optimizations to reduce WASM size and improve performance.
|
|
63
|
+
*
|
|
64
|
+
* @param options - Optimization options
|
|
65
|
+
* @returns Command result
|
|
66
|
+
*/
|
|
67
|
+
export async function optimize(options: IcWasmOptimizeOptions): Promise<IcWasmResult> {
|
|
68
|
+
const args = [options.input, 'optimize', '-o', options.output];
|
|
69
|
+
if (options.level) {
|
|
70
|
+
args.push(`--${options.level}`);
|
|
71
|
+
}
|
|
72
|
+
return runIcWasm(args, 120_000);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Shrink a WASM module by removing unused functions and debug info.
|
|
77
|
+
*
|
|
78
|
+
* This is a lighter-weight optimization focused purely on size reduction
|
|
79
|
+
* without the full wasm-opt pipeline.
|
|
80
|
+
*
|
|
81
|
+
* @param options - Shrink options
|
|
82
|
+
* @returns Command result
|
|
83
|
+
*/
|
|
84
|
+
export async function shrink(options: IcWasmShrinkOptions): Promise<IcWasmResult> {
|
|
85
|
+
const args = [options.input, 'shrink', '-o', options.output];
|
|
86
|
+
return runIcWasm(args);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Set resource limits on a WASM module.
|
|
91
|
+
*
|
|
92
|
+
* Embeds resource constraints (memory, compute) into the WASM metadata
|
|
93
|
+
* so the ICP runtime can enforce them.
|
|
94
|
+
*
|
|
95
|
+
* @param options - Resource limit options
|
|
96
|
+
* @returns Command result
|
|
97
|
+
*/
|
|
98
|
+
export async function setResource(options: IcWasmResourceOptions): Promise<IcWasmResult> {
|
|
99
|
+
const args = [
|
|
100
|
+
options.input,
|
|
101
|
+
'resource',
|
|
102
|
+
'-o', options.output,
|
|
103
|
+
options.name,
|
|
104
|
+
options.value,
|
|
105
|
+
];
|
|
106
|
+
return runIcWasm(args);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* List metadata in a WASM module.
|
|
111
|
+
*
|
|
112
|
+
* @param input - Input WASM file path
|
|
113
|
+
* @returns Command result with metadata listing in stdout
|
|
114
|
+
*/
|
|
115
|
+
export async function listMetadata(input: string): Promise<IcWasmResult> {
|
|
116
|
+
return runIcWasm([input, 'metadata', 'list']);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get a specific metadata value from a WASM module.
|
|
121
|
+
*
|
|
122
|
+
* @param input - Input WASM file path
|
|
123
|
+
* @param name - Metadata key name
|
|
124
|
+
* @returns Command result with metadata value in stdout
|
|
125
|
+
*/
|
|
126
|
+
export async function getMetadata(input: string, name: string): Promise<IcWasmResult> {
|
|
127
|
+
return runIcWasm([input, 'metadata', name]);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Set metadata on a WASM module.
|
|
132
|
+
*
|
|
133
|
+
* @param options - Metadata options
|
|
134
|
+
* @returns Command result
|
|
135
|
+
*/
|
|
136
|
+
export async function setMetadata(options: IcWasmMetadataOptions): Promise<IcWasmResult> {
|
|
137
|
+
if (!options.output) {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
stdout: '',
|
|
141
|
+
stderr: 'Output path is required for set metadata operations',
|
|
142
|
+
exitCode: 1,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const args = [options.input, 'metadata', options.name, '-o', options.output];
|
|
147
|
+
|
|
148
|
+
if (options.data !== undefined) {
|
|
149
|
+
args.push('-d', options.data);
|
|
150
|
+
} else if (options.file) {
|
|
151
|
+
args.push('-f', options.file);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (options.visibility) {
|
|
155
|
+
args.push('-v', options.visibility);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return runIcWasm(args);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get detailed information about a WASM canister module.
|
|
163
|
+
*
|
|
164
|
+
* @param input - Input WASM file path
|
|
165
|
+
* @returns Parsed info result
|
|
166
|
+
*/
|
|
167
|
+
export async function info(input: string): Promise<IcWasmInfo> {
|
|
168
|
+
const result = await runIcWasm([input, 'info']);
|
|
169
|
+
const parsed: IcWasmInfo = { raw: result.stdout };
|
|
170
|
+
|
|
171
|
+
// Best-effort parsing of info output into sections
|
|
172
|
+
if (result.success && result.stdout) {
|
|
173
|
+
const sections: Record<string, string> = {};
|
|
174
|
+
const lines = result.stdout.split('\n');
|
|
175
|
+
for (const line of lines) {
|
|
176
|
+
const colonIdx = line.indexOf(':');
|
|
177
|
+
if (colonIdx > 0) {
|
|
178
|
+
const key = line.substring(0, colonIdx).trim();
|
|
179
|
+
const value = line.substring(colonIdx + 1).trim();
|
|
180
|
+
if (key && value) {
|
|
181
|
+
sections[key] = value;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (Object.keys(sections).length > 0) {
|
|
186
|
+
parsed.sections = sections;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return parsed;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Validate canister endpoints against a Candid interface.
|
|
195
|
+
*
|
|
196
|
+
* Compares the exported functions in the WASM module against the
|
|
197
|
+
* expected interface defined in a .did file. Returns success if
|
|
198
|
+
* all endpoints match.
|
|
199
|
+
*
|
|
200
|
+
* @param options - Check endpoints options
|
|
201
|
+
* @returns Command result (success means validation passed)
|
|
202
|
+
*/
|
|
203
|
+
export async function checkEndpoints(options: IcWasmCheckEndpointsOptions): Promise<IcWasmResult> {
|
|
204
|
+
return runIcWasm([
|
|
205
|
+
options.input,
|
|
206
|
+
'check-endpoints',
|
|
207
|
+
'--interface', options.candidInterface,
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Instrument a WASM module for execution tracing (experimental).
|
|
213
|
+
*
|
|
214
|
+
* Modifies the WASM to emit execution traces to stable memory,
|
|
215
|
+
* useful for debugging and profiling canister behavior.
|
|
216
|
+
*
|
|
217
|
+
* @param options - Instrument options
|
|
218
|
+
* @returns Command result
|
|
219
|
+
*/
|
|
220
|
+
export async function instrument(options: IcWasmInstrumentOptions): Promise<IcWasmResult> {
|
|
221
|
+
return runIcWasm([options.input, 'instrument', '-o', options.output]);
|
|
222
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity Management
|
|
3
|
+
*
|
|
4
|
+
* Provides identity management via icp-cli.
|
|
5
|
+
* List identities, create new identities,
|
|
6
|
+
* import/export identities and manage default identity.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
identityList,
|
|
11
|
+
identityNew,
|
|
12
|
+
identityExport,
|
|
13
|
+
identityPrincipal,
|
|
14
|
+
identityImport,
|
|
15
|
+
identityDefault,
|
|
16
|
+
} from './icpcli.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* List all available identities.
|
|
20
|
+
*
|
|
21
|
+
* @returns Command result with identity list
|
|
22
|
+
*/
|
|
23
|
+
export async function listIdentities(): Promise<any> {
|
|
24
|
+
return identityList({});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create a new identity.
|
|
29
|
+
*
|
|
30
|
+
* @param name - Identity name
|
|
31
|
+
* @returns Command result
|
|
32
|
+
*/
|
|
33
|
+
export async function createIdentity(name: string): Promise<any> {
|
|
34
|
+
return identityNew({ name });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Export an identity to PEM file.
|
|
39
|
+
*
|
|
40
|
+
* @param name - Identity name
|
|
41
|
+
* @returns Command result with PEM content
|
|
42
|
+
*/
|
|
43
|
+
export async function exportIdentity(name: string): Promise<any> {
|
|
44
|
+
return identityExport({ name });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get the principal of a default or named identity.
|
|
49
|
+
*
|
|
50
|
+
* @param name - Identity name (if null, use default)
|
|
51
|
+
* @returns Command result with principal
|
|
52
|
+
*/
|
|
53
|
+
export async function getIdentityPrincipal(name?: string): Promise<string> {
|
|
54
|
+
const result = await identityPrincipal({ name });
|
|
55
|
+
return result.stdout || '';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Import an identity from a PEM file.
|
|
60
|
+
*
|
|
61
|
+
* @param name - Identity name to import
|
|
62
|
+
* @param pemFile - Path to PEM file
|
|
63
|
+
* @returns Command result
|
|
64
|
+
*/
|
|
65
|
+
export async function importIdentity(name: string, pemFile: string): Promise<any> {
|
|
66
|
+
return identityImport({ name, pemFile });
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Set a default identity.
|
|
71
|
+
*
|
|
72
|
+
* @param name - Identity name to set as default
|
|
73
|
+
* @returns Command result
|
|
74
|
+
*/
|
|
75
|
+
export async function setDefaultIdentity(name: string): Promise<any> {
|
|
76
|
+
return identityDefault({ name });
|
|
77
|
+
}
|
package/src/icp/index.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICP Tools Integration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides typed wrappers around ic-wasm and icp-cli tooling,
|
|
5
|
+
* auto-detection of available tools, an optimization pipeline,
|
|
6
|
+
* and environment management.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Types
|
|
10
|
+
export type {
|
|
11
|
+
ToolName,
|
|
12
|
+
ToolInfo,
|
|
13
|
+
ToolchainStatus,
|
|
14
|
+
IcWasmOptLevel,
|
|
15
|
+
IcWasmOptimizeOptions,
|
|
16
|
+
IcWasmShrinkOptions,
|
|
17
|
+
IcWasmResourceOptions,
|
|
18
|
+
IcWasmMetadataOptions,
|
|
19
|
+
IcWasmCheckEndpointsOptions,
|
|
20
|
+
IcWasmInstrumentOptions,
|
|
21
|
+
IcWasmResult,
|
|
22
|
+
IcWasmInfo,
|
|
23
|
+
MetadataVisibility,
|
|
24
|
+
IcWasmOptimizationResult,
|
|
25
|
+
IcWasmOptimizationPipelineOptions,
|
|
26
|
+
IcWasmOptimizationPipelineResult,
|
|
27
|
+
IcpEnvironment,
|
|
28
|
+
IcpDeployMode,
|
|
29
|
+
IcpCommonOptions,
|
|
30
|
+
IcpBuildOptions,
|
|
31
|
+
IcpDeployOptions,
|
|
32
|
+
IcpCanisterStatusOptions,
|
|
33
|
+
IcpCanisterCallOptions,
|
|
34
|
+
IcpCyclesBalanceOptions,
|
|
35
|
+
IcpCyclesMintOptions,
|
|
36
|
+
IcpCyclesTransferOptions,
|
|
37
|
+
IcpIdentityListOptions,
|
|
38
|
+
IcpIdentityNewOptions,
|
|
39
|
+
IcpIdentityExportOptions,
|
|
40
|
+
IcpIdentityImportOptions,
|
|
41
|
+
IcpNetworkStartOptions,
|
|
42
|
+
IcpNetworkStopOptions,
|
|
43
|
+
IcpSyncOptions,
|
|
44
|
+
IcpTokenBalanceOptions,
|
|
45
|
+
IcpTokenTransferOptions,
|
|
46
|
+
IcpEnvironmentListOptions,
|
|
47
|
+
IcpCliResult,
|
|
48
|
+
IcpNetworkConfig,
|
|
49
|
+
IcpCyclesConfig,
|
|
50
|
+
IcpEnvironmentConfig,
|
|
51
|
+
IcpOptimizationConfig,
|
|
52
|
+
IcpProjectConfig,
|
|
53
|
+
} from './types.js';
|
|
54
|
+
|
|
55
|
+
// Re-export monitoring types
|
|
56
|
+
export type {
|
|
57
|
+
CanisterHealthStatus,
|
|
58
|
+
AlertSeverity,
|
|
59
|
+
CanisterStatusInfo,
|
|
60
|
+
MonitoringAlert,
|
|
61
|
+
HealthThresholds,
|
|
62
|
+
MonitoringOptions,
|
|
63
|
+
ResourceUsageSnapshot,
|
|
64
|
+
} from '../monitoring/types.js';
|
|
65
|
+
|
|
66
|
+
// Tool detection
|
|
67
|
+
export {
|
|
68
|
+
detectTool,
|
|
69
|
+
detectToolchain,
|
|
70
|
+
requireTool,
|
|
71
|
+
} from './tool-detector.js';
|
|
72
|
+
|
|
73
|
+
// ic-wasm wrapper
|
|
74
|
+
export * as icwasm from './icwasm.js';
|
|
75
|
+
|
|
76
|
+
// icp-cli wrapper
|
|
77
|
+
export * as icpcli from './icpcli.js';
|
|
78
|
+
|
|
79
|
+
// Optimization pipeline
|
|
80
|
+
export { runOptimizationPipeline } from './optimization.js';
|
|
81
|
+
|
|
82
|
+
// Environment management
|
|
83
|
+
export {
|
|
84
|
+
findConfigFile,
|
|
85
|
+
loadConfig,
|
|
86
|
+
getEnvironment,
|
|
87
|
+
getOptimizationConfig,
|
|
88
|
+
listEnvironments,
|
|
89
|
+
writeConfig,
|
|
90
|
+
generateDefaultConfig,
|
|
91
|
+
} from './environment.js';
|
|
92
|
+
|
|
93
|
+
// Batched canister operations
|
|
94
|
+
export * from './batch.js';
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimization Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates ic-wasm optimize, shrink, resource limiting, metadata
|
|
5
|
+
* injection, and Candid validation into a single pipeline that runs
|
|
6
|
+
* after WASM generation in the packaging step.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as fs from 'node:fs';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { detectTool } from './tool-detector.js';
|
|
12
|
+
import * as icwasm from './icwasm.js';
|
|
13
|
+
import type {
|
|
14
|
+
IcWasmOptimizationPipelineOptions,
|
|
15
|
+
IcWasmOptimizationPipelineResult,
|
|
16
|
+
IcWasmOptLevel,
|
|
17
|
+
} from './types.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Run the full optimization pipeline on a WASM file.
|
|
21
|
+
*
|
|
22
|
+
* @param options - Pipeline options
|
|
23
|
+
* @returns Pipeline result with metrics
|
|
24
|
+
*/
|
|
25
|
+
export async function runOptimizationPipeline(
|
|
26
|
+
options: IcWasmOptimizationPipelineOptions,
|
|
27
|
+
): Promise<IcWasmOptimizationPipelineResult> {
|
|
28
|
+
const startTime = Date.now();
|
|
29
|
+
const steps: IcWasmOptimizationPipelineResult['steps'] = [];
|
|
30
|
+
const warnings: string[] = [];
|
|
31
|
+
let currentInput = options.input;
|
|
32
|
+
|
|
33
|
+
// Verify input exists
|
|
34
|
+
if (!fs.existsSync(options.input)) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
outputPath: options.output,
|
|
38
|
+
originalSize: 0,
|
|
39
|
+
finalSize: 0,
|
|
40
|
+
reductionPercent: 0,
|
|
41
|
+
totalDurationMs: Date.now() - startTime,
|
|
42
|
+
steps: [],
|
|
43
|
+
warnings: [`Input file not found: ${options.input}`],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const originalSize = fs.statSync(options.input).size;
|
|
48
|
+
|
|
49
|
+
// Check if ic-wasm is available
|
|
50
|
+
const icWasmTool = await detectTool('ic-wasm');
|
|
51
|
+
if (!icWasmTool.available) {
|
|
52
|
+
// No optimization possible - copy input to output
|
|
53
|
+
fs.copyFileSync(options.input, options.output);
|
|
54
|
+
warnings.push('ic-wasm not found; skipping optimization. Install with: cargo install ic-wasm');
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
outputPath: options.output,
|
|
58
|
+
originalSize,
|
|
59
|
+
finalSize: originalSize,
|
|
60
|
+
reductionPercent: 0,
|
|
61
|
+
totalDurationMs: Date.now() - startTime,
|
|
62
|
+
steps: [],
|
|
63
|
+
warnings,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Create temp directory for intermediate files
|
|
68
|
+
const tempDir = path.join(path.dirname(options.output), '.icp-optimize-tmp');
|
|
69
|
+
if (!fs.existsSync(tempDir)) {
|
|
70
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
let tempCounter = 0;
|
|
73
|
+
function nextTemp(): string {
|
|
74
|
+
return path.join(tempDir, `step_${++tempCounter}.wasm`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Step 1: Shrink
|
|
78
|
+
if (options.shrink !== false) {
|
|
79
|
+
const stepStart = Date.now();
|
|
80
|
+
const tempOut = nextTemp();
|
|
81
|
+
const result = await icwasm.shrink({ input: currentInput, output: tempOut });
|
|
82
|
+
const step = {
|
|
83
|
+
step: 'shrink',
|
|
84
|
+
success: result.success,
|
|
85
|
+
durationMs: Date.now() - stepStart,
|
|
86
|
+
sizeAfter: undefined as number | undefined,
|
|
87
|
+
error: undefined as string | undefined,
|
|
88
|
+
};
|
|
89
|
+
if (result.success && fs.existsSync(tempOut)) {
|
|
90
|
+
step.sizeAfter = fs.statSync(tempOut).size;
|
|
91
|
+
currentInput = tempOut;
|
|
92
|
+
} else {
|
|
93
|
+
step.error = result.stderr || 'Shrink failed';
|
|
94
|
+
warnings.push(`Shrink step failed: ${step.error}`);
|
|
95
|
+
}
|
|
96
|
+
steps.push(step);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Step 2: Optimize
|
|
100
|
+
if (options.optimize !== false) {
|
|
101
|
+
const stepStart = Date.now();
|
|
102
|
+
const tempOut = nextTemp();
|
|
103
|
+
const level: IcWasmOptLevel = options.optimizeLevel ?? 'O3';
|
|
104
|
+
const result = await icwasm.optimize({
|
|
105
|
+
input: currentInput,
|
|
106
|
+
output: tempOut,
|
|
107
|
+
level,
|
|
108
|
+
});
|
|
109
|
+
const step = {
|
|
110
|
+
step: `optimize (${level})`,
|
|
111
|
+
success: result.success,
|
|
112
|
+
durationMs: Date.now() - stepStart,
|
|
113
|
+
sizeAfter: undefined as number | undefined,
|
|
114
|
+
error: undefined as string | undefined,
|
|
115
|
+
};
|
|
116
|
+
if (result.success && fs.existsSync(tempOut)) {
|
|
117
|
+
step.sizeAfter = fs.statSync(tempOut).size;
|
|
118
|
+
currentInput = tempOut;
|
|
119
|
+
} else {
|
|
120
|
+
step.error = result.stderr || 'Optimize failed';
|
|
121
|
+
warnings.push(`Optimize step failed: ${step.error}`);
|
|
122
|
+
}
|
|
123
|
+
steps.push(step);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Step 3: Resource limits
|
|
127
|
+
if (options.resourceLimits && Object.keys(options.resourceLimits).length > 0) {
|
|
128
|
+
for (const [name, value] of Object.entries(options.resourceLimits)) {
|
|
129
|
+
const stepStart = Date.now();
|
|
130
|
+
const tempOut: string = nextTemp();
|
|
131
|
+
const result = await icwasm.setResource({
|
|
132
|
+
input: currentInput as string,
|
|
133
|
+
output: tempOut,
|
|
134
|
+
name,
|
|
135
|
+
value,
|
|
136
|
+
});
|
|
137
|
+
const step = {
|
|
138
|
+
step: `resource (${name}=${value})`,
|
|
139
|
+
success: result.success,
|
|
140
|
+
durationMs: Date.now() - stepStart,
|
|
141
|
+
sizeAfter: undefined as number | undefined,
|
|
142
|
+
error: undefined as string | undefined,
|
|
143
|
+
};
|
|
144
|
+
if (result.success && fs.existsSync(tempOut)) {
|
|
145
|
+
step.sizeAfter = fs.statSync(tempOut).size;
|
|
146
|
+
currentInput = tempOut;
|
|
147
|
+
} else {
|
|
148
|
+
step.error = result.stderr || 'Resource limit failed';
|
|
149
|
+
warnings.push(`Resource limit '${name}' failed: ${step.error}`);
|
|
150
|
+
}
|
|
151
|
+
steps.push(step);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Step 4: Metadata injection
|
|
156
|
+
if (options.metadata && options.metadata.length > 0) {
|
|
157
|
+
for (const meta of options.metadata) {
|
|
158
|
+
const stepStart = Date.now();
|
|
159
|
+
const tempOut = nextTemp();
|
|
160
|
+
const result = await icwasm.setMetadata({
|
|
161
|
+
input: currentInput,
|
|
162
|
+
output: tempOut,
|
|
163
|
+
name: meta.name,
|
|
164
|
+
data: meta.data,
|
|
165
|
+
visibility: meta.visibility,
|
|
166
|
+
});
|
|
167
|
+
const step = {
|
|
168
|
+
step: `metadata (${meta.name})`,
|
|
169
|
+
success: result.success,
|
|
170
|
+
durationMs: Date.now() - stepStart,
|
|
171
|
+
sizeAfter: undefined as number | undefined,
|
|
172
|
+
error: undefined as string | undefined,
|
|
173
|
+
};
|
|
174
|
+
if (result.success && fs.existsSync(tempOut)) {
|
|
175
|
+
step.sizeAfter = fs.statSync(tempOut).size;
|
|
176
|
+
currentInput = tempOut;
|
|
177
|
+
} else {
|
|
178
|
+
step.error = result.stderr || 'Metadata set failed';
|
|
179
|
+
warnings.push(`Metadata '${meta.name}' failed: ${step.error}`);
|
|
180
|
+
}
|
|
181
|
+
steps.push(step);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Step 5: Candid validation (does not produce output, just validates)
|
|
186
|
+
let validationPassed: boolean | undefined;
|
|
187
|
+
if (options.candidInterface) {
|
|
188
|
+
const stepStart = Date.now();
|
|
189
|
+
const result = await icwasm.checkEndpoints({
|
|
190
|
+
input: currentInput,
|
|
191
|
+
candidInterface: options.candidInterface,
|
|
192
|
+
});
|
|
193
|
+
validationPassed = result.success;
|
|
194
|
+
const step = {
|
|
195
|
+
step: 'check-endpoints',
|
|
196
|
+
success: result.success,
|
|
197
|
+
durationMs: Date.now() - stepStart,
|
|
198
|
+
sizeAfter: undefined as number | undefined,
|
|
199
|
+
error: undefined as string | undefined,
|
|
200
|
+
};
|
|
201
|
+
if (!result.success) {
|
|
202
|
+
step.error = result.stderr || 'Endpoint validation failed';
|
|
203
|
+
warnings.push(`Candid validation failed: ${step.error}`);
|
|
204
|
+
}
|
|
205
|
+
steps.push(step);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Move final result to output path
|
|
209
|
+
if (currentInput !== options.input) {
|
|
210
|
+
fs.copyFileSync(currentInput, options.output);
|
|
211
|
+
} else {
|
|
212
|
+
// No steps modified the file; copy input to output
|
|
213
|
+
fs.copyFileSync(options.input, options.output);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const finalSize = fs.statSync(options.output).size;
|
|
217
|
+
|
|
218
|
+
// Cleanup temp directory
|
|
219
|
+
try {
|
|
220
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
221
|
+
} catch {
|
|
222
|
+
// Ignore cleanup errors
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const reductionPercent = originalSize > 0
|
|
226
|
+
? Math.round(((originalSize - finalSize) / originalSize) * 100)
|
|
227
|
+
: 0;
|
|
228
|
+
|
|
229
|
+
const allStepsSucceeded = steps.every((s: any) => s.success);
|
|
230
|
+
|
|
231
|
+
return {
|
|
232
|
+
success: allStepsSucceeded,
|
|
233
|
+
outputPath: options.output,
|
|
234
|
+
originalSize,
|
|
235
|
+
finalSize,
|
|
236
|
+
reductionPercent,
|
|
237
|
+
totalDurationMs: Date.now() - startTime,
|
|
238
|
+
steps,
|
|
239
|
+
validationPassed,
|
|
240
|
+
warnings,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Operations
|
|
3
|
+
*
|
|
4
|
+
* Provides token operations via icp-cli.
|
|
5
|
+
* Supports ICP and ICRC-1/ICRC-2 tokens.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { tokenBalance, tokenTransfer } from './icpcli.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Check token balance for a canister.
|
|
12
|
+
*
|
|
13
|
+
* @param canister - Token canister ID
|
|
14
|
+
* @param options - Common ICP options
|
|
15
|
+
* @returns Command result with balance
|
|
16
|
+
*/
|
|
17
|
+
export async function checkBalance(
|
|
18
|
+
canister: string,
|
|
19
|
+
): Promise<any> {
|
|
20
|
+
return tokenBalance({ canister });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Transfer tokens to a recipient.
|
|
25
|
+
*
|
|
26
|
+
* @param amount - Amount to transfer
|
|
27
|
+
* @param to - Recipient principal or account
|
|
28
|
+
* @param options - Common ICP options
|
|
29
|
+
* @returns Command result
|
|
30
|
+
*/
|
|
31
|
+
export async function transferTokens(
|
|
32
|
+
amount: string,
|
|
33
|
+
to: string,
|
|
34
|
+
): Promise<any> {
|
|
35
|
+
return tokenTransfer({ amount, to });
|
|
36
|
+
}
|