arc402-cli 0.7.0 → 0.7.1

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerBackupCommand(program: Command): void;
3
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0F5D"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerBackupCommand = registerBackupCommand;
7
+ const child_process_1 = require("child_process");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const colors_1 = require("../ui/colors");
12
+ const ARC402_DIR = path_1.default.join(os_1.default.homedir(), ".arc402");
13
+ // Files/patterns to exclude from backup
14
+ const EXCLUDE_PATTERNS = [
15
+ "daemon.db",
16
+ "daemon.log",
17
+ "daemon.pid",
18
+ "daemon.sock",
19
+ "repl_history",
20
+ ];
21
+ function todayStr() {
22
+ const d = new Date();
23
+ const y = d.getFullYear();
24
+ const m = (d.getMonth() + 1).toString().padStart(2, "0");
25
+ const day = d.getDate().toString().padStart(2, "0");
26
+ return `${y}-${m}-${day}`;
27
+ }
28
+ function registerBackupCommand(program) {
29
+ // ── backup ─────────────────────────────────────────────────────────────────
30
+ program
31
+ .command("backup")
32
+ .description("Backup ~/.arc402/ config, keys, and wallet storage to a tar.gz archive")
33
+ .option("--output <path>", "Output file path (default: arc402-backup-YYYY-MM-DD.tar.gz)")
34
+ .action((opts) => {
35
+ if (!fs_1.default.existsSync(ARC402_DIR)) {
36
+ console.error(` ${colors_1.c.failure} No ~/.arc402/ directory found. Nothing to back up.`);
37
+ process.exit(1);
38
+ }
39
+ const outFile = opts.output ?? `arc402-backup-${todayStr()}.tar.gz`;
40
+ const absOut = path_1.default.isAbsolute(outFile) ? outFile : path_1.default.join(process.cwd(), outFile);
41
+ // Build --exclude flags
42
+ const excludeFlags = EXCLUDE_PATTERNS.map((p) => `--exclude='.arc402/${p}'`).join(" ");
43
+ try {
44
+ (0, child_process_1.execSync)(`tar -czf "${absOut}" ${excludeFlags} -C "${os_1.default.homedir()}" .arc402`, { stdio: "pipe" });
45
+ }
46
+ catch (err) {
47
+ const msg = err instanceof Error ? err.message : String(err);
48
+ console.error(` ${colors_1.c.failure} Backup failed: ${msg}`);
49
+ process.exit(1);
50
+ }
51
+ // Verify the file was created
52
+ if (!fs_1.default.existsSync(absOut)) {
53
+ console.error(` ${colors_1.c.failure} Archive not found after tar completed.`);
54
+ process.exit(1);
55
+ }
56
+ const sizeBytes = fs_1.default.statSync(absOut).size;
57
+ const sizeStr = sizeBytes < 1024
58
+ ? `${sizeBytes} B`
59
+ : sizeBytes < 1024 * 1024
60
+ ? `${(sizeBytes / 1024).toFixed(1)} KB`
61
+ : `${(sizeBytes / (1024 * 1024)).toFixed(2)} MB`;
62
+ console.log(` ${colors_1.c.success} Backup saved to ${colors_1.c.white(path_1.default.basename(absOut))} ${colors_1.c.dim(`(${sizeStr})`)}`);
63
+ });
64
+ // ── restore ────────────────────────────────────────────────────────────────
65
+ program
66
+ .command("restore")
67
+ .description("Restore ~/.arc402/ from a backup archive")
68
+ .argument("<archive>", "Path to arc402-backup-*.tar.gz")
69
+ .action((archive) => {
70
+ const absArchive = path_1.default.isAbsolute(archive) ? archive : path_1.default.join(process.cwd(), archive);
71
+ if (!fs_1.default.existsSync(absArchive)) {
72
+ console.error(` ${colors_1.c.failure} Archive not found: ${absArchive}`);
73
+ process.exit(1);
74
+ }
75
+ // Warn if ~/.arc402/ already exists
76
+ if (fs_1.default.existsSync(ARC402_DIR)) {
77
+ const existing = fs_1.default.readdirSync(ARC402_DIR);
78
+ if (existing.length > 0) {
79
+ console.warn(` ${colors_1.c.warning} Existing ~/.arc402/ has ${existing.length} file(s) — merging (existing files take precedence for conflicts).`);
80
+ }
81
+ }
82
+ try {
83
+ // Extract to home dir — tar archive has .arc402/ as the root entry
84
+ (0, child_process_1.execSync)(`tar -xzf "${absArchive}" -C "${os_1.default.homedir()}"`, { stdio: "pipe" });
85
+ }
86
+ catch (err) {
87
+ const msg = err instanceof Error ? err.message : String(err);
88
+ console.error(` ${colors_1.c.failure} Restore failed: ${msg}`);
89
+ process.exit(1);
90
+ }
91
+ // Verify config.json is present
92
+ const configPath = path_1.default.join(ARC402_DIR, "config.json");
93
+ if (!fs_1.default.existsSync(configPath)) {
94
+ console.error(` ${colors_1.c.failure} config.json not found after restore — archive may be incomplete.`);
95
+ process.exit(1);
96
+ }
97
+ // Fix permissions on restored directory
98
+ try {
99
+ fs_1.default.chmodSync(ARC402_DIR, 0o700);
100
+ fs_1.default.chmodSync(configPath, 0o600);
101
+ }
102
+ catch { /* best-effort */ }
103
+ console.log(` ${colors_1.c.success} Config restored. Run ${colors_1.c.white("arc402 doctor")} to verify.`);
104
+ });
105
+ }
106
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkO9D"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsFpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuQ9D"}
@@ -7,6 +7,7 @@ const config_1 = require("../config");
7
7
  const client_1 = require("../client");
