arc402-cli 0.3.3 → 0.4.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.
Files changed (102) hide show
  1. package/dist/commands/accept.d.ts.map +1 -1
  2. package/dist/commands/accept.js +17 -7
  3. package/dist/commands/accept.js.map +1 -1
  4. package/dist/commands/agent-handshake.d.ts.map +1 -1
  5. package/dist/commands/agent-handshake.js +9 -4
  6. package/dist/commands/agent-handshake.js.map +1 -1
  7. package/dist/commands/agent.d.ts.map +1 -1
  8. package/dist/commands/agent.js +14 -8
  9. package/dist/commands/agent.js.map +1 -1
  10. package/dist/commands/agreements.d.ts.map +1 -1
  11. package/dist/commands/agreements.js +51 -26
  12. package/dist/commands/agreements.js.map +1 -1
  13. package/dist/commands/arbitrator.d.ts.map +1 -1
  14. package/dist/commands/arbitrator.js +15 -7
  15. package/dist/commands/arbitrator.js.map +1 -1
  16. package/dist/commands/arena-handshake.d.ts.map +1 -1
  17. package/dist/commands/arena-handshake.js +14 -11
  18. package/dist/commands/arena-handshake.js.map +1 -1
  19. package/dist/commands/channel.d.ts.map +1 -1
  20. package/dist/commands/channel.js +27 -17
  21. package/dist/commands/channel.js.map +1 -1
  22. package/dist/commands/coldstart.d.ts.map +1 -1
  23. package/dist/commands/coldstart.js +33 -22
  24. package/dist/commands/coldstart.js.map +1 -1
  25. package/dist/commands/config.d.ts.map +1 -1
  26. package/dist/commands/config.js +33 -17
  27. package/dist/commands/config.js.map +1 -1
  28. package/dist/commands/daemon.d.ts.map +1 -1
  29. package/dist/commands/daemon.js +44 -37
  30. package/dist/commands/daemon.js.map +1 -1
  31. package/dist/commands/endpoint.d.ts.map +1 -1
  32. package/dist/commands/endpoint.js +4 -3
  33. package/dist/commands/endpoint.js.map +1 -1
  34. package/dist/commands/feed.d.ts.map +1 -1
  35. package/dist/commands/feed.js.map +1 -1
  36. package/dist/commands/hire.d.ts.map +1 -1
  37. package/dist/commands/hire.js +3 -0
  38. package/dist/commands/hire.js.map +1 -1
  39. package/dist/commands/owner.d.ts.map +1 -1
  40. package/dist/commands/owner.js +5 -1
  41. package/dist/commands/owner.js.map +1 -1
  42. package/dist/commands/policy.d.ts.map +1 -1
  43. package/dist/commands/policy.js.map +1 -1
  44. package/dist/commands/relay.d.ts.map +1 -1
  45. package/dist/commands/relay.js.map +1 -1
  46. package/dist/commands/remediate.d.ts.map +1 -1
  47. package/dist/commands/remediate.js.map +1 -1
  48. package/dist/commands/reputation.d.ts.map +1 -1
  49. package/dist/commands/reputation.js.map +1 -1
  50. package/dist/commands/trust.d.ts.map +1 -1
  51. package/dist/commands/trust.js.map +1 -1
  52. package/dist/commands/verify.d.ts.map +1 -1
  53. package/dist/commands/verify.js.map +1 -1
  54. package/dist/commands/wallet.d.ts.map +1 -1
  55. package/dist/commands/wallet.js +15 -5
  56. package/dist/commands/wallet.js.map +1 -1
  57. package/dist/commands/watch.d.ts +3 -0
  58. package/dist/commands/watch.d.ts.map +1 -0
  59. package/dist/commands/watch.js +23 -0
  60. package/dist/commands/watch.js.map +1 -0
  61. package/dist/commands/watchtower.d.ts.map +1 -1
  62. package/dist/commands/watchtower.js.map +1 -1
  63. package/dist/config.d.ts.map +1 -1
  64. package/dist/config.js +15 -2
  65. package/dist/config.js.map +1 -1
  66. package/dist/index.js +73 -38
  67. package/dist/index.js.map +1 -1
  68. package/dist/ui/banner.d.ts.map +1 -1
  69. package/dist/ui/banner.js +4 -2
  70. package/dist/ui/banner.js.map +1 -1
  71. package/dist/ui/tree.d.ts +7 -0
  72. package/dist/ui/tree.d.ts.map +1 -0
  73. package/dist/ui/tree.js +13 -0
  74. package/dist/ui/tree.js.map +1 -0
  75. package/package.json +1 -1
  76. package/src/commands/accept.ts +19 -10
  77. package/src/commands/agent-handshake.ts +9 -4
  78. package/src/commands/agent.ts +15 -6
  79. package/src/commands/agreements.ts +51 -25
  80. package/src/commands/arbitrator.ts +26 -10
  81. package/src/commands/arena-handshake.ts +15 -8
  82. package/src/commands/channel.ts +27 -17
  83. package/src/commands/coldstart.ts +29 -20
  84. package/src/commands/config.ts +33 -17
  85. package/src/commands/daemon.ts +45 -38
  86. package/src/commands/endpoint.ts +4 -3
  87. package/src/commands/feed.ts +1 -0
  88. package/src/commands/hire.ts +8 -0
  89. package/src/commands/owner.ts +5 -1
  90. package/src/commands/policy.ts +3 -0
  91. package/src/commands/relay.ts +1 -0
  92. package/src/commands/remediate.ts +2 -0
  93. package/src/commands/reputation.ts +4 -0
  94. package/src/commands/trust.ts +3 -0
  95. package/src/commands/verify.ts +2 -0
  96. package/src/commands/wallet.ts +15 -5
  97. package/src/commands/watch.ts +23 -0
  98. package/src/commands/watchtower.ts +4 -0
  99. package/src/config.ts +15 -2
  100. package/src/index.ts +44 -4
  101. package/src/ui/banner.ts +5 -2
  102. package/src/ui/tree.ts +16 -0
