arc402-cli 0.3.4 → 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.
- package/dist/commands/accept.d.ts.map +1 -1
- package/dist/commands/accept.js +17 -7
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/agent-handshake.d.ts.map +1 -1
- package/dist/commands/agent-handshake.js +9 -4
- package/dist/commands/agent-handshake.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +14 -8
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/agreements.d.ts.map +1 -1
- package/dist/commands/agreements.js +51 -26
- package/dist/commands/agreements.js.map +1 -1
- package/dist/commands/arbitrator.d.ts.map +1 -1
- package/dist/commands/arbitrator.js +15 -7
- package/dist/commands/arbitrator.js.map +1 -1
- package/dist/commands/arena-handshake.d.ts.map +1 -1
- package/dist/commands/arena-handshake.js +14 -11
- package/dist/commands/arena-handshake.js.map +1 -1
- package/dist/commands/channel.d.ts.map +1 -1
- package/dist/commands/channel.js +27 -17
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/coldstart.d.ts.map +1 -1
- package/dist/commands/coldstart.js +33 -22
- package/dist/commands/coldstart.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +33 -17
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +44 -37
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/endpoint.d.ts.map +1 -1
- package/dist/commands/endpoint.js +4 -3
- package/dist/commands/endpoint.js.map +1 -1
- package/dist/commands/feed.d.ts.map +1 -1
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/hire.d.ts.map +1 -1
- package/dist/commands/hire.js +3 -0
- package/dist/commands/hire.js.map +1 -1
- package/dist/commands/owner.d.ts.map +1 -1
- package/dist/commands/owner.js +5 -1
- package/dist/commands/owner.js.map +1 -1
- package/dist/commands/policy.d.ts.map +1 -1
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/relay.d.ts.map +1 -1
- package/dist/commands/relay.js.map +1 -1
- package/dist/commands/remediate.d.ts.map +1 -1
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/reputation.d.ts.map +1 -1
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/trust.d.ts.map +1 -1
- package/dist/commands/trust.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +15 -5
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +23 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/watchtower.d.ts.map +1 -1
- package/dist/commands/watchtower.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -2
- package/dist/config.js.map +1 -1
- package/dist/index.js +73 -38
- package/dist/index.js.map +1 -1
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +4 -2
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/tree.d.ts +7 -0
- package/dist/ui/tree.d.ts.map +1 -0
- package/dist/ui/tree.js +13 -0
- package/dist/ui/tree.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/accept.ts +19 -10
- package/src/commands/agent-handshake.ts +9 -4
- package/src/commands/agent.ts +15 -6
- package/src/commands/agreements.ts +51 -25
- package/src/commands/arbitrator.ts +26 -10
- package/src/commands/arena-handshake.ts +15 -8
- package/src/commands/channel.ts +27 -17
- package/src/commands/coldstart.ts +29 -20
- package/src/commands/config.ts +33 -17
- package/src/commands/daemon.ts +45 -38
- package/src/commands/endpoint.ts +4 -3
- package/src/commands/feed.ts +1 -0
- package/src/commands/hire.ts +8 -0
- package/src/commands/owner.ts +5 -1
- package/src/commands/policy.ts +3 -0
- package/src/commands/relay.ts +1 -0
- package/src/commands/remediate.ts +2 -0
- package/src/commands/reputation.ts +4 -0
- package/src/commands/trust.ts +3 -0
- package/src/commands/verify.ts +2 -0
- package/src/commands/wallet.ts +15 -5
- package/src/commands/watch.ts +23 -0
- package/src/commands/watchtower.ts +4 -0
- package/src/config.ts +15 -2
- package/src/index.ts +43 -3
- package/src/ui/banner.ts +5 -2
- 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
|
-
|
|
51
|
-
|
|
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
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,
|
|
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
|
-
(
|
|
45
|
-
|
|
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
|
-
|
|
48
|
-
program
|
|
49
|
-
(
|
|
50
|
-
(0,
|
|
51
|
-
(0,
|
|
52
|
-
(0,
|
|
53
|
-
(0,
|
|
54
|
-
(0,
|
|
55
|
-
(0,
|
|
56
|
-
(0,
|
|
57
|
-
(0,
|
|
58
|
-
(0,
|
|
59
|
-
(0,
|
|
60
|
-
(0,
|
|
61
|
-
(0,
|
|
62
|
-
(0,
|
|
63
|
-
(0,
|
|
64
|
-
(0,
|
|
65
|
-
(0,
|
|
66
|
-
(0,
|
|
67
|
-
(0,
|
|
68
|
-
(0,
|
|
69
|
-
(0,
|
|
70
|
-
(0,
|
|
71
|
-
(0,
|
|
72
|
-
(0,
|
|
73
|
-
(0,
|
|
74
|
-
(0,
|
|
75
|
-
(0,
|
|
76
|
-
(0,
|
|
77
|
-
(0,
|
|
78
|
-
(0,
|
|
79
|
-
(0,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
program.
|
|
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":";;;;;;AACA,yCAAoC;AACpC,8CAA0D;AAC1D,4CAAyD;AACzD,sDAAmE;AACnE,sDAAkE;AAClE,8CAA0D;AAC1D,gDAA6D;AAC7D,8CAA2D;AAC3D,gDAA4D;AAC5D,kDAA8D;AAC9D,kDAA+D;AAC/D,gDAA4D;AAC5D,0CAAsD;AACtD,gEAAsE;AACtE,oDAAiE;AACjE,4CAAyD;AACzD,oDAAiE;AACjE,8CAA2D;AAC3D,oDAAiE;AACjE,kDAA+D;AAC/D,gEAA4E;AAC5E,4CAAwD;AACxD,8CAA2D;AAC3D,wCAA2C;AAC3C,4CAAyD;AACzD,4CAAyD;AACzD,8CAA0D;AAC1D,0EAAsF;AACtF,sDAAmE;AACnE,oDAAiE;AACjE,gDAA6D;AAC7D,0CAAsD;AACtD,4CAAyD;AACzD,6EAAkD;AAClD,qEAA0C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/banner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"
|
|
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(
|
|
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 '
|
|
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
|
package/dist/ui/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":";;;;;
|
|
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 @@
|
|
|
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"}
|
package/dist/ui/tree.js
ADDED
|
@@ -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
package/src/commands/accept.ts
CHANGED
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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(`
|
|
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(`
|
|
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(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
});
|
package/src/commands/agent.ts
CHANGED
|
@@ -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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
121
|
-
if (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(
|
|
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
|
-
|
|
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(
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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(
|
|
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(`
|
|
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(`
|
|
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(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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(
|
|
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
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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(
|
|
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
|
-
|
|
55
|
-
|
|
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
|