@agentsmarket/cli 0.1.0 → 0.5.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 (81) hide show
  1. package/README.md +1455 -44
  2. package/dist/commands/balance.js +3 -3
  3. package/dist/commands/call.d.ts +23 -1
  4. package/dist/commands/call.js +187 -45
  5. package/dist/commands/call.js.map +1 -1
  6. package/dist/commands/info.d.ts +6 -6
  7. package/dist/commands/info.js +33 -35
  8. package/dist/commands/info.js.map +1 -1
  9. package/dist/commands/init.d.ts +11 -7
  10. package/dist/commands/init.js +71 -42
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/install.js +2 -2
  13. package/dist/commands/mcp.js +9 -11
  14. package/dist/commands/mcp.js.map +1 -1
  15. package/dist/commands/pipeline/call.d.ts +18 -0
  16. package/dist/commands/pipeline/call.js +58 -0
  17. package/dist/commands/pipeline/call.js.map +1 -0
  18. package/dist/commands/pipeline/install.d.ts +7 -0
  19. package/dist/commands/pipeline/install.js +16 -0
  20. package/dist/commands/pipeline/install.js.map +1 -0
  21. package/dist/commands/pipeline/publish.d.ts +15 -0
  22. package/dist/commands/pipeline/publish.js +22 -0
  23. package/dist/commands/pipeline/publish.js.map +1 -0
  24. package/dist/commands/publish-openapi.d.ts +16 -0
  25. package/dist/commands/publish-openapi.js +61 -0
  26. package/dist/commands/publish-openapi.js.map +1 -0
  27. package/dist/commands/publish-pipeline.d.ts +15 -0
  28. package/dist/commands/publish-pipeline.js +141 -0
  29. package/dist/commands/publish-pipeline.js.map +1 -0
  30. package/dist/commands/publish.js +37 -42
  31. package/dist/commands/publish.js.map +1 -1
  32. package/dist/commands/refund.js +15 -17
  33. package/dist/commands/refund.js.map +1 -1
  34. package/dist/commands/register.js +6 -27
  35. package/dist/commands/register.js.map +1 -1
  36. package/dist/commands/run.d.ts +31 -0
  37. package/dist/commands/run.js +305 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/commands/scan.js +2 -5
  40. package/dist/commands/scan.js.map +1 -1
  41. package/dist/commands/search.js +1 -1
  42. package/dist/commands/skill/call.d.ts +12 -0
  43. package/dist/commands/skill/call.js +17 -0
  44. package/dist/commands/skill/call.js.map +1 -0
  45. package/dist/commands/skill/install.d.ts +7 -0
  46. package/dist/commands/skill/install.js +13 -0
  47. package/dist/commands/skill/install.js.map +1 -0
  48. package/dist/commands/skill/publish.d.ts +18 -0
  49. package/dist/commands/skill/publish.js +28 -0
  50. package/dist/commands/skill/publish.js.map +1 -0
  51. package/dist/commands/validate.d.ts +20 -0
  52. package/dist/commands/validate.js +91 -0
  53. package/dist/commands/validate.js.map +1 -0
  54. package/dist/index.d.ts +4 -6
  55. package/dist/index.js +90 -29
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/config.d.ts +12 -13
  58. package/dist/lib/config.js +27 -27
  59. package/dist/lib/config.js.map +1 -1
  60. package/dist/lib/http.d.ts +23 -8
  61. package/dist/lib/http.js +28 -48
  62. package/dist/lib/http.js.map +1 -1
  63. package/dist/lib/identity.d.ts +29 -0
  64. package/dist/lib/identity.js +57 -0
  65. package/dist/lib/identity.js.map +1 -0
  66. package/dist/lib/mcp-install.d.ts +36 -0
  67. package/dist/lib/mcp-install.js +149 -0
  68. package/dist/lib/mcp-install.js.map +1 -0
  69. package/dist/lib/pipeline-spec.d.ts +66 -0
  70. package/dist/lib/pipeline-spec.js +273 -0
  71. package/dist/lib/pipeline-spec.js.map +1 -0
  72. package/package.json +12 -4
  73. package/dist/lib/keys.d.ts +0 -69
  74. package/dist/lib/keys.js +0 -85
  75. package/dist/lib/keys.js.map +0 -1
  76. package/dist/lib/payment-keys.d.ts +0 -25
  77. package/dist/lib/payment-keys.js +0 -55
  78. package/dist/lib/payment-keys.js.map +0 -1
  79. package/dist/lib/payment.d.ts +0 -27
  80. package/dist/lib/payment.js +0 -123
  81. package/dist/lib/payment.js.map +0 -1