package/dist/config.js CHANGED
@@ -47,8 +47,21 @@ const getConfigPath = () => CONFIG_PATH;
47
47
  exports.getConfigPath = getConfigPath;
48
48
  function loadConfig() {
49
49
  if (!fs.existsSync(CONFIG_PATH)) {
50
- console.error(`No config found at ${CONFIG_PATH}. Run \`arc402 config init\` to set up your configuration.`);
51
- process.exit(1);
50
+ // Auto-create with Base Mainnet defaults zero friction
51
+ const defaults = exports.NETWORK_DEFAULTS["base-mainnet"] ?? {};
52
+ const autoConfig = {
53
+ network: "base-mainnet",
54
+ rpcUrl: defaults.rpcUrl ?? "https://mainnet.base.org",
55
+ trustRegistryAddress: defaults.trustRegistryAddress ?? "",
56
+ agentRegistryAddress: defaults.agentRegistryV2Address ?? defaults.agentRegistryAddress,
57
+ serviceAgreementAddress: defaults.serviceAgreementAddress,
58
+ reputationOracleAddress: defaults.reputationOracleAddress,
59
+ capabilityRegistryAddress: defaults.capabilityRegistryAddress,
60
+ governanceAddress: defaults.governanceAddress,
61
+ };
62
+ saveConfig(autoConfig);
63
+ console.log(`◈ Config auto-created at ${CONFIG_PATH} (Base Mainnet)`);
64
+ return autoConfig;
52
65
  }
53
66
  return JSON.parse(fs.readFileSync(CONFIG_PATH, "utf-8"));
54
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const commander_1 = require("commander");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
8
11
  const accept_1 = require("./commands/accept");
9
12
  const agent_1 = require("./commands/agent");
10
13
  const agreements_1 = require("./commands/agreements");
@@ -37,47 +40,79 @@ const coldstart_1 = require("./commands/coldstart");
37
40
  const migrate_1 = require("./commands/migrate");
38
41
  const feed_1 = require("./commands/feed");
39
42
  const arena_1 = require("./commands/arena");
43
+ const watch_1 = require("./commands/watch");
40
44
  const reputation_js_1 = __importDefault(require("./commands/reputation.js"));
41
45
  const policy_js_1 = __importDefault(require("./commands/policy.js"));
42
46
  // Show banner when invoked with no arguments
43
47
  if (process.argv.length <= 2) {
44
- (0, banner_1.renderBanner)();
45
- process.exit(0);
48
+ void (async () => {
49
+ const CONFIG_PATH = path_1.default.join(os_1.default.homedir(), ".arc402", "config.json");
50
+ let bannerCfg;
51
+ if (fs_1.default.existsSync(CONFIG_PATH)) {
52
+ try {
53
+ const raw = JSON.parse(fs_1.default.readFileSync(CONFIG_PATH, "utf-8"));
54
+ bannerCfg = { network: raw.network };
55
+ if (raw.walletContractAddress) {
56
+ const w = raw.walletContractAddress;
57
+ bannerCfg.wallet = `${w.slice(0, 6)}...${w.slice(-4)}`;
58
+ }
59
+ if (raw.rpcUrl && raw.walletContractAddress) {
60
+ try {
61
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
62
+ const ethersLib = require("ethers");
63
+ const provider = new ethersLib.ethers.JsonRpcProvider(raw.rpcUrl);
64
+ const bal = await Promise.race([
65
+ provider.getBalance(raw.walletContractAddress),
66
+ new Promise((_, r) => setTimeout(() => r(new Error("timeout")), 2000)),
67
+ ]);
68
+ bannerCfg.balance = `${parseFloat(ethersLib.ethers.formatEther(bal)).toFixed(4)} ETH`;
69
+ }
70
+ catch { /* skip balance on error/timeout */ }
71
+ }
72
+ }
73
+ catch { /* skip config info on parse error */ }
74
+ }
75
+ (0, banner_1.renderBanner)(bannerCfg);
76
+ process.exit(0);
77
+ })();
46
78
  }
47
- const program = new commander_1.Command();
48
- program.name("arc402").description("ARC-402 CLI aligned to canonical-capability discovery → negotiate → hire → remediate → dispute workflow").version("0.3.2");
49
- (0, config_1.registerConfigCommands)(program);
50
- (0, agent_handshake_1.registerHandshakeCommand)(program);
51
- (0, agent_1.registerAgentCommands)(program);
52
- (0, discover_1.registerDiscoverCommand)(program);
53
- (0, endpoint_1.registerEndpointCommands)(program);
54
- (0, negotiate_1.registerNegotiateCommands)(program);
55
- (0, hire_1.registerHireCommand)(program);
56
- (0, agreements_1.registerAgreementsCommands)(program);
57
- (0, accept_1.registerAcceptCommand)(program);
58
- (0, deliver_1.registerDeliverCommand)(program);
59
- (0, remediate_1.registerRemediateCommands)(program);
60
- (0, dispute_1.registerDisputeCommand)(program);
61
- (0, arbitrator_1.registerArbitratorCommand)(program);
62
- (0, cancel_1.registerCancelCommand)(program);
63
- (0, channel_1.registerChannelCommands)(program);
64
- (0, relay_1.registerRelayCommands)(program);
65
- (0, daemon_1.registerDaemonCommands)(program);
66
- (0, openshell_1.registerOpenShellCommands)(program);
67
- (0, workroom_1.registerWorkroomCommands)(program);
68
- (0, arena_handshake_1.registerArenaHandshakeCommands)(program);
69
- (0, trust_1.registerTrustCommand)(program);
70
- (0, wallet_1.registerWalletCommands)(program);
71
- (0, owner_1.registerOwnerCommands)(program);
72
- (0, setup_1.registerSetupCommands)(program);
73
- (0, verify_1.registerVerifyCommand)(program);
74
- (0, contract_interaction_1.registerContractInteractionCommands)(program);
75
- (0, watchtower_1.registerWatchtowerCommands)(program);
76
- (0, coldstart_1.registerColdStartCommands)(program);
77
- (0, migrate_1.registerMigrateCommands)(program);
78
- (0, feed_1.registerFeedCommand)(program);
79
- (0, arena_1.registerArenaCommands)(program);
80
- program.addCommand(reputation_js_1.default);
81
- program.addCommand(policy_js_1.default);
82
- program.parse(process.argv);
79
+ else {
80
+ const program = new commander_1.Command();
81
+ program.name("arc402").description("ARC-402 CLI aligned to canonical-capability discovery → negotiate → hire → remediate → dispute workflow").version(require("../package.json").version);
82
+ (0, config_1.registerConfigCommands)(program);
83
+ (0, agent_handshake_1.registerHandshakeCommand)(program);
84
+ (0, agent_1.registerAgentCommands)(program);
85
+ (0, discover_1.registerDiscoverCommand)(program);
86
+ (0, endpoint_1.registerEndpointCommands)(program);
87
+ (0, negotiate_1.registerNegotiateCommands)(program);
88
+ (0, hire_1.registerHireCommand)(program);
89
+ (0, agreements_1.registerAgreementsCommands)(program);
90
+ (0, accept_1.registerAcceptCommand)(program);
91
+ (0, deliver_1.registerDeliverCommand)(program);
92
+ (0, remediate_1.registerRemediateCommands)(program);
93
+ (0, dispute_1.registerDisputeCommand)(program);
94
+ (0, arbitrator_1.registerArbitratorCommand)(program);
95
+ (0, cancel_1.registerCancelCommand)(program);
96
+ (0, channel_1.registerChannelCommands)(program);
97
+ (0, relay_1.registerRelayCommands)(program);
98
+ (0, daemon_1.registerDaemonCommands)(program);
99
+ (0, openshell_1.registerOpenShellCommands)(program);
100
+ (0, workroom_1.registerWorkroomCommands)(program);
101
+ (0, arena_handshake_1.registerArenaHandshakeCommands)(program);
102
+ (0, trust_1.registerTrustCommand)(program);
103
+ (0, wallet_1.registerWalletCommands)(program);
104
+ (0, owner_1.registerOwnerCommands)(program);
105
+ (0, setup_1.registerSetupCommands)(program);
106
+ (0, verify_1.registerVerifyCommand)(program);
107
+ (0, contract_interaction_1.registerContractInteractionCommands)(program);
108
+ (0, watchtower_1.registerWatchtowerCommands)(program);
109
+ (0, coldstart_1.registerColdStartCommands)(program);
110
+ (0, migrate_1.registerMigrateCommands)(program);
111
+ (0, feed_1.registerFeedCommand)(program);
112
+ (0, arena_1.registerArenaCommands)(program);
113
+ (0, watch_1.registerWatchCommand)(program);
114
+ program.addCommand(reputation_js_1.default);
115
+ program.addCommand(policy_js_1.default);
116
+ program.parse(process.argv);
117
+ } // end else (has arguments)
83
118
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAsBxD"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAsBxD"}
package/dist/ui/banner.js CHANGED
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.renderBanner = renderBanner;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
9
+ const _pkg = require("../../package.json");
8
10
  const ART = `
9
11
  ██████╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗
10
12
  ██╔══██╗██╔══██╗██╔════╝ ██║ ██║██╔═══██╗╚════██╗
@@ -16,7 +18,7 @@ const SEPARATOR = chalk_1.default.cyanBright("◈") + " " + chalk_1.default.dim(
16
18
  function renderBanner(config) {
17
19
  console.log(chalk_1.default.cyan(ART));
18
20
  console.log();
19
- console.log(" " + chalk_1.default.dim("agent-to-agent arcing · v0.1.0"));
21
+ console.log(" " + chalk_1.default.dim(`agent-to-agent arcing · v${_pkg.version}`));
20
22
  console.log(" " + SEPARATOR);
21
23
  if (config) {
22
24
  console.log();
@@ -31,7 +33,7 @@ function renderBanner(config) {
31
33
  }
32
34
  }
33
35
  console.log();
34
- console.log(` ${chalk_1.default.dim("Type 'arc help' to get started")}`);
36
+ console.log(` ${chalk_1.default.dim("Type 'arc402 help' to get started")}`);
35
37
  console.log();
36
38
  }
37
39
  //# sourceMappingURL=banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":";;;;;AAkBA,oCAsBC;AAxCD,kDAA0B;AAE1B,MAAM,GAAG,GAAG;;;;;;wDAM4C,CAAC;AAEzD,MAAM,SAAS,GAAG,eAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAQ1E,SAAgB,YAAY,CAAC,MAAqB;IAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAE7B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":";;;;;AAqBA,oCAsBC;AA3CD,kDAA0B;AAE1B,8DAA8D;AAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAElE,MAAM,GAAG,GAAG;;;;;;wDAM4C,CAAC;AAEzD,MAAM,SAAS,GAAG,eAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAQ1E,SAAgB,YAAY,CAAC,MAAqB;IAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAE7B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface TreeItem {
2
+ label: string;
3
+ value: string;
4
+ last?: boolean;
5
+ }
6
+ export declare function renderTree(items: TreeItem[]): void;
7
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAOlD"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTree = renderTree;
4
+ const colors_1 = require("./colors");
5
+ function renderTree(items) {
6
+ items.forEach((item, i) => {
7
+ const isLast = item.last ?? (i === items.length - 1);
8
+ const branch = isLast ? "└" : "├";
9
+ const paddedLabel = item.label.padEnd(10);
10
+ console.log(` ${colors_1.c.dim(branch)} ${colors_1.c.dim(paddedLabel)} ${colors_1.c.white(item.value)}`);
11
+ });
12
+ }
13
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":";;AAQA,gCAOC;AAfD,qCAA6B;AAQ7B,SAAgB,UAAU,CAAC,KAAiB;IAC1C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,UAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,UAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arc402-cli",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
4
4
  "description": "ARC-402 CLI for discovery, negotiation payloads, hire/remediation/dispute workflows, and network reads",
5
5
  "bin": {
6
6
  "arc402": "./dist/index.js"
@@ -6,6 +6,8 @@ import { requireSigner } from "../client";
6
6
  import { printSenderInfo, executeContractWriteViaWallet } from "../wallet-router";
7
7
  import { SERVICE_AGREEMENT_ABI } from "../abis";
8
8
  import { resolveAgentEndpoint, notifyAgent, DEFAULT_REGISTRY_ADDRESS } from "../endpoint-notify";
9
+ import { c } from "../ui/colors";
10
+ import { startSpinner } from "../ui/spinner";
9
11
 
10
12
  export function registerAcceptCommand(program: Command): void {
11
13
  program.command("accept <id>").description("Provider accepts a proposed agreement").action(async (id) => {
@@ -27,16 +29,23 @@ export function registerAcceptCommand(program: Command): void {
27
29
  clientAddress = String(ag.client ?? "");
28
30
  } catch { /* non-fatal */ }
29
31
 
30
- if (config.walletContractAddress) {
31
- await executeContractWriteViaWallet(
32
- config.walletContractAddress, signer, config.serviceAgreementAddress,
33
- SERVICE_AGREEMENT_ABI, "accept", [BigInt(id)],
34
- );
35
- } else {
36
- const client = new ServiceAgreementClient(config.serviceAgreementAddress, signer);
37
- await client.accept(BigInt(id));
32
+ const spinner = startSpinner("Submitting transaction...");
33
+ try {
34
+ if (config.walletContractAddress) {
35
+ await executeContractWriteViaWallet(
36
+ config.walletContractAddress, signer, config.serviceAgreementAddress,
37
+ SERVICE_AGREEMENT_ABI, "accept", [BigInt(id)],
38
+ );
39
+ } else {
40
+ const client = new ServiceAgreementClient(config.serviceAgreementAddress, signer);
41
+ await client.accept(BigInt(id));
42
+ }
43
+ spinner.succeed();
44
+ } catch (err) {
45
+ spinner.fail();
46
+ throw err;
38
47
  }
39
- console.log(`accepted ${id}`);
48
+ console.log(' ' + c.success + c.white(` Accepted — agreement #${id}`));
40
49
 
