arc402-cli 0.9.19 → 0.10.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/README.md +41 -2
- package/dist/abis.d.ts +1 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +45 -14
- package/dist/abis.js.map +1 -1
- package/dist/bundler.d.ts +1 -1
- package/dist/bundler.d.ts.map +1 -1
- package/dist/bundler.js +61 -27
- package/dist/bundler.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -5
- package/dist/client.js.map +1 -1
- package/dist/coinbase-smart-wallet.js +4 -1
- package/dist/coinbase-smart-wallet.js.map +1 -1
- package/dist/commands/accept.js +28 -25
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/agent-handshake.js +18 -15
- package/dist/commands/agent-handshake.js.map +1 -1
- package/dist/commands/agent.js +104 -98
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/agreements.js +98 -62
- package/dist/commands/agreements.js.map +1 -1
- package/dist/commands/arbitrator.js +81 -45
- package/dist/commands/arbitrator.js.map +1 -1
- package/dist/commands/arena-handshake.d.ts.map +1 -1
- package/dist/commands/arena-handshake.js +35 -53
- package/dist/commands/arena-handshake.js.map +1 -1
- package/dist/commands/arena.js +18 -12
- package/dist/commands/arena.js.map +1 -1
- package/dist/commands/backup.js +36 -30
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cancel.js +18 -15
- package/dist/commands/cancel.js.map +1 -1
- package/dist/commands/channel.js +81 -45
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/coldstart.js +34 -31
- package/dist/commands/coldstart.js.map +1 -1
- package/dist/commands/compute.d.ts +14 -0
- package/dist/commands/compute.d.ts.map +1 -0
- package/dist/commands/compute.js +466 -0
- package/dist/commands/compute.js.map +1 -0
- package/dist/commands/config.js +30 -24
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contract-interaction.js +15 -12
- package/dist/commands/contract-interaction.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +135 -98
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/deliver.js +76 -37
- package/dist/commands/deliver.js.map +1 -1
- package/dist/commands/discover.js +27 -24
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/dispute.js +110 -104
- package/dist/commands/dispute.js.map +1 -1
- package/dist/commands/doctor.js +55 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/endpoint.js +95 -56
- package/dist/commands/endpoint.js.map +1 -1
- package/dist/commands/feed.js +18 -11
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/hire.js +40 -37
- package/dist/commands/hire.js.map +1 -1
- package/dist/commands/migrate.js +33 -30
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/negotiate.d.ts.map +1 -1
- package/dist/commands/negotiate.js +36 -34
- package/dist/commands/negotiate.js.map +1 -1
- package/dist/commands/openshell.js +104 -68
- package/dist/commands/openshell.js.map +1 -1
- package/dist/commands/owner.js +20 -17
- package/dist/commands/owner.js.map +1 -1
- package/dist/commands/policy.js +43 -41
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/relay.d.ts.map +1 -1
- package/dist/commands/relay.js +51 -18
- package/dist/commands/relay.js.map +1 -1
- package/dist/commands/remediate.js +23 -20
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/reputation.js +27 -25
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/setup.js +104 -65
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/trust.js +20 -17
- package/dist/commands/trust.js.map +1 -1
- package/dist/commands/verify.js +21 -18
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +645 -679
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/watch.js +36 -33
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/watchtower.js +73 -37
- package/dist/commands/watchtower.js.map +1 -1
- package/dist/commands/workroom.d.ts.map +1 -1
- package/dist/commands/workroom.js +282 -143
- package/dist/commands/workroom.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +71 -22
- package/dist/config.js.map +1 -1
- package/dist/daemon/compute-metering.d.ts +61 -0
- package/dist/daemon/compute-metering.d.ts.map +1 -0
- package/dist/daemon/compute-metering.js +299 -0
- package/dist/daemon/compute-metering.js.map +1 -0
- package/dist/daemon/compute-session.d.ts +100 -0
- package/dist/daemon/compute-session.d.ts.map +1 -0
- package/dist/daemon/compute-session.js +231 -0
- package/dist/daemon/compute-session.js.map +1 -0
- package/dist/daemon/config.d.ts +19 -1
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +90 -16
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/credentials.d.ts +24 -0
- package/dist/daemon/credentials.d.ts.map +1 -0
- package/dist/daemon/credentials.js +80 -0
- package/dist/daemon/credentials.js.map +1 -0
- package/dist/daemon/delivery-client.d.ts +35 -0
- package/dist/daemon/delivery-client.d.ts.map +1 -0
- package/dist/daemon/delivery-client.js +231 -0
- package/dist/daemon/delivery-client.js.map +1 -0
- package/dist/daemon/file-delivery.d.ts +98 -0
- package/dist/daemon/file-delivery.d.ts.map +1 -0
- package/dist/daemon/file-delivery.js +461 -0
- package/dist/daemon/file-delivery.js.map +1 -0
- package/dist/daemon/hire-listener.d.ts +3 -3
- package/dist/daemon/hire-listener.d.ts.map +1 -1
- package/dist/daemon/hire-listener.js +47 -13
- package/dist/daemon/hire-listener.js.map +1 -1
- package/dist/daemon/index.d.ts +2 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +526 -53
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/job-lifecycle.d.ts +1 -1
- package/dist/daemon/job-lifecycle.d.ts.map +1 -1
- package/dist/daemon/job-lifecycle.js +51 -11
- package/dist/daemon/job-lifecycle.js.map +1 -1
- package/dist/daemon/notify.d.ts +1 -1
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +53 -19
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/token-metering.js +47 -8
- package/dist/daemon/token-metering.js.map +1 -1
- package/dist/daemon/userops.d.ts +2 -2
- package/dist/daemon/userops.d.ts.map +1 -1
- package/dist/daemon/userops.js +27 -23
- package/dist/daemon/userops.js.map +1 -1
- package/dist/daemon/wallet-monitor.d.ts +1 -1
- package/dist/daemon/wallet-monitor.d.ts.map +1 -1
- package/dist/daemon/wallet-monitor.js +12 -8
- package/dist/daemon/wallet-monitor.js.map +1 -1
- package/dist/daemon/worker-executor.d.ts +71 -0
- package/dist/daemon/worker-executor.d.ts.map +1 -0
- package/dist/daemon/worker-executor.js +382 -0
- package/dist/daemon/worker-executor.js.map +1 -0
- package/dist/drain-v4.js +64 -26
- package/dist/drain-v4.js.map +1 -1
- package/dist/endpoint-config.js +63 -20
- package/dist/endpoint-config.js.map +1 -1
- package/dist/endpoint-notify.d.ts.map +1 -1
- package/dist/endpoint-notify.js +49 -15
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/index.js +50 -18
- package/dist/index.js.map +1 -1
- package/dist/openshell-runtime.d.ts.map +1 -1
- package/dist/openshell-runtime.js +82 -38
- package/dist/openshell-runtime.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +85 -78
- package/dist/program.js.map +1 -1
- package/dist/repl.js +31 -25
- package/dist/repl.js.map +1 -1
- package/dist/signing.js +6 -3
- package/dist/signing.js.map +1 -1
- package/dist/telegram-notify.js +40 -3
- package/dist/telegram-notify.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +56 -89
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Footer.js +7 -4
- package/dist/tui/Footer.js.map +1 -1
- package/dist/tui/Header.d.ts +1 -1
- package/dist/tui/Header.d.ts.map +1 -1
- package/dist/tui/Header.js +14 -9
- package/dist/tui/Header.js.map +1 -1
- package/dist/tui/InputLine.d.ts +2 -1
- package/dist/tui/InputLine.d.ts.map +1 -1
- package/dist/tui/InputLine.js +47 -97
- package/dist/tui/InputLine.js.map +1 -1
- package/dist/tui/Viewport.d.ts +1 -2
- package/dist/tui/Viewport.d.ts.map +1 -1
- package/dist/tui/Viewport.js +26 -6
- package/dist/tui/Viewport.js.map +1 -1
- package/dist/tui/WalletConnectPairing.js +19 -16
- package/dist/tui/WalletConnectPairing.js.map +1 -1
- package/dist/tui/components/Button.js +9 -6
- package/dist/tui/components/Button.js.map +1 -1
- package/dist/tui/components/CeremonyView.js +8 -5
- package/dist/tui/components/CeremonyView.js.map +1 -1
- package/dist/tui/components/CompletionDropdown.js +9 -6
- package/dist/tui/components/CompletionDropdown.js.map +1 -1
- package/dist/tui/components/ConfirmPrompt.js +8 -5
- package/dist/tui/components/ConfirmPrompt.js.map +1 -1
- package/dist/tui/components/CustomTextInput.js +14 -11
- package/dist/tui/components/CustomTextInput.js.map +1 -1
- package/dist/tui/components/InteractiveTable.js +12 -9
- package/dist/tui/components/InteractiveTable.js.map +1 -1
- package/dist/tui/components/StepSpinner.js +13 -10
- package/dist/tui/components/StepSpinner.js.map +1 -1
- package/dist/tui/components/Toast.js +12 -8
- package/dist/tui/components/Toast.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +21 -28
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/useChat.js +19 -13
- package/dist/tui/useChat.js.map +1 -1
- package/dist/tui/useCommand.d.ts +2 -3
- package/dist/tui/useCommand.d.ts.map +1 -1
- package/dist/tui/useCommand.js +24 -100
- package/dist/tui/useCommand.js.map +1 -1
- package/dist/tui/useNotifications.js +8 -5
- package/dist/tui/useNotifications.js.map +1 -1
- package/dist/tui/useScroll.d.ts.map +1 -1
- package/dist/tui/useScroll.js +12 -15
- package/dist/tui/useScroll.js.map +1 -1
- package/dist/ui/banner.d.ts +0 -12
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +19 -35
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/colors.js +19 -13
- package/dist/ui/colors.js.map +1 -1
- package/dist/ui/format.js +14 -6
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/qr-render.js +11 -4
- package/dist/ui/qr-render.js.map +1 -1
- package/dist/ui/rpc-fallback.js +11 -6
- package/dist/ui/rpc-fallback.js.map +1 -1
- package/dist/ui/spinner.js +12 -6
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/tree.js +6 -3
- package/dist/ui/tree.js.map +1 -1
- package/dist/utils/format.js +41 -27
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/hash.js +42 -4
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/time.js +6 -2
- package/dist/utils/time.js.map +1 -1
- package/dist/wallet-router.d.ts +1 -1
- package/dist/wallet-router.d.ts.map +1 -1
- package/dist/wallet-router.js +19 -12
- package/dist/wallet-router.js.map +1 -1
- package/dist/walletconnect-session.d.ts +1 -1
- package/dist/walletconnect-session.d.ts.map +1 -1
- package/dist/walletconnect-session.js +11 -6
- package/dist/walletconnect-session.js.map +1 -1
- package/dist/walletconnect.d.ts +5 -6
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +35 -32
- package/dist/walletconnect.js.map +1 -1
- package/package.json +11 -10
- package/INK6-UX-SPEC.md +0 -446
- package/MIGRATION-SPEC.md +0 -108
- package/TUI-SPEC.md +0 -214
- package/scripts/authorize-machine-key.ts +0 -43
- package/scripts/drain-wallet.ts +0 -149
- package/scripts/execute-spend-only.ts +0 -81
- package/scripts/register-agent-userop.ts +0 -186
- package/src/abis.ts +0 -187
- package/src/bundler.ts +0 -235
- package/src/client.ts +0 -36
- package/src/coinbase-smart-wallet.ts +0 -51
- package/src/commands/accept.ts +0 -64
- package/src/commands/agent-handshake.ts +0 -72
- package/src/commands/agent.ts +0 -691
- package/src/commands/agreements.ts +0 -350
- package/src/commands/arbitrator.ts +0 -180
- package/src/commands/arena-handshake.ts +0 -274
- package/src/commands/arena.ts +0 -122
- package/src/commands/backup.ts +0 -117
- package/src/commands/cancel.ts +0 -35
- package/src/commands/channel.ts +0 -218
- package/src/commands/coldstart.ts +0 -165
- package/src/commands/config.ts +0 -68
- package/src/commands/contract-interaction.ts +0 -166
- package/src/commands/daemon.ts +0 -1054
- package/src/commands/deliver.ts +0 -148
- package/src/commands/discover.ts +0 -350
- package/src/commands/dispute.ts +0 -375
- package/src/commands/doctor.ts +0 -172
- package/src/commands/endpoint.ts +0 -620
- package/src/commands/feed.ts +0 -229
- package/src/commands/hire.ts +0 -245
- package/src/commands/migrate.ts +0 -177
- package/src/commands/negotiate.ts +0 -272
- package/src/commands/openshell.ts +0 -1055
- package/src/commands/owner.ts +0 -35
- package/src/commands/policy.ts +0 -263
- package/src/commands/relay.ts +0 -277
- package/src/commands/remediate.ts +0 -24
- package/src/commands/reputation.ts +0 -79
- package/src/commands/setup.ts +0 -343
- package/src/commands/trust.ts +0 -27
- package/src/commands/verify.ts +0 -91
- package/src/commands/wallet.ts +0 -3548
- package/src/commands/watch.ts +0 -220
- package/src/commands/watchtower.ts +0 -248
- package/src/commands/workroom.ts +0 -963
- package/src/config.ts +0 -220
- package/src/daemon/config.ts +0 -344
- package/src/daemon/hire-listener.ts +0 -226
- package/src/daemon/index.ts +0 -1089
- package/src/daemon/job-lifecycle.ts +0 -215
- package/src/daemon/notify.ts +0 -297
- package/src/daemon/token-metering.ts +0 -183
- package/src/daemon/userops.ts +0 -119
- package/src/daemon/wallet-monitor.ts +0 -90
- package/src/drain-v4.ts +0 -159
- package/src/endpoint-config.ts +0 -83
- package/src/endpoint-notify.ts +0 -134
- package/src/index.ts +0 -74
- package/src/openshell-runtime.ts +0 -281
- package/src/program.ts +0 -88
- package/src/repl.ts +0 -178
- package/src/signing.ts +0 -28
- package/src/telegram-notify.ts +0 -88
- package/src/tui/App.tsx +0 -263
- package/src/tui/Footer.tsx +0 -18
- package/src/tui/Header.tsx +0 -45
- package/src/tui/InputLine.tsx +0 -243
- package/src/tui/Viewport.tsx +0 -51
- package/src/tui/WalletConnectPairing.tsx +0 -114
- package/src/tui/components/Button.tsx +0 -38
- package/src/tui/components/CeremonyView.tsx +0 -39
- package/src/tui/components/CompletionDropdown.tsx +0 -56
- package/src/tui/components/ConfirmPrompt.tsx +0 -36
- package/src/tui/components/CustomTextInput.tsx +0 -132
- package/src/tui/components/InteractiveTable.tsx +0 -106
- package/src/tui/components/StepSpinner.tsx +0 -84
- package/src/tui/components/Toast.tsx +0 -59
- package/src/tui/index.tsx +0 -90
- package/src/tui/useChat.ts +0 -103
- package/src/tui/useCommand.ts +0 -238
- package/src/tui/useNotifications.ts +0 -28
- package/src/tui/useScroll.ts +0 -69
- package/src/ui/banner.ts +0 -78
- package/src/ui/colors.ts +0 -30
- package/src/ui/format.ts +0 -78
- package/src/ui/qr-render.ts +0 -92
- package/src/ui/rpc-fallback.ts +0 -59
- package/src/ui/spinner.ts +0 -56
- package/src/ui/tree.ts +0 -16
- package/src/utils/format.ts +0 -48
- package/src/utils/hash.ts +0 -5
- package/src/utils/time.ts +0 -15
- package/src/wallet-router.ts +0 -178
- package/src/walletconnect-session.ts +0 -27
- package/src/walletconnect.ts +0 -309
- package/test/time.test.js +0 -11
- package/tsconfig.json +0 -33
|
@@ -1,33 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerHandshakeCommand = registerHandshakeCommand;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const client_1 = require("../client");
|
|
7
|
+
const colors_1 = require("../ui/colors");
|
|
8
|
+
const tree_1 = require("../ui/tree");
|
|
6
9
|
// Challenge-response: both agents sign a shared nonce with their agent key
|
|
7
10
|
// and verify each other against AgentRegistry
|
|
8
11
|
const AGENT_REGISTRY_ABI = [
|
|
9
12
|
"function isRegistered(address wallet) view returns (bool)",
|
|
10
13
|
"function getAgent(address wallet) view returns (tuple(address wallet, string endpoint, string serviceType, bool active, uint256 registeredAt))",
|
|
11
14
|
];
|
|
12
|
-
|
|
15
|
+
function registerHandshakeCommand(program) {
|
|
13
16
|
program
|
|
14
17
|
.command("handshake <agentAddress>")
|
|
15
18
|
.description("Mutual challenge-response authentication with another ARC-402 agent. Verifies both parties are registered before any negotiation begins.")
|
|
16
19
|
.option("--json", "Output as machine-parseable JSON")
|
|
17
20
|
.action(async (agentAddress, opts) => {
|
|
18
|
-
const config = loadConfig();
|
|
19
|
-
const { signer, provider } = await requireSigner(config);
|
|
21
|
+
const config = (0, config_1.loadConfig)();
|
|
22
|
+
const { signer, provider } = await (0, client_1.requireSigner)(config);
|
|
20
23
|
const myAddress = await signer.getAddress();
|
|
21
24
|
// Generate shared challenge nonce
|
|
22
|
-
const challengeNonce = ethers.hexlify(ethers.randomBytes(32));
|
|
25
|
+
const challengeNonce = ethers_1.ethers.hexlify(ethers_1.ethers.randomBytes(32));
|
|
23
26
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
24
27
|
// Sign: keccak256(HANDSHAKE + myAddress + theirAddress + challengeNonce + timestamp)
|
|
25
|
-
const digest = ethers.solidityPackedKeccak256(["string", "address", "address", "bytes32", "uint256"], ["HANDSHAKE", myAddress, agentAddress, challengeNonce, timestamp]);
|
|
26
|
-
const mySig = await signer.signMessage(ethers.getBytes(digest));
|
|
28
|
+
const digest = ethers_1.ethers.solidityPackedKeccak256(["string", "address", "address", "bytes32", "uint256"], ["HANDSHAKE", myAddress, agentAddress, challengeNonce, timestamp]);
|
|
29
|
+
const mySig = await signer.signMessage(ethers_1.ethers.getBytes(digest));
|
|
27
30
|
// Fetch their endpoint from AgentRegistry to send challenge
|
|
28
31
|
if (!config.agentRegistryAddress)
|
|
29
32
|
throw new Error("agentRegistryAddress not configured");
|
|
30
|
-
const registry = new ethers.Contract(config.agentRegistryAddress, AGENT_REGISTRY_ABI, provider);
|
|
33
|
+
const registry = new ethers_1.ethers.Contract(config.agentRegistryAddress, AGENT_REGISTRY_ABI, provider);
|
|
31
34
|
const myRegistered = await registry.isRegistered(myAddress);
|
|
32
35
|
if (!myRegistered)
|
|
33
36
|
throw new Error(`Your wallet ${myAddress} is not registered in AgentRegistry`);
|
|
@@ -49,13 +52,13 @@ export function registerHandshakeCommand(program) {
|
|
|
49
52
|
console.log(JSON.stringify(challenge));
|
|
50
53
|
}
|
|
51
54
|
else {
|
|
52
|
-
console.log('\n ' + c.mark + c.white(' Handshake'));
|
|
53
|
-
renderTree([
|
|
55
|
+
console.log('\n ' + colors_1.c.mark + colors_1.c.white(' Handshake'));
|
|
56
|
+
(0, tree_1.renderTree)([
|
|
54
57
|
{ label: 'Your identity', value: `${myAddress} (registered)` },
|
|
55
58
|
{ label: 'Their identity', value: `${agentAddress} (registered, active)` },
|
|
56
59
|
{ label: 'Their endpoint', value: theirAgent.endpoint, last: true },
|
|
57
60
|
]);
|
|
58
|
-
console.log('\n ' + c.dim('Signed challenge (send to their endpoint to complete handshake):'));
|
|
61
|
+
console.log('\n ' + colors_1.c.dim('Signed challenge (send to their endpoint to complete handshake):'));
|
|
59
62
|
console.log(JSON.stringify(challenge, null, 2));
|
|
60
63
|
}
|
|
61
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-handshake.js","sourceRoot":"","sources":["../../src/commands/agent-handshake.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-handshake.js","sourceRoot":"","sources":["../../src/commands/agent-handshake.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/agent.js
CHANGED
|
@@ -1,27 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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.registerAgentCommands = registerAgentCommands;
|
|
7
|
+
const sdk_1 = require("@arc402/sdk");
|
|
8
|
+
const sdk_2 = require("@arc402/sdk");
|
|
9
|
+
const ethers_1 = require("ethers");
|
|
10
|
+
const config_1 = require("../config");
|
|
11
|
+
const client_1 = require("../client");
|
|
12
|
+
const format_1 = require("../utils/format");
|
|
13
|
+
const abis_1 = require("../abis");
|
|
14
|
+
const wallet_router_1 = require("../wallet-router");
|
|
15
|
+
const client_2 = require("../client");
|
|
16
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
17
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
+
const spinner_1 = require("../ui/spinner");
|
|
19
|
+
const tree_1 = require("../ui/tree");
|
|
14
20
|
// ─── helpers ──────────────────────────────────────────────────────────────────
|
|
15
21
|
/** Resolve the real AgentRegistry address (agentRegistryV2Address > NETWORK_DEFAULTS fallback). */
|
|
16
22
|
function getAgentRegistryAddress(config) {
|
|
17
23
|
const addr = config.agentRegistryV2Address ??
|
|
18
|
-
NETWORK_DEFAULTS[config.network]?.agentRegistryV2Address;
|
|
24
|
+
config_1.NETWORK_DEFAULTS[config.network]?.agentRegistryV2Address;
|
|
19
25
|
if (!addr)
|
|
20
26
|
throw new Error("agentRegistryV2Address missing in config — run `arc402 config set agentRegistryV2Address <address>`");
|
|
21
27
|
return addr;
|
|
22
28
|
}
|
|
23
29
|
// ─── commands ─────────────────────────────────────────────────────────────────
|
|
24
|
-
|
|
30
|
+
function registerAgentCommands(program) {
|
|
25
31
|
const agent = program
|
|
26
32
|
.command("agent")
|
|
27
33
|
.description("Agent registry operations");
|
|
@@ -37,7 +43,7 @@ export function registerAgentCommands(program) {
|
|
|
37
43
|
.option("--claim-subdomain <subdomain>", "Claim a <subdomain>.arc402.xyz after registration (launch default: host-managed public ingress outside the sandbox)")
|
|
38
44
|
.option("--tunnel-target <url>", "Host ingress target URL for the claimed subdomain (required with --claim-subdomain)")
|
|
39
45
|
.action(async (opts) => {
|
|
40
|
-
const config = loadConfig();
|
|
46
|
+
const config = (0, config_1.loadConfig)();
|
|
41
47
|
const registryAddress = getAgentRegistryAddress(config);
|
|
42
48
|
let metadataUri = opts.metadataUri ?? "";
|
|
43
49
|
if (opts.setMetadata) {
|
|
@@ -47,16 +53,16 @@ export function registerAgentCommands(program) {
|
|
|
47
53
|
? opts.capability.split(",").map((v) => v.trim())
|
|
48
54
|
: [];
|
|
49
55
|
if (opts.endpoint) {
|
|
50
|
-
console.log(
|
|
51
|
-
console.log(
|
|
56
|
+
console.log(chalk_1.default.dim(`ℹ Registering public endpoint: ${opts.endpoint}`));
|
|
57
|
+
console.log(chalk_1.default.dim(" This publishes discovery / ingress metadata only. Sandbox outbound access remains controlled separately by OpenShell policy."));
|
|
52
58
|
}
|
|
53
59
|
if (config.walletContractAddress) {
|
|
54
60
|
// ── wallet contract path (machine key signs, wallet is msg.sender) ──
|
|
55
61
|
// Pre-flight: check machine key is authorized (J5-03)
|
|
56
62
|
if (config.privateKey) {
|
|
57
|
-
const machineKeyAddr = new ethers.Wallet(config.privateKey).address;
|
|
58
|
-
const { provider: agentProvider } = await getClient(config);
|
|
59
|
-
const mkCheck = new ethers.Contract(config.walletContractAddress, ["function authorizedMachineKeys(address) external view returns (bool)"], agentProvider);
|
|
63
|
+
const machineKeyAddr = new ethers_1.ethers.Wallet(config.privateKey).address;
|
|
64
|
+
const { provider: agentProvider } = await (0, client_2.getClient)(config);
|
|
65
|
+
const mkCheck = new ethers_1.ethers.Contract(config.walletContractAddress, ["function authorizedMachineKeys(address) external view returns (bool)"], agentProvider);
|
|
60
66
|
let isAuthorized = true;
|
|
61
67
|
try {
|
|
62
68
|
isAuthorized = await mkCheck.authorizedMachineKeys(machineKeyAddr);
|
|
@@ -69,18 +75,18 @@ export function registerAgentCommands(program) {
|
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
console.log(`Registering via ARC402Wallet: ${config.walletContractAddress}`);
|
|
72
|
-
const { signer, provider: regProvider } = await requireSigner(config);
|
|
78
|
+
const { signer, provider: regProvider } = await (0, client_1.requireSigner)(config);
|
|
73
79
|
{
|
|
74
80
|
const walletBalance = await regProvider.getBalance(config.walletContractAddress);
|
|
75
|
-
if (walletBalance < ethers.parseEther("0.0001")) {
|
|
76
|
-
console.warn(
|
|
81
|
+
if (walletBalance < ethers_1.ethers.parseEther("0.0001")) {
|
|
82
|
+
console.warn(chalk_1.default.yellow(`⚠️ Low wallet balance: ${ethers_1.ethers.formatEther(walletBalance)} ETH. Registration may fail due to insufficient gas. Fund your wallet with at least 0.0001 ETH first.`));
|
|
77
83
|
}
|
|
78
84
|
}
|
|
79
|
-
const regSpinner = startSpinner("Registering agent...");
|
|
80
|
-
const tx = await executeContractWriteViaWallet(config.walletContractAddress, signer, registryAddress, AGENT_REGISTRY_ABI, "register", [opts.name, capabilities, opts.serviceType, opts.endpoint ?? "", metadataUri]);
|
|
85
|
+
const regSpinner = (0, spinner_1.startSpinner)("Registering agent...");
|
|
86
|
+
const tx = await (0, wallet_router_1.executeContractWriteViaWallet)(config.walletContractAddress, signer, registryAddress, abis_1.AGENT_REGISTRY_ABI, "register", [opts.name, capabilities, opts.serviceType, opts.endpoint ?? "", metadataUri]);
|
|
81
87
|
const receipt = await tx.wait();
|
|
82
88
|
regSpinner.succeed("Registered in AgentRegistry");
|
|
83
|
-
renderTree([
|
|
89
|
+
(0, tree_1.renderTree)([
|
|
84
90
|
{ label: "Wallet", value: config.walletContractAddress },
|
|
85
91
|
{ label: "Tx", value: receipt?.hash ?? "", last: !metadataUri },
|
|
86
92
|
...(metadataUri ? [{ label: "Metadata", value: metadataUri, last: true }] : []),
|
|
@@ -88,29 +94,29 @@ export function registerAgentCommands(program) {
|
|
|
88
94
|
}
|
|
89
95
|
else {
|
|
90
96
|
// ── EOA fallback ──
|
|
91
|
-
console.warn(
|
|
92
|
-
const { signer, address: regAddress, provider: regProvider } = await requireSigner(config);
|
|
97
|
+
console.warn(chalk_1.default.yellow("⚠ No walletContractAddress in config — registering from EOA key (msg.sender = hot key)."));
|
|
98
|
+
const { signer, address: regAddress, provider: regProvider } = await (0, client_1.requireSigner)(config);
|
|
93
99
|
{
|
|
94
100
|
const walletBalance = await regProvider.getBalance(regAddress);
|
|
95
|
-
if (walletBalance < ethers.parseEther("0.0001")) {
|
|
96
|
-
console.warn(
|
|
101
|
+
if (walletBalance < ethers_1.ethers.parseEther("0.0001")) {
|
|
102
|
+
console.warn(chalk_1.default.yellow(`⚠️ Low wallet balance: ${ethers_1.ethers.formatEther(walletBalance)} ETH. Registration may fail due to insufficient gas. Fund your wallet with at least 0.0001 ETH first.`));
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
100
|
-
const eoaSpinner = startSpinner("Registering agent...");
|
|
105
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
106
|
+
const eoaSpinner = (0, spinner_1.startSpinner)("Registering agent...");
|
|
101
107
|
await client.register({ name: opts.name, serviceType: opts.serviceType, capabilities, endpoint: opts.endpoint ?? "", metadataURI: metadataUri });
|
|
102
108
|
eoaSpinner.succeed("Registered in AgentRegistry");
|
|
103
109
|
if (metadataUri) {
|
|
104
|
-
renderTree([{ label: "Metadata", value: metadataUri, last: true }]);
|
|
110
|
+
(0, tree_1.renderTree)([{ label: "Metadata", value: metadataUri, last: true }]);
|
|
105
111
|
}
|
|
106
112
|
}
|
|
107
113
|
// ── optional subdomain claim ──────────────────────────────────────────
|
|
108
114
|
if (opts.claimSubdomain) {
|
|
109
115
|
if (!opts.tunnelTarget) {
|
|
110
|
-
console.error(
|
|
116
|
+
console.error(chalk_1.default.red("--tunnel-target <url> is required with --claim-subdomain"));
|
|
111
117
|
process.exit(1);
|
|
112
118
|
}
|
|
113
|
-
const walletAddress = config.walletContractAddress ?? new ethers.Wallet(config.privateKey).address;
|
|
119
|
+
const walletAddress = config.walletContractAddress ?? new ethers_1.ethers.Wallet(config.privateKey).address;
|
|
114
120
|
await claimSubdomain(opts.claimSubdomain, walletAddress, opts.tunnelTarget);
|
|
115
121
|
}
|
|
116
122
|
});
|
|
@@ -123,21 +129,21 @@ export function registerAgentCommands(program) {
|
|
|
123
129
|
.option("--endpoint <url>", "Endpoint", "")
|
|
124
130
|
.option("--metadata-uri <uri>", "Metadata URI", "")
|
|
125
131
|
.action(async (opts) => {
|
|
126
|
-
const config = loadConfig();
|
|
132
|
+
const config = (0, config_1.loadConfig)();
|
|
127
133
|
const registryAddress = getAgentRegistryAddress(config);
|
|
128
134
|
const capabilities = opts.capability
|
|
129
135
|
? opts.capability.split(",").map((v) => v.trim())
|
|
130
136
|
: [];
|
|
131
137
|
if (config.walletContractAddress) {
|
|
132
|
-
const { signer } = await requireSigner(config);
|
|
133
|
-
const tx = await executeContractWriteViaWallet(config.walletContractAddress, signer, registryAddress, AGENT_REGISTRY_ABI, "update", [opts.name, capabilities, opts.serviceType, opts.endpoint ?? "", opts.metadataUri ?? ""]);
|
|
138
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
139
|
+
const tx = await (0, wallet_router_1.executeContractWriteViaWallet)(config.walletContractAddress, signer, registryAddress, abis_1.AGENT_REGISTRY_ABI, "update", [opts.name, capabilities, opts.serviceType, opts.endpoint ?? "", opts.metadataUri ?? ""]);
|
|
134
140
|
const receipt = await tx.wait();
|
|
135
|
-
console.log(
|
|
141
|
+
console.log(chalk_1.default.green(`✓ Agent updated`));
|
|
136
142
|
console.log(` Tx: ${receipt?.hash}`);
|
|
137
143
|
}
|
|
138
144
|
else {
|
|
139
|
-
const { signer } = await requireSigner(config);
|
|
140
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
145
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
146
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
141
147
|
await client.update({ name: opts.name, serviceType: opts.serviceType, capabilities, endpoint: opts.endpoint, metadataURI: opts.metadataUri });
|
|
142
148
|
console.log("updated");
|
|
143
149
|
}
|
|
@@ -148,8 +154,8 @@ export function registerAgentCommands(program) {
|
|
|
148
154
|
.description("Claim <subdomain>.arc402.xyz for this wallet (wallet must be registered in AgentRegistry)")
|
|
149
155
|
.requiredOption("--tunnel-target <url>", "Tunnel target URL (must start with https://)")
|
|
150
156
|
.action(async (subdomain, opts) => {
|
|
151
|
-
const config = loadConfig();
|
|
152
|
-
const walletAddress = config.walletContractAddress ?? new ethers.Wallet(config.privateKey).address;
|
|
157
|
+
const config = (0, config_1.loadConfig)();
|
|
158
|
+
const walletAddress = config.walletContractAddress ?? new ethers_1.ethers.Wallet(config.privateKey).address;
|
|
153
159
|
await claimSubdomain(subdomain, walletAddress, opts.tunnelTarget);
|
|
154
160
|
});
|
|
155
161
|
// ─── transfer-subdomain ──────────────────────────────────────────────────────
|
|
@@ -161,10 +167,10 @@ export function registerAgentCommands(program) {
|
|
|
161
167
|
const normalized = subdomain.toLowerCase();
|
|
162
168
|
let newWallet;
|
|
163
169
|
try {
|
|
164
|
-
newWallet = ethers.getAddress(opts.newWallet);
|
|
170
|
+
newWallet = ethers_1.ethers.getAddress(opts.newWallet);
|
|
165
171
|
}
|
|
166
172
|
catch {
|
|
167
|
-
console.error(
|
|
173
|
+
console.error(chalk_1.default.red(`Invalid address: ${opts.newWallet}`));
|
|
168
174
|
process.exit(1);
|
|
169
175
|
}
|
|
170
176
|
console.log(`\nTransferring subdomain: ${normalized}.arc402.xyz`);
|
|
@@ -177,10 +183,10 @@ export function registerAgentCommands(program) {
|
|
|
177
183
|
});
|
|
178
184
|
const body = await res.json();
|
|
179
185
|
if (!res.ok) {
|
|
180
|
-
console.error(
|
|
186
|
+
console.error(chalk_1.default.red(`\n✗ Transfer failed (${res.status}): ${body["error"] ?? JSON.stringify(body)}`));
|
|
181
187
|
process.exit(1);
|
|
182
188
|
}
|
|
183
|
-
console.log(
|
|
189
|
+
console.log(chalk_1.default.green(`\n✓ Subdomain transferred: ${body["subdomain"]}`));
|
|
184
190
|
console.log(` New owner: ${body["newWalletAddress"]}`);
|
|
185
191
|
});
|
|
186
192
|
// ─── set-metadata ───────────────────────────────────────────────────────────
|
|
@@ -188,10 +194,10 @@ export function registerAgentCommands(program) {
|
|
|
188
194
|
.command("set-metadata")
|
|
189
195
|
.description("Interactively build and upload ARC-402 agent metadata, then update the registry")
|
|
190
196
|
.action(async () => {
|
|
191
|
-
const config = loadConfig();
|
|
197
|
+
const config = (0, config_1.loadConfig)();
|
|
192
198
|
const registryAddress = getAgentRegistryAddress(config);
|
|
193
|
-
const { signer, address } = await requireSigner(config);
|
|
194
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
199
|
+
const { signer, address } = await (0, client_1.requireSigner)(config);
|
|
200
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
195
201
|
// Resolve the on-chain identity (wallet contract or EOA)
|
|
196
202
|
const agentAddress = config.walletContractAddress ?? address;
|
|
197
203
|
let existingName = "";
|
|
@@ -216,15 +222,15 @@ export function registerAgentCommands(program) {
|
|
|
216
222
|
}
|
|
217
223
|
catch { /* not yet registered */ }
|
|
218
224
|
if (config.walletContractAddress) {
|
|
219
|
-
const tx = await executeContractWriteViaWallet(config.walletContractAddress, signer, registryAddress, AGENT_REGISTRY_ABI, "update", [name, existingCaps, serviceType, endpoint, uri]);
|
|
225
|
+
const tx = await (0, wallet_router_1.executeContractWriteViaWallet)(config.walletContractAddress, signer, registryAddress, abis_1.AGENT_REGISTRY_ABI, "update", [name, existingCaps, serviceType, endpoint, uri]);
|
|
220
226
|
const receipt = await tx.wait();
|
|
221
|
-
console.log(
|
|
227
|
+
console.log(chalk_1.default.green("✓ Metadata URI saved to registry"));
|
|
222
228
|
console.log(` ${uri}`);
|
|
223
229
|
console.log(` Tx: ${receipt?.hash}`);
|
|
224
230
|
}
|
|
225
231
|
else {
|
|
226
232
|
await client.update({ name, serviceType, capabilities: existingCaps, endpoint, metadataURI: uri });
|
|
227
|
-
console.log(
|
|
233
|
+
console.log(chalk_1.default.green("✓ Metadata URI saved to registry"));
|
|
228
234
|
console.log(` ${uri}`);
|
|
229
235
|
}
|
|
230
236
|
});
|
|
@@ -233,25 +239,25 @@ export function registerAgentCommands(program) {
|
|
|
233
239
|
.command("show-metadata <address>")
|
|
234
240
|
.description("Fetch and display metadata for any registered agent")
|
|
235
241
|
.action(async (address) => {
|
|
236
|
-
const config = loadConfig();
|
|
242
|
+
const config = (0, config_1.loadConfig)();
|
|
237
243
|
const registryAddress = getAgentRegistryAddress(config);
|
|
238
|
-
const { provider } = await getClient(config);
|
|
239
|
-
const client = new AgentRegistryClient(registryAddress, provider);
|
|
244
|
+
const { provider } = await (0, client_2.getClient)(config);
|
|
245
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, provider);
|
|
240
246
|
const info = await client.getAgent(address);
|
|
241
247
|
if (!info.metadataURI) {
|
|
242
|
-
console.log(
|
|
248
|
+
console.log(chalk_1.default.yellow("No metadata URI set for this agent."));
|
|
243
249
|
return;
|
|
244
250
|
}
|
|
245
|
-
console.log(
|
|
251
|
+
console.log(chalk_1.default.dim(`Fetching metadata from: ${info.metadataURI}\n`));
|
|
246
252
|
let meta;
|
|
247
253
|
try {
|
|
248
|
-
meta = await decodeMetadata(info.metadataURI);
|
|
254
|
+
meta = await (0, sdk_2.decodeMetadata)(info.metadataURI);
|
|
249
255
|
}
|
|
250
256
|
catch (err) {
|
|
251
|
-
console.error(
|
|
257
|
+
console.error(chalk_1.default.red(`Failed to fetch or parse metadata: ${err instanceof Error ? err.message : String(err)}`));
|
|
252
258
|
return;
|
|
253
259
|
}
|
|
254
|
-
console.log(
|
|
260
|
+
console.log(chalk_1.default.bold("Agent Metadata") + chalk_1.default.dim(` (${meta.schema})`));
|
|
255
261
|
if (meta.name)
|
|
256
262
|
console.log(` name: ${meta.name}`);
|
|
257
263
|
if (meta.description)
|
|
@@ -300,10 +306,10 @@ export function registerAgentCommands(program) {
|
|
|
300
306
|
.command("deactivate")
|
|
301
307
|
.description("Deactivate your agent registration (preserves history/trust)")
|
|
302
308
|
.action(async () => {
|
|
303
|
-
const config = loadConfig();
|
|
309
|
+
const config = (0, config_1.loadConfig)();
|
|
304
310
|
const registryAddress = getAgentRegistryAddress(config);
|
|
305
|
-
const { signer } = await requireSigner(config);
|
|
306
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
311
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
312
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
307
313
|
await client.deactivate();
|
|
308
314
|
console.log("agent deactivated");
|
|
309
315
|
});
|
|
@@ -311,10 +317,10 @@ export function registerAgentCommands(program) {
|
|
|
311
317
|
.command("reactivate")
|
|
312
318
|
.description("Reactivate your agent registration")
|
|
313
319
|
.action(async () => {
|
|
314
|
-
const config = loadConfig();
|
|
320
|
+
const config = (0, config_1.loadConfig)();
|
|
315
321
|
const registryAddress = getAgentRegistryAddress(config);
|
|
316
|
-
const { signer } = await requireSigner(config);
|
|
317
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
322
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
323
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
318
324
|
await client.reactivate();
|
|
319
325
|
console.log("agent reactivated");
|
|
320
326
|
});
|
|
@@ -324,10 +330,10 @@ export function registerAgentCommands(program) {
|
|
|
324
330
|
.description("Submit self-reported heartbeat data")
|
|
325
331
|
.option("--latency-ms <n>", "Observed latency", "0")
|
|
326
332
|
.action(async (opts) => {
|
|
327
|
-
const config = loadConfig();
|
|
333
|
+
const config = (0, config_1.loadConfig)();
|
|
328
334
|
const registryAddress = getAgentRegistryAddress(config);
|
|
329
|
-
const { signer } = await requireSigner(config);
|
|
330
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
335
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
336
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
331
337
|
await client.submitHeartbeat(Number(opts.latencyMs));
|
|
332
338
|
console.log("heartbeat submitted");
|
|
333
339
|
});
|
|
@@ -337,10 +343,10 @@ export function registerAgentCommands(program) {
|
|
|
337
343
|
.requiredOption("--interval <seconds>")
|
|
338
344
|
.requiredOption("--grace <seconds>")
|
|
339
345
|
.action(async (opts) => {
|
|
340
|
-
const config = loadConfig();
|
|
346
|
+
const config = (0, config_1.loadConfig)();
|
|
341
347
|
const registryAddress = getAgentRegistryAddress(config);
|
|
342
|
-
const { signer } = await requireSigner(config);
|
|
343
|
-
const client = new AgentRegistryClient(registryAddress, signer);
|
|
348
|
+
const { signer } = await (0, client_1.requireSigner)(config);
|
|
349
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, signer);
|
|
344
350
|
await client.setHeartbeatPolicy(Number(opts.interval), Number(opts.grace));
|
|
345
351
|
console.log("heartbeat policy updated");
|
|
346
352
|
});
|
|
@@ -349,10 +355,10 @@ export function registerAgentCommands(program) {
|
|
|
349
355
|
.command("info <address>")
|
|
350
356
|
.option("--json")
|
|
351
357
|
.action(async (address, opts) => {
|
|
352
|
-
const config = loadConfig();
|
|
358
|
+
const config = (0, config_1.loadConfig)();
|
|
353
359
|
const registryAddress = getAgentRegistryAddress(config);
|
|
354
|
-
const { provider } = await getClient(config);
|
|
355
|
-
const client = new AgentRegistryClient(registryAddress, provider);
|
|
360
|
+
const { provider } = await (0, client_2.getClient)(config);
|
|
361
|
+
const client = new sdk_1.AgentRegistryClient(registryAddress, provider);
|
|
356
362
|
const [info, ops] = await Promise.all([
|
|
357
363
|
client.getAgent(address),
|
|
358
364
|
client.getOperationalMetrics(address),
|
|
@@ -367,13 +373,13 @@ export function registerAgentCommands(program) {
|
|
|
367
373
|
operational: Object.fromEntries(Object.entries(ops).map(([k, v]) => [k, Number(v)])),
|
|
368
374
|
}, null, 2));
|
|
369
375
|
}
|
|
370
|
-
console.log(`${info.name} ${info.wallet}\nservice=${info.serviceType}\ntrust=${Number(info.trustScore ?? 0n)} (${getTrustTier(Number(info.trustScore ?? 0n))})\nregistered=${formatDate(Number(info.registeredAt))}\nheartbeatCount=${Number(ops.heartbeatCount)} uptimeScore=${Number(ops.uptimeScore)} responseScore=${Number(ops.responseScore)}`);
|
|
376
|
+
console.log(`${info.name} ${info.wallet}\nservice=${info.serviceType}\ntrust=${Number(info.trustScore ?? 0n)} (${(0, format_1.getTrustTier)(Number(info.trustScore ?? 0n))})\nregistered=${(0, format_1.formatDate)(Number(info.registeredAt))}\nheartbeatCount=${Number(ops.heartbeatCount)} uptimeScore=${Number(ops.uptimeScore)} responseScore=${Number(ops.responseScore)}`);
|
|
371
377
|
});
|
|
372
378
|
agent
|
|
373
379
|
.command("me")
|
|
374
380
|
.action(async () => {
|
|
375
|
-
const config = loadConfig();
|
|
376
|
-
const address = config.walletContractAddress ?? (await getClient(config)).address;
|
|
381
|
+
const config = (0, config_1.loadConfig)();
|
|
382
|
+
const address = config.walletContractAddress ?? (await (0, client_2.getClient)(config)).address;
|
|
377
383
|
if (!address)
|
|
378
384
|
throw new Error("No wallet configured");
|
|
379
385
|
await program.parseAsync([process.argv[0], process.argv[1], "agent", "info", address], { from: "user" });
|
|
@@ -417,7 +423,7 @@ export function registerAgentCommands(program) {
|
|
|
417
423
|
console.log(JSON.stringify({ error: "Agent not registered", address }));
|
|
418
424
|
}
|
|
419
425
|
else {
|
|
420
|
-
console.log(
|
|
426
|
+
console.log(chalk_1.default.red(`Agent not registered: ${address}`));
|
|
421
427
|
}
|
|
422
428
|
process.exit(1);
|
|
423
429
|
}
|
|
@@ -471,14 +477,14 @@ export function registerAgentCommands(program) {
|
|
|
471
477
|
const vouchedFor = data["vouchedFor"] ?? [];
|
|
472
478
|
const vouchedBy = data["vouchedBy"] ?? [];
|
|
473
479
|
const line = "═".repeat(43);
|
|
474
|
-
console.log(
|
|
475
|
-
console.log(` ${
|
|
480
|
+
console.log(chalk_1.default.bold(line));
|
|
481
|
+
console.log(` ${chalk_1.default.bold(agentData["name"] || "(unnamed)")}`);
|
|
476
482
|
console.log(` ${agentData["id"]}`);
|
|
477
|
-
console.log(
|
|
483
|
+
console.log(chalk_1.default.bold(line));
|
|
478
484
|
console.log();
|
|
479
485
|
console.log(` Service Type: ${agentData["serviceType"]}`);
|
|
480
|
-
console.log(` Endpoint: ${agentData["endpoint"] ||
|
|
481
|
-
console.log(` Status: ${agentData["active"] ?
|
|
486
|
+
console.log(` Endpoint: ${agentData["endpoint"] || chalk_1.default.dim("(none)")}`);
|
|
487
|
+
console.log(` Status: ${agentData["active"] ? chalk_1.default.green("✅ Active") : chalk_1.default.red("❌ Inactive")}`);
|
|
482
488
|
console.log(` Trust Score: ${trustScore}`);
|
|
483
489
|
console.log();
|
|
484
490
|
if (caps.length > 0) {
|
|
@@ -517,7 +523,7 @@ export function registerAgentCommands(program) {
|
|
|
517
523
|
console.log(JSON.stringify({ error: "Subgraph unavailable", details: msg }));
|
|
518
524
|
}
|
|
519
525
|
else {
|
|
520
|
-
console.error(
|
|
526
|
+
console.error(chalk_1.default.red(`Subgraph unavailable: ${msg}`));
|
|
521
527
|
}
|
|
522
528
|
process.exit(1);
|
|
523
529
|
}
|
|
@@ -558,15 +564,15 @@ async function claimSubdomain(subdomain, walletAddress, tunnelTarget) {
|
|
|
558
564
|
});
|
|
559
565
|
const body = await res.json();
|
|
560
566
|
if (!res.ok) {
|
|
561
|
-
console.error(
|
|
567
|
+
console.error(chalk_1.default.red(`✗ Subdomain claim failed (${res.status}): ${body["error"] ?? JSON.stringify(body)}`));
|
|
562
568
|
process.exit(1);
|
|
563
569
|
}
|
|
564
|
-
console.log(
|
|
570
|
+
console.log(chalk_1.default.green(`✓ Subdomain claimed: ${body["subdomain"]}`));
|
|
565
571
|
}
|
|
566
572
|
// ─── metadata wizard ──────────────────────────────────────────────────────────
|
|
567
573
|
async function runSetMetadataWizard(defaultName, defaultCapabilities) {
|
|
568
|
-
console.log(
|
|
569
|
-
const answers = await
|
|
574
|
+
console.log(chalk_1.default.bold("\nARC-402 Agent Metadata Wizard\n"));
|
|
575
|
+
const answers = await (0, prompts_1.default)([
|
|
570
576
|
{ type: "text", name: "name", message: "Agent name:", initial: defaultName },
|
|
571
577
|
{ type: "text", name: "description", message: "Short description (what does this agent do?):" },
|
|
572
578
|
{ type: "text", name: "capabilities", message: "Capabilities (comma-separated, e.g. legal.patent-analysis.us.v1):", initial: defaultCapabilities.join(", ") },
|
|
@@ -578,13 +584,13 @@ async function runSetMetadataWizard(defaultName, defaultCapabilities) {
|
|
|
578
584
|
{ type: "confirm", name: "envLeakProtection", message: "Does this agent have env/key leak protection in its instructions?", initial: false },
|
|
579
585
|
]);
|
|
580
586
|
if (!answers.name) {
|
|
581
|
-
console.log(
|
|
587
|
+
console.log(chalk_1.default.dim("Cancelled."));
|
|
582
588
|
return "";
|
|
583
589
|
}
|
|
584
590
|
const capabilities = answers.capabilities
|
|
585
591
|
? answers.capabilities.split(",").map((v) => v.trim()).filter(Boolean)
|
|
586
592
|
: [];
|
|
587
|
-
const meta = buildMetadata({
|
|
593
|
+
const meta = (0, sdk_2.buildMetadata)({
|
|
588
594
|
name: answers.name || undefined,
|
|
589
595
|
description: answers.description || undefined,
|
|
590
596
|
capabilities: capabilities.length ? capabilities : undefined,
|
|
@@ -601,14 +607,14 @@ async function runSetMetadataWizard(defaultName, defaultCapabilities) {
|
|
|
601
607
|
});
|
|
602
608
|
const pinataJwt = process.env["PINATA_JWT"];
|
|
603
609
|
if (!pinataJwt) {
|
|
604
|
-
console.log(
|
|
605
|
-
console.log(
|
|
610
|
+
console.log(chalk_1.default.dim("\nNo PINATA_JWT env var found — metadata will be stored as a data URI."));
|
|
611
|
+
console.log(chalk_1.default.dim("To pin to IPFS: export PINATA_JWT=<your-jwt> and re-run.\n"));
|
|
606
612
|
}
|
|
607
613
|
else {
|
|
608
|
-
console.log(
|
|
614
|
+
console.log(chalk_1.default.dim("\nUploading to IPFS via Pinata…"));
|
|
609
615
|
}
|
|
610
|
-
const uri = await uploadMetadata(meta, pinataJwt);
|
|
611
|
-
console.log(
|
|
616
|
+
const uri = await (0, sdk_2.uploadMetadata)(meta, pinataJwt);
|
|
617
|
+
console.log(chalk_1.default.green(`✓ Metadata URI: ${uri}`));
|
|
612
618
|
return uri;
|
|
613
619
|
}
|
|
614
620
|
//# sourceMappingURL=agent.js.map
|