8
8
  const format_1 = require("../utils/format");
9
9
  const colors_1 = require("../ui/colors");
10
+ const tree_1 = require("../ui/tree");
10
11
  // Minimal ABI for the new getAgentsWithCapability function (Spec 18)
11
12
  const CAPABILITY_REGISTRY_EXTRA_ABI = [
12
13
  "function getAgentsWithCapability(string calldata capability) external view returns (address[])",
@@ -39,6 +40,21 @@ function computeCompositeScores(agents) {
39
40
  rank: 0, // filled after sort
40
41
  }));
41
42
  }
43
+ // ─── Endpoint health check ────────────────────────────────────────────────────
44
+ async function pingEndpoint(endpoint) {
45
+ if (!endpoint || !/^https?:\/\//.test(endpoint))
46
+ return "offline";
47
+ try {
48
+ const ctrl = new AbortController();
49
+ const tid = setTimeout(() => ctrl.abort(), 3000);
50
+ const resp = await fetch(`${endpoint.replace(/\/$/, "")}/health`, { signal: ctrl.signal });
51
+ clearTimeout(tid);
52
+ return resp.ok ? "online" : "offline";
53
+ }
54
+ catch {
55
+ return "offline";
56
+ }
57
+ }
42
58
  // ─── Command ──────────────────────────────────────────────────────────────────
43
59
  function registerDiscoverCommand(program) {
44
60
  program
@@ -54,6 +70,7 @@ function registerDiscoverCommand(program) {
54
70
  .option("--top <n>", "Show top N agents by trust score")
55
71
  .option("--sort <field>", "Sort by: trust | price | jobs | stake | composite", "composite")
56
72
  .option("--limit <n>", "Max results", "20")
73
+ .option("--online", "Only show agents whose /health endpoint responds")
57
74
  .option("--json", "Machine-parseable output")
58
75
  .action(async (opts) => {
59
76
  const config = (0, config_1.loadConfig)();
@@ -202,25 +219,53 @@ function registerDiscoverCommand(program) {
202
219
  }
203
220
  // Assign 1-based ranks after sort
204
221
  scored = scored.slice(0, limit).map((a, i) => ({ ...a, rank: i + 1 }));
205
- // ── Step 6: Output ─────────────────────────────────────────────────────
222
+ let withStatus;
223
+ if (opts.online || /* always ping for tree display */ true) {
224
+ const statuses = await Promise.all(scored.map(async (agent) => {
225
+ if (!agent.endpoint)
226
+ return "unknown";
227
+ return pingEndpoint(agent.endpoint);
228
+ }));
229
+ withStatus = scored.map((agent, i) => ({ ...agent, endpointStatus: statuses[i] }));
230
+ }
231
+ else {
232
+ withStatus = scored.map((agent) => ({ ...agent, endpointStatus: "unknown" }));
233
+ }
234
+ // Apply --online filter
235
+ if (opts.online) {
236
+ withStatus = withStatus.filter((a) => a.endpointStatus === "online");
237
+ if (withStatus.length === 0) {
238
+ console.log(`\n ${colors_1.c.warning} No agents with responding /health endpoints found.`);
239
+ return;
240
+ }
241
+ }
242
+ // ── Step 7: Output ─────────────────────────────────────────────────────
206
243
  if (opts.json) {
207
- return console.log(JSON.stringify(scored, (_k, value) => typeof value === "bigint" ? value.toString() : value, 2));
244
+ return console.log(JSON.stringify(withStatus, (_k, value) => typeof value === "bigint" ? value.toString() : value, 2));
208
245
  }
209
- console.log('\n ' + colors_1.c.mark + colors_1.c.white(' Discover Results') + colors_1.c.dim(` ${scored.length} agent${scored.length !== 1 ? 's' : ''} found`));
210
- (0, format_1.printTable)(["RANK", "ADDRESS", "NAME", "SERVICE", "TRUST", "SCORE", "CAPABILITIES"], scored.map((agent) => {
246
+ const onlineCount = withStatus.filter((a) => a.endpointStatus === "online").length;
247
+ console.log('\n ' + colors_1.c.mark + colors_1.c.white(' Discover Results') + colors_1.c.dim(` ${withStatus.length} agent${withStatus.length !== 1 ? 's' : ''} found, ${onlineCount} online`));
248
+ // Tree output per agent
249
+ for (const agent of withStatus) {
211
250
  const caps = (agent.canonicalCapabilities.length
212
251
  ? agent.canonicalCapabilities
213
- : agent.capabilities).slice(0, 2).join(", ");
214
- return [
215
- String(agent.rank),
216
- (0, format_1.truncateAddress)(agent.wallet),
217
- agent.name,
218
- agent.serviceType,
219
- `${agent.trustScore} ${(0, format_1.getTrustTier)(agent.trustScore)}`,
220
- agent.compositeScore.toFixed(3),
221
- caps,
222
- ];
223
- }));
252
+ : agent.capabilities).slice(0, 3).join(", ") || colors_1.c.dim("none");
253
+ const statusIcon = agent.endpointStatus === "online"
254
+ ? colors_1.c.green("● online")
255
+ : agent.endpointStatus === "offline"
256
+ ? colors_1.c.red("○ offline")
257
+ : colors_1.c.dim("? unknown");
258
+ const tierStr = (0, format_1.getTrustTier)(agent.trustScore);
259
+ console.log(`\n ${colors_1.c.dim(`#${agent.rank}`)} ${colors_1.c.white(agent.name)} ${colors_1.c.dim((0, format_1.truncateAddress)(agent.wallet))}`);
260
+ (0, tree_1.renderTree)([
261
+ { label: "service", value: agent.serviceType },
262
+ { label: "trust", value: `${agent.trustScore} ${tierStr}` },
263
+ { label: "score", value: agent.compositeScore.toFixed(3) },
264
+ { label: "caps", value: caps },
265
+ { label: "endpoint", value: statusIcon, last: true },
266
+ ]);
267
+ }
268
+ console.log();
224
269
  });
225
270
  }
226
271
  //# sourceMappingURL=discover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":";;AAsEA,0DAkOC;AAvSD,mCAAgC;AAChC,qCAAkI;AAClI,sCAAuC;AACvC,sCAAsC;AACtC,4CAA4E;AAC5E,yCAAiC;AAEjC,qEAAqE;AACrE,MAAM,6BAA6B,GAAG;IACpC,gGAAgG;CACjG,CAAC;AAuBF,SAAS,SAAS,CAAC,MAAgB;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsD;IACpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhE,mEAAmE;IACnE,MAAM,SAAS,GAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAM,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,GAAG,KAAK;QACR,cAAc,EACZ,SAAS,CAAC,CAAC,CAAC,GAAM,GAAG;YACrB,SAAS,CAAC,CAAC,CAAC,GAAM,GAAG;YACrB,QAAQ,CAAC,CAAC,CAAC,GAAO,GAAG;YACrB,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;QACvB,IAAI,EAAE,CAAC,EAAE,oBAAoB;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,iFAAiF;AAEjF,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,mGAAmG,CACpG;SACA,MAAM,CAAC,oBAAoB,EAAS,+DAA+D,CAAC;SACpG,MAAM,CAAC,2BAA2B,EAAE,8CAA8C,CAAC;SACnF,MAAM,CAAC,uBAAuB,EAAM,iCAAiC,CAAC;SACtE,MAAM,CAAC,eAAe,EAAc,4DAA4D,CAAC;SACjG,MAAM,CAAC,qBAAqB,EAAQ,qBAAqB,EAAE,GAAG,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAU,4DAA4D,EAAE,GAAG,CAAC;SACtG,MAAM,CAAC,mBAAmB,EAAU,sBAAsB,EAAE,GAAG,CAAC;SAChE,MAAM,CAAC,WAAW,EAAkB,kCAAkC,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAa,mDAAmD,EAAE,WAAW,CAAC;SACrG,MAAM,CAAC,aAAa,EAAgB,aAAa,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAqB,0BAA0B,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5F,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAO,IAAI,yBAAmB,CAAC,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,MAAM,CAAC,yBAAyB;YACpD,CAAC,CAAC,IAAI,8BAAwB,CAAC,MAAM,CAAC,yBAAyB,EAAE,QAAQ,CAAC;YAC1E,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,WAAW,GAAI,MAAM,CAAC,6BAA6B;YACvD,CAAC,CAAC,IAAI,kCAA4B,CAAC,MAAM,CAAC,6BAA6B,EAAE,QAAQ,CAAC;YAClF,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,UAAU,GAAK,MAAM,CAAC,uBAAuB;YACjD,CAAC,CAAC,IAAI,4BAAsB,CAAC,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC;YACtE,CAAC,CAAC,IAAI,CAAC;QAET,mDAAmD;QACnD,MAAM,aAAa,GAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACtD,MAAM,KAAK,GAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAS,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAG,gBAAgB;QAChE,MAAM,WAAW,GAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,wCAAwC;QACxC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAEjE,2EAA2E;QAE3E,IAAI,kBAAkB,GAAoB,IAAI,CAAC;QAE/C,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;YACxD,gFAAgF;YAChF,MAAM,WAAW,GAAG,IAAI,eAAM,CAAC,QAAQ,CACrC,MAAM,CAAC,yBAAyB,EAChC,6BAA6B,EAC7B,QAAQ,CACT,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAa,MAAM,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnF,kBAAkB,GAAG,KAAK,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;YACxE,CAAC;QACH,CAAC;QAED,yEAAyE;QAEzE,IAAI,UAA2D,CAAC;QAEhE,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;YACF,UAAU,GAAG,OAAO;iBACjB,MAAM,CAAC,CAAC,CAAC,EAA0D,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;iBAC/F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,wEAAwE;QAExE,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAE5D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,gBAA0B,CAAC,CAAC,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAC7E,CAAC;QACJ,CAAC;QAED,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC;QAE1E,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAI,CAAmC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/D,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QAEvE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,MAAM,CAAC,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC/E,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC5C,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjF,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;gBACnF,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;aACjF,CAAC,CAAC;YAEH,0CAA0C;YAC1C,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;oBACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrE,YAAY,CAAC,GAAG,CAAC,CAAC;oBAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAyC,CAAC;wBACtE,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI;4BAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACvE,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;YAC1C,CAAC;YAED,yCAAyC;YACzC,IAAI,WAAW,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAA0C,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjG,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAwB;gBAC5C,qBAAqB,EAAE,qBAAiC;gBACxD,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;gBAC1C,KAAK,EAAG,KAAuC,CAAC,KAAK,IAAI,EAAE;gBAC3D,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;gBAChD,QAAQ;gBACR,cAAc,EAAE,CAAC;gBACjB,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE;oBACX,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC;oBAC5C,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC;iBACjD;gBACD,WAAW;gBACX,UAAU,EAAE,GAAG;aACgC,CAAC;QACpD,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqD,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAE1G,0EAA0E;QAE1E,IAAI,MAAM,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAEjD,OAAO;QACP,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;wBAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;wBAAE,OAAO,CAAC,CAAC;oBAClC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;wBAAE,OAAO,CAAC,CAAC,CAAC;oBACnC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBACjC,CAAC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM;YACR,SAAS,cAAc;gBACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;QAC/D,CAAC;QAED,kCAAkC;QAClC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvE,0EAA0E;QAE1E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAC/B,MAAM,EACN,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,EACnE,CAAC,CACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,UAAC,CAAC,IAAI,GAAG,UAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,UAAC,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvI,IAAA,mBAAU,EACR,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EACxE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM;gBAC9C,CAAC,CAAC,KAAK,CAAC,qBAAqB;gBAC7B,CAAC,CAAC,KAAK,CAAC,YAAY,CACrB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO;gBACL,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClB,IAAA,wBAAe,EAAC,KAAK,CAAC,MAAM,CAAC;gBAC7B,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,WAAW;gBACjB,GAAG,KAAK,CAAC,UAAU,IAAI,IAAA,qBAAY,EAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBACvD,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/B,IAAI;aACL,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyiBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+yF7D"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8kBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAg2F7D"}
@@ -26,6 +26,26 @@ const tree_1 = require("../ui/tree");
26
26
  const spinner_1 = require("../ui/spinner");
27
27
  const colors_1 = require("../ui/colors");
28
28
  const POLICY_ENGINE_DEFAULT = "0x44102e70c2A366632d98Fe40d892a2501fC7fFF2";
29
+ const GUARDIAN_KEY_PATH = path_1.default.join(os_1.default.homedir(), ".arc402", "guardian.key");
30
+ /** Save guardian private key to a restricted standalone file (never to config.json). */
31
+ function saveGuardianKey(privateKey) {
32
+ fs_1.default.mkdirSync(path_1.default.dirname(GUARDIAN_KEY_PATH), { recursive: true, mode: 0o700 });
33
+ fs_1.default.writeFileSync(GUARDIAN_KEY_PATH, privateKey + "\n", { mode: 0o400 });
34
+ }
35
+ /** Load guardian private key from file, falling back to config for backwards compat. */
36
+ function loadGuardianKey(config) {
37
+ try {
38
+ return fs_1.default.readFileSync(GUARDIAN_KEY_PATH, "utf-8").trim();
39
+ }
40
+ catch {
41
+ // Migration: if key still in config, migrate it to the file now
42
+ if (config.guardianPrivateKey) {
43
+ saveGuardianKey(config.guardianPrivateKey);
44
+ return config.guardianPrivateKey;
45
+ }
46
+ return null;
47
+ }
48
+ }
29
49
  function parseAmount(raw) {
30
50
  const lower = raw.toLowerCase();
31
51
  if (lower.endsWith("eth")) {
@@ -161,6 +181,9 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
161
181
  await sendTx({ to: walletAddress, data: mkIface.encodeFunctionData("authorizeMachineKey", [machineKeyAddress]), value: "0x0" }, "authorizeMachineKey");
162
182
  console.log(" " + colors_1.c.success + " Machine key authorized");
163
183
  }
184
+ // Save progress after machine key step
185
+ config.onboardingProgress = { walletAddress, step: 2, completedSteps: ["machineKey"] };
186
+ (0, config_1.saveConfig)(config);
164
187
  // ── Step 3: Passkey ───────────────────────────────────────────────────────
165
188
  console.log("\n" + colors_1.c.dim("── Step 3: Passkey (Face ID / WebAuthn) ──────────────────────"));
166
189
  let passkeyActive = false;
@@ -192,6 +215,9 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
192
215
  console.log(" " + colors_1.c.success + " Passkey set (via browser)");
193
216
  }
194
217
  }
218
+ // Save progress after passkey step
219
+ config.onboardingProgress = { walletAddress, step: 3, completedSteps: ["machineKey", "passkey"] };
220
+ (0, config_1.saveConfig)(config);
195
221
  // ── Step 4: Policy ────────────────────────────────────────────────────────
196
222
  console.log("\n" + colors_1.c.dim("── Step 4: Policy ─────────────────────────────────────────────"));
197
223
  // 4a) setVelocityLimit
@@ -300,6 +326,9 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
300
326
  await sendTx({ to: policyAddress, data: contractInteractionIface.encodeFunctionData("enableContractInteraction", [walletAddress, handshakeAddress]), value: "0x0" }, "enableContractInteraction: Handshake");
301
327
  (0, config_1.saveConfig)(config);
302
328
  console.log(" " + colors_1.c.success + " Policy configured");
329
+ // Save progress after policy step
330
+ config.onboardingProgress = { walletAddress, step: 4, completedSteps: ["machineKey", "passkey", "policy"] };
331
+ (0, config_1.saveConfig)(config);
303
332
  // ── Step 5: Agent Registration ─────────────────────────────────────────────
304
333
  console.log("\n" + colors_1.c.dim("── Step 5: Agent Registration ─────────────────────────────────"));
305
334
  let agentAlreadyRegistered = false;
@@ -377,6 +406,9 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
377
406
  else {
378
407
  console.log(" " + colors_1.c.warning + " AgentRegistry address not configured — skipping");
379
408
  }
409
+ // Save progress after agent step, then clear on ceremony complete
410
+ config.onboardingProgress = { walletAddress, step: 5, completedSteps: ["machineKey", "passkey", "policy", "agent"] };
411
+ (0, config_1.saveConfig)(config);
380
412
  // ── Step 7: Workroom Init ─────────────────────────────────────────────────
381
413
  console.log("\n" + colors_1.c.dim("── Step 7: Workroom ────────────────────────────────────────────"));
382
414
  let workroomInitialized = false;
@@ -478,6 +510,9 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
478
510
  const endpointLabel = agentEndpoint
479
511
  ? colors_1.c.white(agentEndpoint) + colors_1.c.dim(` → localhost:${relayPort}`)
480
512
  : colors_1.c.dim("—");
513
+ // Clear onboarding progress — ceremony complete
514
+ delete config.onboardingProgress;
515
+ (0, config_1.saveConfig)(config);
481
516
  console.log("\n " + colors_1.c.success + colors_1.c.white(" Onboarding complete"));
482
517
  (0, tree_1.renderTree)([
483
518
  { label: "Wallet", value: colors_1.c.white(walletAddress) },
@@ -986,12 +1021,44 @@ function registerWalletCommands(program) {
986
1021
  const telegramOpts = config.telegramBotToken && config.telegramChatId
987
1022
  ? { botToken: config.telegramBotToken, chatId: config.telegramChatId, threadId: config.telegramThreadId }
988
1023
  : undefined;
1024
+ // ── Resume check ──────────────────────────────────────────────────────
1025
+ const resumeProgress = config.onboardingProgress;
1026
+ const isResuming = !!(resumeProgress?.walletAddress &&
1027
+ resumeProgress.walletAddress === config.walletContractAddress &&
1028
+ config.ownerAddress);
1029
+ if (isResuming) {
1030
+ const stepNames = {
1031
+ 2: "machine key", 3: "passkey", 4: "policy setup", 5: "agent registration",
1032
+ };
1033
+ const nextStep = (resumeProgress.step ?? 1) + 1;
1034
+ console.log(" " + colors_1.c.dim(`◈ Resuming onboarding from step ${nextStep} (${stepNames[nextStep] ?? "ceremony"})...`));
1035
+ }
1036
+ // ── Gas estimation ─────────────────────────────────────────────────────
1037
+ if (!isResuming) {
1038
+ let gasMsg = "~0.003 ETH (6 transactions on Base)";
1039
+ try {
1040
+ const feeData = await provider.getFeeData();
1041
+ const gasPrice = feeData.maxFeePerGas ?? feeData.gasPrice ?? BigInt(1500000000);
1042
+ const deployGas = await provider.estimateGas({
1043
+ to: factoryAddress,
1044
+ data: factoryInterface.encodeFunctionData("createWallet", ["0x0000000071727De22E5E9d8BAf0edAc6f37da032"]),
1045
+ }).catch(() => BigInt(280000));
1046
+ const ceremonyGas = BigInt(700000); // ~5 ceremony txs × ~140k each
1047
+ const totalGasEth = parseFloat(ethers_1.ethers.formatEther((deployGas + ceremonyGas) * gasPrice));
1048
+ gasMsg = `~${totalGasEth.toFixed(4)} ETH (6 transactions on Base)`;
1049
+ }
1050
+ catch { /* use default */ }
1051
+ console.log(" " + colors_1.c.dim(`◈ Estimated gas: ${gasMsg}`));
1052
+ }
989
1053
  // ── Step 1: Connect ────────────────────────────────────────────────────
990
- const { client, session, account } = await (0, walletconnect_1.connectPhoneWallet)(config.walletConnectProjectId, chainId, config, { telegramOpts, prompt: "Approve ARC402Wallet deployment — you will be set as owner", hardware: !!opts.hardware });
1054
+ const connectPrompt = isResuming
1055
+ ? "Connect wallet to resume onboarding"
1056
+ : "Approve ARC402Wallet deployment — you will be set as owner";
1057
+ const { client, session, account } = await (0, walletconnect_1.connectPhoneWallet)(config.walletConnectProjectId, chainId, config, { telegramOpts, prompt: connectPrompt, hardware: !!opts.hardware });
991
1058
  const networkName = chainId === 8453 ? "Base" : "Base Sepolia";
992
1059
  const shortAddr = `${account.slice(0, 6)}...${account.slice(-5)}`;
993
1060
  console.log("\n" + colors_1.c.success + colors_1.c.white(` Connected: ${shortAddr} on ${networkName}`));
994
- if (telegramOpts) {
1061
+ if (telegramOpts && !isResuming) {
995
1062
  // Send "connected" message with a deploy confirmation button.
996
1063
  // TODO: wire up full callback_data round-trip when a persistent bot process is available.
997
1064
  await (0, telegram_notify_1.sendTelegramMessage)({
@@ -1002,50 +1069,59 @@ function registerWalletCommands(program) {
1002
1069
  buttons: [[{ text: "🚀 Deploy ARC-402 Wallet", callback_data: "arc402_deploy_confirm" }]],
1003
1070
  });
1004
1071
  }
1005
- // ── Step 2: Confirm & Deploy ───────────────────────────────────────────
1006
- // WalletConnect approval already confirmed intent — sending automatically
1007
- console.log("Deploying...");
1008
- const txHash = await (0, walletconnect_1.sendTransactionWithSession)(client, session, account, chainId, {
1009
- to: factoryAddress,
1010
- data: factoryInterface.encodeFunctionData("createWallet", ["0x0000000071727De22E5E9d8BAf0edAc6f37da032"]),
1011
- value: "0x0",
1012
- });
1013
- console.log(`\nTransaction submitted: ${txHash}`);
1014
- console.log("Waiting for confirmation...");
1015
- const receipt = await provider.waitForTransaction(txHash);
1016
- if (!receipt) {
1017
- console.error("Transaction not confirmed. Check on-chain.");
1018
- process.exit(1);
1072
+ let walletAddress;
1073
+ if (isResuming) {
1074
+ // Resume: skip deploy, use existing wallet
1075
+ walletAddress = config.walletContractAddress;
1076
+ console.log(" " + colors_1.c.dim(`◈ Using existing wallet: ${walletAddress}`));
1019
1077
  }
1020
- let walletAddress = null;
1021
- const factoryContract = new ethers_1.ethers.Contract(factoryAddress, abis_1.WALLET_FACTORY_ABI, provider);
1022
- for (const log of receipt.logs) {
1023
- try {
1024
- const parsed = factoryContract.interface.parseLog(log);
1025
- if (parsed?.name === "WalletCreated") {
1026
- walletAddress = parsed.args.walletAddress;
1027
- break;
1078
+ else {
1079
+ // ── Step 2: Confirm & Deploy ─────────────────────────────────────────
1080
+ // WalletConnect approval already confirmed intent — sending automatically
1081
+ console.log("Deploying...");
1082
+ const txHash = await (0, walletconnect_1.sendTransactionWithSession)(client, session, account, chainId, {
1083
+ to: factoryAddress,
1084
+ data: factoryInterface.encodeFunctionData("createWallet", ["0x0000000071727De22E5E9d8BAf0edAc6f37da032"]),
1085
+ value: "0x0",
1086
+ });
1087
+ console.log(`\nTransaction submitted: ${txHash}`);
1088
+ console.log("Waiting for confirmation...");
1089
+ const receipt = await provider.waitForTransaction(txHash);
1090
+ if (!receipt) {
1091
+ console.error("Transaction not confirmed. Check on-chain.");
1092
+ process.exit(1);
1093
+ }
1094
+ let deployedWallet = null;
1095
+ const factoryContract = new ethers_1.ethers.Contract(factoryAddress, abis_1.WALLET_FACTORY_ABI, provider);
1096
+ for (const log of receipt.logs) {
1097
+ try {
1098
+ const parsed = factoryContract.interface.parseLog(log);
1099
+ if (parsed?.name === "WalletCreated") {
1100
+ deployedWallet = parsed.args.walletAddress;
1101
+ break;
1102
+ }
1028
1103
  }
1104
+ catch { /* skip unparseable logs */ }
1029
1105
  }
1030
- catch { /* skip unparseable logs */ }
1031
- }
1032
- if (!walletAddress) {
1033
- console.error("Could not find WalletCreated event in receipt. Check the transaction on-chain.");
1034
- process.exit(1);
1035
- }
1036
- // ── Step 1 complete: save wallet + owner immediately ─────────────────
1037
- config.walletContractAddress = walletAddress;
1038
- config.ownerAddress = account;
1039
- (0, config_1.saveConfig)(config);
1040
- try {
1041
- fs_1.default.chmodSync((0, config_1.getConfigPath)(), 0o600);
1106
+ if (!deployedWallet) {
1107
+ console.error("Could not find WalletCreated event in receipt. Check the transaction on-chain.");
1108
+ process.exit(1);
1109
+ }
1110
+ walletAddress = deployedWallet;
1111
+ // ── Step 1 complete: save wallet + owner immediately ─────────────────
1112
+ config.walletContractAddress = walletAddress;
1113
+ config.ownerAddress = account;
1114
+ (0, config_1.saveConfig)(config);
1115
+ try {
1116
+ fs_1.default.chmodSync((0, config_1.getConfigPath)(), 0o600);
1117
+ }
1118
+ catch { /* best-effort */ }
1119
+ console.log("\n " + colors_1.c.success + colors_1.c.white(" Wallet deployed"));
1120
+ (0, tree_1.renderTree)([
1121
+ { label: "Wallet", value: walletAddress },
1122
+ { label: "Owner", value: account, last: true },
1123
+ ]);
1042
1124
  }
1043
- catch { /* best-effort */ }
1044
- console.log("\n " + colors_1.c.success + colors_1.c.white(" Wallet deployed"));
1045
- (0, tree_1.renderTree)([
1046
- { label: "Wallet", value: walletAddress },
1047
- { label: "Owner", value: account, last: true },
1048
- ]);
1049
1125
  // ── Steps 2–6: Complete onboarding ceremony (same WalletConnect session)
1050
1126
  const sendTxCeremony = async (call, description) => {
1051
1127
  console.log(" " + colors_1.c.dim(`◈ ${description}`));
@@ -1086,8 +1162,11 @@ function registerWalletCommands(program) {
1086
1162
  const guardianWallet = ethers_1.ethers.Wallet.createRandom();
1087
1163
  config.walletContractAddress = walletAddress;
1088
1164
  config.ownerAddress = address;
1089
- config.guardianPrivateKey = guardianWallet.privateKey;
1090
1165
  config.guardianAddress = guardianWallet.address;
1166
+ // Save key to restricted file — never store in config.json
1167
+ saveGuardianKey(guardianWallet.privateKey);
1168
+ if (config.guardianPrivateKey)
1169
+ delete config.guardianPrivateKey;
1091
1170
  (0, config_1.saveConfig)(config);
1092
1171
  // Call setGuardian on the deployed wallet
1093
1172
  const walletContract = new ethers_1.ethers.Contract(walletAddress, abis_1.ARC402_WALLET_GUARDIAN_ABI, signer);
@@ -1108,7 +1187,7 @@ function registerWalletCommands(program) {
1108
1187
  { label: "Wallet", value: walletAddress },
1109
1188
  { label: "Guardian", value: guardianWallet.address, last: true },
1110
1189
  ]);
1111
- console.log(`Guardian private key saved to config (keep it safe used for emergency freeze only)`);
1190
+ console.log(`Guardian private key saved to ~/.arc402/guardian.key (chmod 400 — keep it safe, used for emergency freeze only)`);
1112
1191
  console.log(`Your wallet contract is ready for policy enforcement`);
1113
1192
  printOpenShellHint();
1114
1193
  }
@@ -1305,12 +1384,13 @@ function registerWalletCommands(program) {
1305
1384
  console.error("walletContractAddress not set in config. Run `arc402 wallet deploy` first.");
1306
1385
  process.exit(1);
1307
1386
  }
1308
- if (!config.guardianPrivateKey) {
1309
- console.error("guardianPrivateKey not set in config. Guardian key was generated during `arc402 wallet deploy`.");
1387
+ const guardianKey = loadGuardianKey(config);
1388
+ if (!guardianKey) {
1389
+ console.error(`Guardian key not found. Expected at ~/.arc402/guardian.key (or guardianPrivateKey in config for legacy setups).`);
1310
1390
  process.exit(1);
1311
1391
  }
1312
1392
  const provider = new ethers_1.ethers.JsonRpcProvider(config.rpcUrl);
1313
- const guardianSigner = new ethers_1.ethers.Wallet(config.guardianPrivateKey, provider);
1393
+ const guardianSigner = new ethers_1.ethers.Wallet(guardianKey, provider);
1314
1394
  const walletContract = new ethers_1.ethers.Contract(config.walletContractAddress, abis_1.ARC402_WALLET_GUARDIAN_ABI, guardianSigner);
1315
1395
  let tx;
1316
1396
  if (opts.drain) {
@@ -1430,12 +1510,14 @@ function registerWalletCommands(program) {
1430
1510
  value: "0x0",
1431
1511
  });
1432
1512
  await provider.waitForTransaction(txHash);
1433
- config.guardianPrivateKey = guardianWallet.privateKey;
1513
+ saveGuardianKey(guardianWallet.privateKey);
1514
+ if (config.guardianPrivateKey)
1515
+ delete config.guardianPrivateKey;
1434
1516
  config.guardianAddress = guardianWallet.address;
1435
1517
  (0, config_1.saveConfig)(config);
1436
1518
  console.log("\n" + colors_1.c.success + colors_1.c.white(` Guardian set to: ${guardianWallet.address}`));
1437
1519
  console.log(" " + colors_1.c.dim("Tx:") + " " + colors_1.c.white(txHash));
1438
- console.log(" " + colors_1.c.dim("Guardian private key saved to config."));
1520
+ console.log(" " + colors_1.c.dim("Guardian private key saved to ~/.arc402/guardian.key (chmod 400)."));
1439
1521
  console.log(" " + colors_1.c.warning + " " + colors_1.c.yellow("The guardian key can freeze your wallet. Store it separately from your hot key."));
1440
1522
  });
1441
1523
  // ─── policy-engine freeze / unfreeze (legacy — for PolicyEngine-level freeze) ──
@@ -2146,9 +2228,11 @@ function registerWalletCommands(program) {
2146
2228
  txHashes.push(txHash);
2147
2229
  }
2148
2230
  }
2149
- // Persist guardian key if generated
2231
+ // Persist guardian key if generated — save to restricted file, not config.json
2150
2232
  if (guardianWallet) {
2151
- config.guardianPrivateKey = guardianWallet.privateKey;
2233
+ saveGuardianKey(guardianWallet.privateKey);
2234
+ if (config.guardianPrivateKey)
2235
+ delete config.guardianPrivateKey;
2152
2236
  config.guardianAddress = guardianWallet.address;
2153
2237
  (0, config_1.saveConfig)(config);
2154
2238
  }
@@ -2160,7 +2244,7 @@ function registerWalletCommands(program) {
2160
2244
  txHashes.forEach((h, i) => console.log(" " + colors_1.c.dim(`Tx ${i + 1}:`) + " " + colors_1.c.white(h)));
2161
2245
  }
2162
2246
  if (guardianWallet) {
2163
- console.log(" " + colors_1.c.success + colors_1.c.dim(` Guardian key saved to config — address: ${guardianWallet.address}`));
2247
+ console.log(" " + colors_1.c.success + colors_1.c.dim(` Guardian key saved to ~/.arc402/guardian.key — address: ${guardianWallet.address}`));
2164
2248
  console.log(" " + colors_1.c.warning + " " + colors_1.c.yellow("Store the guardian private key separately from your hot key."));
2165
2249
  }
2166
2250
  console.log(colors_1.c.dim("\nVerify with: arc402 wallet status && arc402 wallet policy show"));