41
50
  // Notify client's HTTP endpoint (non-blocking)
42
51
  if (clientAddress) {
@@ -48,7 +57,7 @@ export function registerAcceptCommand(program: Command): void {
48
57
  await notifyAgent(endpoint, "/hire/accepted", payload);
49
58
  await notifyAgent(endpoint, "/delivery/accepted", payload);
50
59
  } catch (err) {
51
- console.warn(`Warning: could not notify client endpoint: ${err instanceof Error ? err.message : String(err)}`);
60
+ console.warn(' ' + c.warning + c.white(` Could not notify client endpoint: ${err instanceof Error ? err.message : String(err)}`));
52
61
  }
53
62
  }
54
63
  });
@@ -2,6 +2,8 @@ import { Command } from "commander";
2
2
  import { ethers } from "ethers";
3
3
  import { loadConfig } from "../config";
4
4
  import { requireSigner } from "../client";
5
+ import { c } from "../ui/colors";
6
+ import { renderTree } from "../ui/tree";
5
7
 
6
8
  // Challenge-response: both agents sign a shared nonce with their agent key
7
9
  // and verify each other against AgentRegistry
@@ -57,10 +59,13 @@ export function registerHandshakeCommand(program: Command): void {
57
59
  if (opts.json) {
58
60
  console.log(JSON.stringify(challenge));
59
61
  } else {
60
- console.log(`✓ Your identity: ${myAddress} (registered)`);
61
- console.log(`✓ Their identity: ${agentAddress} (registered, active)`);
62
- console.log(`✓ Their endpoint: ${theirAgent.endpoint}`);
63
- console.log(`\nSigned challenge (send to their endpoint to complete handshake):`);
62
+ console.log('\n ' + c.mark + c.white(' Handshake'));
63
+ renderTree([
64
+ { label: 'Your identity', value: `${myAddress} (registered)` },
65
+ { label: 'Their identity', value: `${agentAddress} (registered, active)` },
66
+ { label: 'Their endpoint', value: theirAgent.endpoint, last: true },
67
+ ]);
68
+ console.log('\n ' + c.dim('Signed challenge (send to their endpoint to complete handshake):'));
64
69
  console.log(JSON.stringify(challenge, null, 2));
65
70
  }
66
71
  });