@@ -10,10 +10,10 @@ export async function balanceCommand() {
10
10
  process.exit(1);
11
11
  }
12
12
  const data = await authedJson('GET', `/v1/agents/${encodeURIComponent(config.agent_id)}/balance`);
13
- const usd = (data.balance_usdt / 1_000_000).toFixed(6);
13
+ const usd = (data.balance_usdc / 1_000_000).toFixed(6);
14
14
  console.log(`Agent: ${data.agent_id}`);
15
- console.log(`Balance: ${data.balance_usdt} micro-USDT ($${usd})`);
16
- if (data.balance_usdt === 0) {
15
+ console.log(`Balance: ${data.balance_usdc} micro-USDC ($${usd})`);
16
+ if (data.balance_usdc === 0) {
17
17
  console.log(`\n💡 To top up (testnet): POST /v1/agents/:agent_id/balance/topup`);
18
18
  }
19
19
  }
@@ -1 +1,23 @@
1
- export declare function callCommand(skillId: string, inputs?: Record<string, unknown>): Promise<void>;
1
+ /**
2
+ * `agentsmarket call <skill_id>` — invoke a skill.
3
+ *
4
+ * Payment is handled server-side: server checks buyer's USDC balance on-chain
5
+ * before allowing the call. No client-side signing of payment needed.
6
+ *
7
+ * Flags:
8
+ * --payment-tx-hash <hex> Real tx hash from MetaMask/Trust Wallet.
9
+ * --inputs <json> Pass as JSON string, e.g. '{"key":"value"}'
10
+ * --no-auto-sign Skip automatic Variant D signing on 402
11
+ * (default: load identity and auto-sign).
12
+ *
13
+ * On 402 with mode 'eip3009_variant_d', CLI auto-loads ~/.agentsmarket/identity,
14
+ * signs two ReceiveWithAuthorization payloads (author + treasury), computes
15
+ * shared_link, retries. Falls back to "manual payment" hint if identity absent.
16
+ */
17
+ export interface CallOptions {
18
+ skillId: string;
19
+ paymentTxHash: string | null;
20
+ inputsJson: string | null;
21
+ noAutoSign?: boolean;
22
+ }
23
+ export declare function callCommand(opts: CallOptions): Promise<void>;
@@ -1,64 +1,206 @@
1
1
  /**
2
2
  * `agentsmarket call <skill_id>` — invoke a skill.
3
3
  *
4
- * Phase 2: when payment.key exists, builds + signs real EIP-3009 authorization.
5
- * Otherwise falls back to mock payment_tx_hash (dev only).
4
+ * Payment is handled server-side: server checks buyer's USDC balance on-chain
5
+ * before allowing the call. No client-side signing of payment needed.
6
+ *
7
+ * Flags:
8
+ * --payment-tx-hash <hex> Real tx hash from MetaMask/Trust Wallet.
9
+ * --inputs <json> Pass as JSON string, e.g. '{"key":"value"}'
10
+ * --no-auto-sign Skip automatic Variant D signing on 402
11
+ * (default: load identity and auto-sign).
12
+ *
13
+ * On 402 with mode 'eip3009_variant_d', CLI auto-loads ~/.agentsmarket/identity,
14
+ * signs two ReceiveWithAuthorization payloads (author + treasury), computes
15
+ * shared_link, retries. Falls back to "manual payment" hint if identity absent.
6
16
  */