@@ -10,6 +10,9 @@ import { executeContractWriteViaWallet } from "../wallet-router";
10
10
  import { getClient } from "../client";
11
11
  import prompts from "prompts";
12
12
  import chalk from "chalk";
13
+ import { startSpinner } from "../ui/spinner";
14
+ import { renderTree } from "../ui/tree";
15
+ import { c } from "../ui/colors";
13
16
 
14
17
  // ─── helpers ──────────────────────────────────────────────────────────────────
15
18
 
@@ -92,6 +95,7 @@ export function registerAgentCommands(program: Command): void {
92
95
  console.warn(chalk.yellow(`⚠️ Low wallet balance: ${ethers.formatEther(walletBalance)} ETH. Registration may fail due to insufficient gas. Fund your wallet with at least 0.0001 ETH first.`));
93
96
  }
94
97
  }
98
+ const regSpinner = startSpinner("Registering agent...");
95
99
  const tx = await executeContractWriteViaWallet(
96
100
  config.walletContractAddress,
97
101
  signer,
@@ -101,10 +105,12 @@ export function registerAgentCommands(program: Command): void {
101
105
  [opts.name, capabilities, opts.serviceType, opts.endpoint ?? "", metadataUri],
102
106
  );
103
107
  const receipt = await tx.wait();
104
- console.log(chalk.green(`✓ Registered in AgentRegistry`));
105
- console.log(` Wallet: ${config.walletContractAddress}`);
106
- console.log(` Tx: ${receipt?.hash}`);
107
- if (metadataUri) console.log(` Metadata URI: ${metadataUri}`);
108
+ regSpinner.succeed("Registered in AgentRegistry");
109
+ renderTree([
110
+ { label: "Wallet", value: config.walletContractAddress },
111
+ { label: "Tx", value: receipt?.hash ?? "", last: !metadataUri },
112
+ ...(metadataUri ? [{ label: "Metadata", value: metadataUri, last: true }] : []),
113
+ ]);
108
114
  } else {
109
115
  // ── EOA fallback ──
110
116
  console.warn(chalk.yellow("⚠ No walletContractAddress in config — registering from EOA key (msg.sender = hot key)."));
@@ -116,9 +122,12 @@ export function registerAgentCommands(program: Command): void {
116
122
  }
117
123
  }
118
124
  const client = new AgentRegistryClient(registryAddress, signer);
125
+ const eoaSpinner = startSpinner("Registering agent...");
119
126
  await client.register({ name: opts.name, serviceType: opts.serviceType, capabilities, endpoint: opts.endpoint ?? "", metadataURI: metadataUri });
120
- console.log(chalk.green("Registered in AgentRegistry"));
121
- if (metadataUri) console.log(` metadata URI: ${metadataUri}`);
127
+ eoaSpinner.succeed("Registered in AgentRegistry");
128
+ if (metadataUri) {
129
+ renderTree([{ label: "Metadata", value: metadataUri, last: true }]);
130
+ }
122
131
  }
123
132
 
124
133
  // ── optional subdomain claim ──────────────────────────────────────────
@@ -7,6 +7,9 @@ import { getClient } from "../client";
7
7
  import { agreementStatusLabel, formatDate, printTable, truncateAddress } from "../utils/format";
8
8
  import { formatDeadline } from "../utils/time";
9
9
  import { hashString } from "../utils/hash";
10
+ import { c } from "../ui/colors";
11
+ import { renderTree } from "../ui/tree";
12
+ import { formatAddress } from "../ui/format";
10
13
 
11
14
  // ─── AgreementTree minimal ABI ────────────────────────────────────────────────