17
+ import { readFileSync, existsSync } from 'node:fs';
18
+ import { homedir } from 'node:os';
19
+ import { join } from 'node:path';
20
+ import crypto from 'node:crypto';
21
+ import { Wallet } from 'ethers';
22
+ import { keccak_256 } from '@noble/hashes/sha3.js';
7
23
  import { authedFetch, HttpError } from '../lib/http.js';
8
- import { paymentKeyExists, loadPaymentKeyPem } from '../lib/config.js';
9
- import { loadPaymentKey, buildAndSignAuthorization } from '../lib/payment.js';
10
- export async function callCommand(skillId, inputs = {}) {
24
+ function parseInputs(inputsJson) {
25
+ if (!inputsJson)
26
+ return {};
27
+ try {
28
+ const parsed = JSON.parse(inputsJson);
29
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
30
+ throw new Error('--inputs must be a JSON object');
31
+ }
32
+ return parsed;
33
+ }
34
+ catch (err) {
35
+ throw new Error(`--inputs parse error: ${err instanceof Error ? err.message : String(err)}`);
36
+ }
37
+ }
38
+ const RECEIVE_WITH_AUTHORIZATION_TYPEHASH = keccak_256(new TextEncoder().encode('ReceiveWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)'));
39
+ const DOMAIN_TYPEHASH = keccak_256(new TextEncoder().encode('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'));
40
+ function pad32Hex(hexNoPrefix) {
41
+ return Buffer.from(hexNoPrefix.padStart(64, '0'), 'hex');
42
+ }
43
+ function bytesToHex(bytes) {
44
+ return '0x' + Buffer.from(bytes).toString('hex');
45
+ }
46
+ function addressToBytes32(addr) {
47
+ return pad32Hex(addr.slice(2).toLowerCase());
48
+ }
49
+ function uint256Bytes(value) {
50
+ const v = BigInt(value);
51
+ return pad32Hex(v.toString(16));
52
+ }
53
+ function concatBytes(...arrays) {
54
+ const total = arrays.reduce((s, a) => s + a.length, 0);
55
+ const out = new Uint8Array(total);
56
+ let offset = 0;
57
+ for (const a of arrays) {
58
+ out.set(a, offset);
59
+ offset += a.length;
60
+ }
61
+ return out;
62
+ }
63
+ function computeDomainSeparator(chainId, verifyingContract) {
64
+ const enc = new TextEncoder();
65
+ const nameHash = keccak_256(enc.encode('USD Coin'));
66
+ const versionHash = keccak_256(enc.encode('2'));
67
+ return keccak_256(concatBytes(pad32Hex(bytesToHex(DOMAIN_TYPEHASH).slice(2)), nameHash, versionHash, pad32Hex(BigInt(chainId).toString(16)), pad32Hex(verifyingContract.slice(2).toLowerCase())));
68
+ }
69
+ function computeEip712Digest(payload, chainId, verifyingContract) {
70
+ const structHash = keccak_256(concatBytes(pad32Hex(bytesToHex(RECEIVE_WITH_AUTHORIZATION_TYPEHASH).slice(2)), addressToBytes32(payload.from), addressToBytes32(payload.to), uint256Bytes(payload.value), uint256Bytes(payload.validAfter), uint256Bytes(payload.validBefore), Buffer.from(payload.nonce.slice(2), 'hex')));
71
+ const domain = computeDomainSeparator(chainId, verifyingContract);
72
+ return keccak_256(concatBytes(new Uint8Array([0x19, 0x01]), domain, structHash));
73
+ }
74
+ function computeSharedLink(authorNonce, treasuryNonce, skillId, buyerAddress) {
75
+ const payload = `${authorNonce}|${treasuryNonce}|${skillId}|${buyerAddress.toLowerCase()}`;
76
+ return bytesToHex(keccak_256(new TextEncoder().encode(payload)));
77
+ }
78
+ function randomNonce() {
79
+ return '0x' + crypto.randomBytes(32).toString('hex');
80
+ }
81
+ function signPayload(payload, chainId, verifyingContract, wallet) {
82
+ const digest = computeEip712Digest({ ...payload, v: 0, r: '0x' + '0'.repeat(64), s: '0x' + '0'.repeat(64) }, chainId, verifyingContract);
83
+ const sig = wallet.signingKey.sign(digest);
84
+ return { ...payload, v: sig.v, r: sig.r, s: sig.s };
85
+ }
86
+ function loadIdentityPath() {
87
+ return join(homedir(), '.config', 'agentsmarket', 'agent.key');
88
+ }
89
+ function tryLoadIdentity() {
90
+ const path = loadIdentityPath();
91
+ if (!existsSync(path))
92
+ return null;
93
+ try {
94
+ const raw = readFileSync(path, 'utf-8').trim();
95
+ const pkHex = raw.startsWith('0x') ? raw : `0x${raw}`;
96
+ if (!/^0x[0-9a-fA-F]{64}$/.test(pkHex))
97
+ return null;
98
+ const wallet = new Wallet(pkHex);
99
+ return { private_key: pkHex, agent_id: wallet.address };
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ async function buildVariantDPayment(skillId, priceUsdc, commissionBps, authorRecipient, treasuryRecipient, chainId, tokenAddress, buyerAddress, wallet) {
106
+ const treasury = (BigInt(priceUsdc) * BigInt(commissionBps)) / BigInt(10000);
107
+ const author = BigInt(priceUsdc) - treasury;
108
+ const now = Math.floor(Date.now() / 1000);
109
+ const validBefore = now + 3600;
110
+ const authorNonce = randomNonce();
111
+ const treasuryNonce = randomNonce();
112
+ const authorPayload = signPayload({ from: buyerAddress, to: authorRecipient, value: author.toString(), validAfter: '0', validBefore: String(validBefore), nonce: authorNonce }, chainId, tokenAddress, wallet);
113
+ const treasuryPayload = signPayload({ from: buyerAddress, to: treasuryRecipient, value: treasury.toString(), validAfter: '0', validBefore: String(validBefore), nonce: treasuryNonce }, chainId, tokenAddress, wallet);
114
+ const shared_link = computeSharedLink(authorNonce, treasuryNonce, skillId, buyerAddress);
115
+ return {
116
+ skill_id: skillId,
117
+ author_auth: authorPayload,
118
+ treasury_auth: treasuryPayload,
119
+ shared_link,
120
+ };
121
+ }
122
+ function printLegacyHints(body, skillId) {
123
+ const fallbackRecipient = body.legacy_fallback?.recipient;
124
+ const recipient = body.author_recipient ?? body.recipient ?? fallbackRecipient ?? 'author';
125
+ console.error('');
126
+ console.error(` Next steps:`);
127
+ console.error(` 1. Send USDC to ${recipient} via Trust Wallet / MetaMask`);
128
+ console.error(` 2. Copy the tx hash from your wallet`);
129
+ console.error(` 3. Retry: agentsmarket call ${skillId} --payment-tx-hash <tx_hash> --inputs '<json>'`);
130
+ }
131
+ export async function callCommand(opts) {
132
+ const { skillId, paymentTxHash, inputsJson, noAutoSign } = opts;
133
+ const inputs = parseInputs(inputsJson);
11
134
  const detailsRes = await authedFetch('GET', `/v1/skills/${encodeURIComponent(skillId)}`, undefined, { requireAuth: false });
12
- const skill = await detailsRes.json();
13
- const body = { ...inputs };
135
+ const skill = (await detailsRes.json());
14
136
  if (!skill.is_free) {
15
- const useEip3009 = paymentKeyExists();
16
- if (useEip3009) {
17
- const privateKey = loadPaymentKey(loadPaymentKeyPem());
18
- const payment = buildAndSignAuthorization({
19
- privateKey,
20
- to: skill.author_agent_id.startsWith('0x') ? skill.author_agent_id : '0x0000000000000000000000000000000000000000',
21
- valueUsdcBaseUnits: skill.price_usdt,
22
- });
23
- body.payment = payment;
24
- console.log(`Skill "${skill.name}" costs $${(skill.price_usdt / 1_000_000).toFixed(3)} USDC.`);
25
- console.log(`Signed EIP-3009 authorization (nonce=${payment.nonce.slice(0, 18)}...)\n`);
137
+ console.log(`Skill "${skill.name}" costs $${(skill.price_usdc / 1_000_000).toFixed(3)} USDC.`);
138
+ if (paymentTxHash) {
139
+ console.log(`Including payment_tx_hash: ${paymentTxHash.slice(0, 18)}...`);
26
140
  }
27
141
  else {
28
- const mockTxHash = '0x' + '00'.repeat(32);
29
- body.payment_tx_hash = mockTxHash;
30
- console.log(`Skill "${skill.name}" costs $${(skill.price_usdt / 1_000_000).toFixed(3)} USDT.`);
31
- console.log(`Using mock payment_tx_hash (run \`agentsmarket init\` to generate payment.key for real EIP-3009).\n`);
142
+ console.log(`Auto-signing Variant D on 402 (use --no-auto-sign to fall back to manual).`);
32
143
  }
144
+ console.log('');
33
145
  }
34
- try {
35
- const res = await authedFetch('POST', `/v1/skills/${encodeURIComponent(skillId)}/invoke`, body);
36
- const result = await res.json();
37
- if (result.ok) {
38
- console.log(`✓ Invoked ${skill.name}\n`);
39
- console.log(`Output:\n${result.invocation.output}\n`);
40
- if (skill.is_free && !result.invocation.full_md) {
41
- console.log('(Free skill full_md not returned by server)\n');
42
- }
43
- else {
44
- console.log(`--- SKILL.md (paid, received after payment) ---`);
45
- console.log(result.invocation.full_md);
146
+ const body = { ...inputs };
147
+ if (paymentTxHash)
148
+ body.payment_tx_hash = paymentTxHash;
149
+ let usedBuyerAddress = null;
150
+ let attempt = 0;
151
+ while (attempt < 2) {
152
+ attempt++;
153
+ if (attempt === 2 && body.payment_variant_d) {
154
+ usedBuyerAddress = body.payment_variant_d.author_auth.from;
155
+ }
156
+ try {
157
+ const res = await authedFetch('POST', `/v1/skills/${encodeURIComponent(skillId)}/invoke`, body);
158
+ const result = (await res.json());
159
+ if (result.ok) {
160
+ console.log(`✓ Invoked ${skill.name}\n`);
161
+ console.log(`Output:\n${result.invocation.output}\n`);
162
+ if (skill.is_free && !result.invocation.full_md) {
163
+ console.log('(Free skill — full_md not returned by server)\n');
164
+ }
165
+ else {
166
+ console.log(`--- SKILL.md (received) ---`);
167
+ console.log(result.invocation.full_md);
168
+ }
169
+ return;
46
170
  }
171
+ throw new Error('invoke returned non-ok without 402');
47
172
  }
48
- }
49
- catch (err) {
50
- if (err instanceof HttpError) {
51
- if (err.status === 402) {
52
- console.error(`✗ Payment required:`);
53
- console.error(` ${err.message}`);
54
- process.exit(1);
173
+ catch (err) {
174
+ if (!(err instanceof HttpError) || err.status !== 402)
175
+ throw err;
176
+ const fortyTwo = err.body;
177
+ if (fortyTwo.mode === 'eip3009_variant_d' && !noAutoSign) {
178
+ const variantBody = fortyTwo;
179
+ if (attempt === 2)
180
+ throw new Error('Variant D retry returned 402 again');
181
+ const identity = tryLoadIdentity();
182
+ if (!identity) {
183
+ console.error(`✗ Payment required (402): server prefers Variant D, but no identity found at ${loadIdentityPath()}`);
184
+ console.error(` Run: agentsmarket init (or pass --no-auto-sign + use --payment-tx-hash for manual flow)`);
185
+ process.exit(1);
186
+ }
187
+ const wallet = new Wallet(identity.private_key);
188
+ const variant = await buildVariantDPayment(skillId, variantBody.price_usdc, variantBody.commission_bps, variantBody.author_recipient, variantBody.treasury_recipient, variantBody.chain_id, variantBody.token_address, wallet.address, wallet);
189
+ body.payment_variant_d = variant;
190
+ console.log(`Authorizing $${(Number(variantBody.amount_to_author) / 1_000_000).toFixed(3)} USDC to author + $${(Number(variantBody.amount_to_treasury) / 1_000_000).toFixed(3)} USDC to treasury...`);
191
+ continue;
55
192
  }
56
- if (err.status === 404) {
57
- console.error(`✗ Skill "${skillId}" not found.`);
58
- process.exit(1);
193
+ console.error(`✗ Payment required (402):`);
194
+ console.error(` ${err.message}`);
195
+ console.error('');
196
+ if (noAutoSign) {
197
+ console.error(` Full 402 body:`);
198
+ console.error(' ' + JSON.stringify(fortyTwo, null, 2).replace(/\n/g, '\n '));
199
+ console.error('');
59
200
  }
201
+ printLegacyHints(fortyTwo, skillId);
202
+ process.exit(1);
60
203
  }
61
- throw err;
62
204
  }
63
205
  }
64
206
  //# sourceMappingURL=call.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA2ExD,SAAS,WAAW,CAAC,UAAyB;IAC5C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,MAAM,mCAAmC,GAAG,UAAU,CACpD,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,sHAAsH,CACvH,CACF,CAAC;AACF,MAAM,eAAe,GAAG,UAAU,CAChC,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,oFAAoF,CACrF,CACF,CAAC;AAEF,SAAS,QAAQ,CAAC,WAAmB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACnC,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,GAAG,MAAoB;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;IAAC,CAAC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,iBAAyB;IACxE,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO,UAAU,CACf,WAAW,CACT,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC9C,QAAQ,EACR,WAAW,EACX,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EACtC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACnD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAoB,EAAE,OAAe,EAAE,iBAAyB;IAC3F,MAAM,UAAU,GAAG,UAAU,CAC3B,WAAW,CACT,QAAQ,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAClE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAC9B,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,EAC5B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAC3B,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAChC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAC3C,CACF,CAAC;IACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,iBAAiB,CACxB,WAAmB,EACnB,aAAqB,EACrB,OAAe,EACf,YAAoB;IAEpB,MAAM,OAAO,GAAG,GAAG,WAAW,IAAI,aAAa,IAAI,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3F,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAClB,OAA2C,EAC3C,OAAe,EACf,iBAAyB,EACzB,MAAc;IAEd,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACzI,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAOD,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACtD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAAe,EACf,SAAiB,EACjB,aAAqB,EACrB,eAAuB,EACvB,iBAAyB,EACzB,OAAe,EACf,YAAoB,EACpB,YAAoB,EACpB,MAAc;IAEd,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC;IAC/B,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,WAAW,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAC5I,OAAO,EACP,YAAY,EACZ,MAAM,CACP,CAAC;IACF,MAAM,eAAe,GAAG,WAAW,CACjC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAClJ,OAAO,EACP,YAAY,EACZ,MAAM,CACP,CAAC;IACF,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACzF,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,eAAe;QAC9B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAe,EAAE,OAAe;IACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,iBAAiB,IAAI,QAAQ,CAAC;IAC3F,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,uBAAuB,SAAS,8BAA8B,CAAC,CAAC;IAC9E,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,gDAAgD,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5H,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAiB,CAAC;IAExD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/F,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,IAAI,aAAa;QAAE,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;IAExD,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,IAAI,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5C,gBAAgB,GAAI,IAAI,CAAC,iBAAqC,CAAC,WAAW,CAAC,IAAI,CAAC;QAClF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChG,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;YAClD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtD,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,GAAG,CAAC;YACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAA+B,CAAC;YAErD,IAAK,QAAwB,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1E,MAAM,WAAW,GAAG,QAAuB,CAAC;gBAC5C,IAAI,OAAO,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACzE,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,KAAK,CAAC,gFAAgF,gBAAgB,EAAE,EAAE,CAAC,CAAC;oBACpH,OAAO,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;oBAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CACxC,OAAO,EACP,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,gBAAgB,EAC5B,WAAW,CAAC,kBAAkB,EAC9B,WAAW,CAAC,QAAQ,EACpB,WAAW,CAAC,aAAa,EACzB,MAAM,CAAC,OAAO,EACd,MAAM,CACP,CAAC;gBACF,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBACtM,SAAS;YACX,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;YACD,gBAAgB,CAAC,QAAqB,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,11 +1,11 @@
1
1
  /**
2
- * `agentsmarket info` — show current agent identity and status.
2
+ * `agentsmarket info` — show current agent identity and on-chain balance.
3
3
  *
4
- * Reads config + key from disk, verifies consistency, displays:
5
- * - Agent ID (EVM-style public address, what others see)
6
- * - Public key (hex)
4
+ * Reads config + signing key from disk, verifies consistency, displays:
5
+ * - Agent ID (EVM address)
6
+ * - Public key
7
7
  * - Network
8
8
  * - Created timestamp
9
- * - File locations
9
+ * - On-chain USDC balance (via server RPC)
10
10
  */
11
- export declare function infoCommand(): void;
11
+ export declare function infoCommand(): Promise<void>;
@@ -1,60 +1,58 @@
1
1
  /**
2
- * `agentsmarket info` — show current agent identity and status.
2
+ * `agentsmarket info` — show current agent identity and on-chain balance.
3
3
  *
4
- * Reads config + key from disk, verifies consistency, displays:
5
- * - Agent ID (EVM-style public address, what others see)
6
- * - Public key (hex)
4
+ * Reads config + signing key from disk, verifies consistency, displays:
5
+ * - Agent ID (EVM address)
6
+ * - Public key
7
7
  * - Network
8
8
  * - Created timestamp
9
- * - File locations
9
+ * - On-chain USDC balance (via server RPC)
10
10
  */
11
- import * as fs from 'node:fs';
12
- import { loadPrivateKey, derivePublicKey, exportPublicKeyRaw, exportPublicKeyHex, } from '../lib/keys.js';
13
- import { loadConfig, keyExists, getKeyPath, getConfigPath, getConfigDir, } from '../lib/config.js';
14
- export function infoCommand() {
11
+ import { SigningKey, computeAddress } from 'ethers';
12
+ import { loadConfig, loadPrivateKeyHex, getKeyPath, getConfigPath, getConfigDir } from '../lib/config.js';
13
+ import { authedJson } from '../lib/http.js';
14
+ export async function infoCommand() {
15
15
  const config = loadConfig();
16
16
  if (!config) {
17
17
  console.error('✗ No agent found. Run `agentsmarket init` first.');
18
18
  process.exit(1);
19
19
  }
20
- if (!keyExists()) {
21
- console.error('⚠️ Config exists but key file is missing: ' + getKeyPath());
22
- console.error(' This is dangerous — your agent ID cannot be recovered without the key.');
23
- console.error(' If you have a backup, restore it to: ' + getKeyPath());
24
- process.exit(1);
25
- }
26
- // Load and verify key consistency
27
20
  let publicKeyHex = '(unable to load)';
21
+ let derivedAddress = null;
28
22
  try {
29
- const keyPem = fs.readFileSync(getKeyPath(), 'utf-8');
30
- const privateKey = loadPrivateKey(keyPem);
31
- const publicKey = derivePublicKey(privateKey);
32
- publicKeyHex = exportPublicKeyHex(publicKey);
33
- // Verify the derived agent_id matches the stored one
34
- const derivedId = 'ed25519:' + exportPublicKeyRaw(publicKey).toString('base64url');
35
- if (derivedId !== config.agent_id) {
36
- console.error('⚠️ Key file does not match stored agent_id!');
37
- console.error(' Stored: ' + config.agent_id);
38
- console.error(' Derived: ' + derivedId);
39
- console.error(' This indicates key corruption or mismatch.');
40
- console.error(' DO NOT use this identity for payments until resolved.');
41
- process.exit(1);
42
- }
23
+ const privateKey = loadPrivateKeyHex();
24
+ const sk = new SigningKey(privateKey);
25
+ publicKeyHex = sk.publicKey.slice(2);
26
+ derivedAddress = computeAddress(sk.publicKey);
43
27
  }
44
28
  catch (err) {
45
29
  console.error('⚠️ Could not load key: ' + err.message);
46
30
  }
31
+ if (derivedAddress !== null && derivedAddress.toLowerCase() !== config.agent_id.toLowerCase()) {
32
+ console.error('⚠️ Key file does not match stored agent_id!');
33
+ console.error(' Stored: ' + config.agent_id);
34
+ console.error(' Derived: ' + derivedAddress);
35
+ console.error(' This indicates key corruption or mismatch.');
36
+ process.exit(1);
37
+ }
47
38
  console.log('Agent information');
48
39
  console.log('');
49
- console.log(' Agent ID: ' + config.agent_id);
50
- console.log(' Public key: ' + publicKeyHex);
51
- console.log(' Network: ' + config.network);
52
- console.log(' Created: ' + config.created_at);
40
+ console.log(' Agent ID: ' + config.agent_id);
41
+ console.log(' Public key: ' + publicKeyHex);
42
+ console.log(' Network: ' + config.network);
43
+ console.log(' Created: ' + config.created_at);
53
44
  console.log('');
54
45
  console.log(' Config dir: ' + getConfigDir());
55
46
  console.log(' Key file: ' + getKeyPath());
56
47
  console.log(' Config file: ' + getConfigPath());
57
48
  console.log('');
58
- console.log(' Balance: (not yet implemented — coming soon)');
49
+ try {
50
+ const balance = await authedJson('GET', `/v1/agents/${encodeURIComponent(config.agent_id)}/balance`, undefined, { requireAuth: false });
51
+ console.log(' USDC balance: $' + balance.balance_usdc_display + ` (${balance.source})`);
52
+ console.log(' Top-up: send USDC on Base to ' + balance.address);
53
+ }
54
+ catch {
55
+ console.log(' USDC balance: (unable to fetch — server may be down)');
56
+ }
59
57
  }
60
58
  //# sourceMappingURL=info.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  /**
2
- * `agentsmarket init` — generate a new Ed25519 agent keypair + register on server.
2
+ * `agentsmarket init` — generate BIP-39 mnemonic, derive secp256k1 keypair, register.
3
3
  *
4
- * 1. Creates ~/.config/agentsmarket/agent.key (private, 0600) and
5
- * ~/.config/agentsmarket/config.json (public config, 0600).
6
- * 2. Registers the agent on the marketplace server (POST /v1/agents/register).
7
- * If server is unreachable, init still succeeds locally — user can retry later.
4
+ * 1. Creates:
5
+ * ~/.config/agentsmarket/mnemonic.txt — 12-word phrase (PRIMARY backup)
6
+ * ~/.config/agentsmarket/agent.key — secp256k1 private key (hex)
7
+ * ~/.config/agentsmarket/config.json public config (agent_id, network)
8
+ * 2. Registers on server (POST /v1/agents/register). If unreachable, init still
9
+ * succeeds locally — retry later with `agentsmarket register`.
8
10
  *
9
- * IMPORTANT: This is a one-time setup. If you lose the key file, you lose
10
- * the agent identity and any associated funds/reputation.
11
+ * IMPORTANT: This is a one-time setup.
12
+ * - mnemonic.txt = wallet backup. Import into Trust Wallet to monitor/send funds.
13
+ * - agent.key = signing key for CLI. Derived from mnemonic.
14
+ * - If you lose BOTH, you lose the agent identity and any associated balance.
11
15
  */
12
16
  export declare function initCommand(): Promise<void>;