12
15
 
@@ -61,11 +64,23 @@ export function registerAgreementsCommands(program: Command): void {
61
64
  const client = new ServiceAgreementClient(config.serviceAgreementAddress, provider);
62
65
  const agreement = await client.getAgreement(BigInt(id));
63
66
  if (opts.json) return console.log(JSON.stringify(agreement, (_k, value) => typeof value === "bigint" ? value.toString() : value, 2));
64
- console.log(`agreement #${agreement.id}\nclient=${agreement.client}\nprovider=${agreement.provider}\nstatus=${agreementStatusLabel(agreement.status)}\ncreated=${formatDate(Number(agreement.createdAt))}\ndeadline=${formatDate(Number(agreement.deadline))}\nverifyWindowEnd=${Number(agreement.verifyWindowEnd) ? formatDate(Number(agreement.verifyWindowEnd)) : "n/a"}\ncommittedHash=${agreement.committedHash}`);
67
+ console.log('\n ' + c.mark + c.white(` Agreement #${agreement.id}`));
68
+ renderTree([
69
+ { label: 'Client', value: formatAddress(agreement.client) },
70
+ { label: 'Provider', value: formatAddress(agreement.provider) },
71
+ { label: 'Status', value: agreementStatusLabel(agreement.status) },
72
+ { label: 'Created', value: formatDate(Number(agreement.createdAt)) },
73
+ { label: 'Deadline', value: formatDate(Number(agreement.deadline)) },
74
+ { label: 'Verify end', value: Number(agreement.verifyWindowEnd) ? formatDate(Number(agreement.verifyWindowEnd)) : 'n/a' },
75
+ { label: 'Hash', value: String(agreement.committedHash), last: true },
76
+ ]);
65
77
  if ([AgreementStatus.REVISION_REQUESTED, AgreementStatus.REVISED, AgreementStatus.PARTIAL_SETTLEMENT, AgreementStatus.ESCALATED_TO_HUMAN, AgreementStatus.DISPUTED, AgreementStatus.ESCALATED_TO_ARBITRATION].includes(agreement.status)) {
66
78
  const remediation = await client.getRemediationCase(agreement.id);
67
79
  const dispute = await client.getDisputeCase(agreement.id);
68
- console.log(`remediationActive=${remediation.active} cycles=${remediation.cycleCount} disputeOutcome=${dispute.outcome}`);
80
+ renderTree([
81
+ { label: 'Remediation', value: `active=${remediation.active} cycles=${remediation.cycleCount}` },
82
+ { label: 'Dispute', value: `outcome=${dispute.outcome}`, last: true },
83
+ ]);
69
84
  }
70
85
  });
71
86
 
@@ -90,9 +105,12 @@ export function registerAgreementsCommands(program: Command): void {
90
105
  if (opts.json) {
91
106
  console.log(JSON.stringify({ txHash: receipt.hash, parentId: opts.parent, childId: opts.child }));
92
107
  } else {
93
- console.log(`Sub-agreement registered.`);
94
- console.log(` Parent: ${opts.parent} Child: ${opts.child}`);
95
- console.log(` tx: ${receipt.hash}`);
108
+ console.log('\n ' + c.mark + c.white(' Sub-agreement registered'));
109
+ renderTree([
110
+ { label: 'Parent', value: `#${opts.parent}` },
111
+ { label: 'Child', value: `#${opts.child}` },
112
+ { label: 'Tx', value: receipt.hash, last: true },
113
+ ]);
96
114
  }
97
115
  });
98
116
 
@@ -130,11 +148,13 @@ export function registerAgreementsCommands(program: Command): void {
130
148
  return;
131
149
  }
132
150
 
133
- console.log(`Agreement Tree — node #${agreementId}`);
134
- console.log(` Root: #${result.root}`);
135
- console.log(` Depth: ${result.depth}`);
136
- console.log(` Path: ${result.path.map((p) => "#" + p).join(" → ")}`);
137
- console.log(` Children: ${result.children.length > 0 ? result.children.map((c) => "#" + c).join(", ") : "(none)"}`);
151
+ console.log('\n ' + c.mark + c.white(` Agreement Tree — node #${agreementId}`));
152
+ renderTree([
153
+ { label: 'Root', value: `#${result.root}` },
154
+ { label: 'Depth', value: String(result.depth) },
155
+ { label: 'Path', value: result.path.map((p) => "#" + p).join(" ") },
156
+ { label: 'Children', value: result.children.length > 0 ? result.children.map((ch) => "#" + ch).join(", ") : "(none)", last: true },
157
+ ]);
138
158
  });
139
159
 
140
160
  // ── arc402 agreements-tree-status <id> ───────────────────────────────────────
@@ -168,10 +188,12 @@ export function registerAgreementsCommands(program: Command): void {
168
188
  return;
169
189
  }
170
190
 
171
- console.log(`Agreement #${agreementId} tree status:`);
172
- console.log(` Sub-agreements: ${result.childCount}`);
173
- console.log(` All settled: ${result.allChildrenSettled ? "YES" : "NO"}`);
174
- console.log(` Ready to deliver to parent: ${result.readyToDeliver ? "YES" : "NO"}`);
191
+ console.log('\n ' + c.mark + c.white(` Agreement #${agreementId} tree status`));
192
+ renderTree([
193
+ { label: 'Sub-agrmts', value: String(result.childCount) },
194
+ { label: 'All settled', value: result.allChildrenSettled ? 'YES' : 'NO' },
195
+ { label: 'Ready', value: result.readyToDeliver ? 'YES — ready to deliver to parent' : 'NO', last: true },
196
+ ]);
175
197
  });
176
198
 
177
199
  // ── arc402 agreements-create-tree ────────────────────────────────────────────
@@ -255,7 +277,7 @@ export function registerAgreementsCommands(program: Command): void {
255
277
  const rootDeadline = Number(opts.deadline);
256
278
  const rootHash = hashString(opts.task);
257
279
 
258
- if (!opts.json) console.log(`\nProposing root agreement to ${opts.provider}...`);
280
+ if (!opts.json) console.log('\n ' + c.mark + c.white(` Proposing root agreement to ${opts.provider}...`));
259
281
  const rootTx = await saContract.propose(
260
282
  opts.provider, opts.serviceType, opts.task,
261
283
  rootPrice, ethers.ZeroAddress, rootDeadline, rootHash,
@@ -274,11 +296,11 @@ export function registerAgreementsCommands(program: Command): void {
274
296
  }
275
297
  if (rootAgreementId === undefined) throw new Error("Could not parse root AgreementProposed event");
276
298
 
277
- if (!opts.json) console.log(` Root agreement ID: ${rootAgreementId}`);
299
+ if (!opts.json) console.log(' ' + c.success + c.white(` Root agreement ID: #${rootAgreementId}`));
278
300
 
279
301
  const childAgreementIds: bigint[] = [];
280
302
  for (const sub of subSpecs) {
281
- if (!opts.json) console.log(` Proposing sub-agreement to ${sub.provider}...`);
303
+ if (!opts.json) console.log(' ' + c.dim(` Proposing sub-agreement to ${sub.provider}...`));
282
304
  const subHash = hashString(sub.task);
283
305
  const subTx = await saContract.propose(
284
306
  sub.provider, sub.serviceType, sub.task,
@@ -294,7 +316,7 @@ export function registerAgreementsCommands(program: Command): void {
294
316
  } catch { /* skip */ }
295
317
  }
296
318
  if (childId === undefined) throw new Error(`Could not parse AgreementProposed for sub-agreement to ${sub.provider}`);
297
- if (!opts.json) console.log(` Sub-agreement ID: ${childId} — registering in tree...`);
319
+ if (!opts.json) console.log(' ' + c.success + c.white(` Sub-agreement #${childId} — registering in tree...`));
298
320
  await (await treeContract.registerSubAgreement(rootAgreementId, childId)).wait();
299
321
  childAgreementIds.push(childId);
300
322
  }
@@ -308,13 +330,17 @@ export function registerAgreementsCommands(program: Command): void {
308
330
  if (opts.json) {
309
331
  console.log(JSON.stringify(result, null, 2));
310
332
  } else {
311
- console.log(`\nAgreement tree created.`);
312
- console.log(` Root: #${result.rootAgreementId}`);
313
- if (result.childAgreementIds.length > 0) {
314
- console.log(` Children: ${result.childAgreementIds.map((id) => "#" + id).join(", ")}`);
315
- } else {
316
- console.log(` Children: (none sub-agreements can be added with agreements-sub-register)`);
317
- }
333
+ console.log('\n ' + c.mark + c.white(' Agreement tree created'));
334
+ renderTree([
335
+ { label: 'Root', value: `#${result.rootAgreementId}` },
336
+ {
337
+ label: 'Children',
338
+ value: result.childAgreementIds.length > 0
339
+ ? result.childAgreementIds.map((id) => "#" + id).join(", ")
340
+ : "(none — sub-agreements can be added with agreements-sub-register)",
341
+ last: true,
342
+ },
343
+ ]);
318
344
  }
319
345
  });
320
346
 
@@ -2,6 +2,9 @@ import { Command } from "commander";
2
2
  import { DisputeArbitrationClient } from "@arc402/sdk";
3
3
  import { loadConfig } from "../config";
4
4
  import { getClient, requireSigner } from "../client";
5
+ import { c } from "../ui/colors";
6
+ import { startSpinner } from "../ui/spinner";
7
+ import { renderTree } from "../ui/tree";
5
8
 
6
9
  export function registerArbitratorCommand(program: Command): void {
7
10
  const arbitrator = program
@@ -23,16 +26,22 @@ export function registerArbitratorCommand(program: Command): void {
23
26
  const client = new DisputeArbitrationClient(config.disputeArbitrationAddress, provider);
24
27
 
25
28
  const eligible = await client.isEligibleArbitrator(arbitratorAddress);
26
- console.log(`Arbitrator ${arbitratorAddress} eligible: ${eligible}`);
29
+ console.log('\n ' + c.mark + c.white(' Arbitrator status'));
30
+ renderTree([
31
+ { label: 'Address', value: arbitratorAddress },
32
+ { label: 'Eligible', value: eligible ? 'yes' : 'no', last: !agreementId },
33
+ ]);
27
34
 
28
35
  if (agreementId) {
29
36
  const bondState = await client.getArbitratorBondState(arbitratorAddress, BigInt(agreementId));
30
- console.log(`Bond state for agreement ${agreementId}:`);
31
- console.log(` Amount: ${bondState.bondAmount.toString()} tokens`);
32
- console.log(` Locked: ${bondState.locked}`);
33
- console.log(` Slashed: ${bondState.slashed}`);
34
- console.log(` Returned: ${bondState.returned}`);
35
- console.log(` Locked at: ${new Date(Number(bondState.lockedAt) * 1000).toISOString()}`);
37
+ console.log('\n ' + c.mark + c.white(` Bond state agreement #${agreementId}`));
38
+ renderTree([
39
+ { label: 'Amount', value: `${bondState.bondAmount.toString()} tokens` },
40
+ { label: 'Locked', value: String(bondState.locked) },
41
+ { label: 'Slashed', value: String(bondState.slashed) },
42
+ { label: 'Returned', value: String(bondState.returned) },
43
+ { label: 'Locked at', value: new Date(Number(bondState.lockedAt) * 1000).toISOString(), last: true },
44
+ ]);
36
45
  }
37
46
  });
38
47
 
@@ -48,11 +57,18 @@ export function registerArbitratorCommand(program: Command): void {
48
57
 
49
58
  const bondAmount = BigInt(opts.bond);
50
59
  if (bondAmount === 0n) {
51
- console.warn("Warning: bond amount is 0. For ERC-20 agreements, pre-approve the DisputeArbitration contract.");
60
+ console.warn(' ' + c.warning + c.white(' Bond amount is 0. For ERC-20 agreements, pre-approve the DisputeArbitration contract.'));
52
61
  }
53
62
 
54
- await client.acceptAssignment(BigInt(agreementId), bondAmount);
55
- console.log(`accepted assignment for agreement ${agreementId}`);
63
+ const spinner = startSpinner("Submitting transaction...");
64
+ try {
65
+ await client.acceptAssignment(BigInt(agreementId), bondAmount);
66
+ spinner.succeed();
67
+ } catch (err) {
68
+ spinner.fail();
69
+ throw err;
70
+ }
71
+ console.log(' ' + c.success + c.white(` Assignment accepted — agreement #${agreementId}`));
56
72
  });
57
73
 
58
74
  bond