@leashmarket/cli 0.1.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 ADDED
@@ -0,0 +1,153 @@
1
+ # @leashmarket/cli
2
+
3
+ Human-driven CLI for the Leash agent economy. Mint agents, check
4
+ balances, pay paywalls, discover services, and inspect reputation —
5
+ straight from your terminal, no chat product or MCP host required.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g @leashmarket/cli
11
+ # or
12
+ pnpm add -g @leashmarket/cli
13
+ ```
14
+
15
+ The binary is named `leash`. Pair it with `leash-mcp` (from
16
+ `@leashmarket/mcp`) when you want to expose the same identity to an
17
+ AI agent through STDIO.
18
+
19
+ ## Configure
20
+
21
+ Same configuration model as `@leashmarket/mcp` — both binaries read the
22
+ same `~/.config/leash/agent.json` (chmod 600) and respect the same
23
+ environment variable overrides:
24
+
25
+ | env | example |
26
+ | --------------------- | --------------------------------------------- |
27
+ | `LEASH_AGENT_MINT` | `Agnt7XQ...` |
28
+ | `LEASH_EXECUTIVE_KEY` | `5Jz...` (base58) or `[12,34,...]` (JSON arr) |
29
+ | `LEASH_NETWORK` | `solana-mainnet` (default) / `solana-devnet` |
30
+ | `LEASH_API_URL` | `https://api.leash.market` (default) |
31
+ | `LEASH_RPC_URL` | **strongly recommended** — see below |
32
+ | `LEASH_EXPLORER_URL` | `https://explorer.leash.market` (default) |
33
+
34
+ > **Bring your own RPC.** The default endpoints
35
+ > (`api.devnet.solana.com`, `api.mainnet-beta.solana.com`) are public,
36
+ > rate-limited, and slow. Each `leash pay` makes 3-5 RPC calls — on a
37
+ > public endpoint that's a 4-8s settlement, sometimes a 429. Set
38
+ > `LEASH_RPC_URL` (or `rpc_url` in `agent.json`) to a Helius / Triton /
39
+ > QuickNode / Alchemy / self-hosted endpoint and settlement drops
40
+ > under one second.
41
+
42
+ ## Quickstart
43
+
44
+ `leash agent create` is a two-step flow on both devnet and mainnet —
45
+ fund the printed executive pubkey with SOL between the two calls.
46
+
47
+ ```bash
48
+ # 1. Generate an executive keypair locally + capture the agent's
49
+ # public profile (name, description, services). Returns
50
+ # `funding_required` with the pubkey + amount.
51
+ leash agent create \
52
+ --name "Plexpert" \
53
+ --description "Onchain accountant for indie operators." \
54
+ --service web=https://plexpert.xyz \
55
+ --service api=https://api.plexpert.xyz
56
+
57
+ # 2. Fund it (devnet airdrop is free; mainnet uses any wallet).
58
+ solana airdrop 1 <executive_pubkey> --url https://api.devnet.solana.com
59
+
60
+ # 3. Re-run — same command resumes from the persisted draft +
61
+ # keypair, mints + delegates + records, lands agent.json.
62
+ leash agent create
63
+
64
+ # 4. Confirm identity.
65
+ leash agent show
66
+
67
+ # 3. Look at the marketplace.
68
+ leash discover -q ocr --max-price 0.10
69
+
70
+ # 4. Vet a counterparty.
71
+ leash reputation <agent_mint>
72
+
73
+ # 5. Pay something.
74
+ leash pay https://example.com/x/abc123
75
+
76
+ # 6. Inspect activity.
77
+ leash receipts # latest receipts (newest first)
78
+ leash history --days 7 # last week + USD totals
79
+ leash daily --days 14 # per-day buckets
80
+ leash receipt c3c50cb352a2624f783ca6a51bdb7fbcd3b67f04b4a42cd431444db05504181a
81
+ # full ReceiptV1 by hash
82
+
83
+ # 7. Cash out.
84
+ leash treasury balance
85
+ leash treasury withdraw --to <wallet> --amount 0.50 --token USDC
86
+ ```
87
+
88
+ ## All commands
89
+
90
+ ```text
91
+ agent commands:
92
+ agent create [--name N] [--description T] [--image URL]
93
+ [--service name=https://endpoint] (repeatable)
94
+ [--generate | --import --executive <secret>]
95
+ two-step agent provisioning
96
+ agent show print active agent identity
97
+ agent export [--out PATH] export agent.json
98
+ agent import <PATH> install an agent.json
99
+
100
+ treasury commands:
101
+ treasury balance list SOL + token balances
102
+ treasury withdraw --to W --amount N --token SOL|USDC|USDG|USDT
103
+ treasury limit [--token USDC|USDG|USDT]
104
+ show SPL Approve delegation + balance
105
+ treasury set-limit [--token USDC|USDG|USDT]
106
+ (--unlimited | --revoke | --amount N)
107
+ change the executive's SPL spend authority
108
+
109
+ marketplace + reputation:
110
+ discover [-q QUERY] [--max-price N] [--pricing-type T] [--limit N]
111
+ reputation <agent_mint> [--network solana-devnet|solana-mainnet]
112
+
113
+ activity:
114
+ receipts [--limit N] [--direction outgoing|incoming|both]
115
+ paginated receipt feed for the active agent
116
+ receipt <receipt_hash> fetch a single ReceiptV1 by hash
117
+ (the same hash the explorer renders at
118
+ /receipt/{hash})
119
+ history [--days N] [--direction outgoing|incoming|both] [--limit N]
120
+ receipts in the last N days (default 7)
121
+ plus running USD totals (sent / received /
122
+ net). Stables (USDC/USDG/USDT) summed at 1:1.
123
+ daily [--days N] per-day P&L buckets for the last N days
124
+ (default 7). One row per UTC day with
125
+ sent_usd, received_usd, net_usd, counts.
126
+ pay <link-url> probe → sign → settle an x402 paywall
127
+
128
+ misc:
129
+ doctor config + RPC + API reachability check
130
+ help, -h full help
131
+ version, -v installed version
132
+
133
+ global flags:
134
+ --json emit raw LeashToolResult payload
135
+ ```
136
+
137
+ ## Cross-interface portability
138
+
139
+ `leash agent export` and `leash agent import` are aliases for the
140
+ matching `leash-mcp` subcommands — same JSON shape, same on-disk
141
+ location. An agent minted in any host can roam to any other host
142
+ by exporting the file there and importing it on the new machine.
143
+
144
+ ## Develop
145
+
146
+ ```bash
147
+ pnpm --filter @leashmarket/cli typecheck
148
+ pnpm --filter @leashmarket/cli test
149
+ pnpm --filter @leashmarket/cli build
150
+ ```
151
+
152
+ The compiled `dist/cli.js` is set executable so `npx -y @leashmarket/cli`
153
+ works without an extra step.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `leash` — human-driven Leash CLI.
4
+ *
5
+ * Wraps the same `LeashHost` that `@leashmarket/mcp` exposes to AI agents,
6
+ * but skips the MCP wire protocol and renders results as plain text
7
+ * (or `--json` when machine-readable output is wanted). Designed to
8
+ * be the "git/gh/aws" of the Leash agent economy: a small, fast tool
9
+ * for humans who want to inspect or operate their agent without
10
+ * spinning up a chat product or MCP host.
11
+ *
12
+ * Subcommands
13
+ * -----------
14
+ * leash agent create Provision an agent (two-step). First call
15
+ * [--name N] generates (or imports with `--executive
16
+ * [--generate | --import] <secret>`) an executive keypair, persists
17
+ * [--executive <secret>] it, and prints funding instructions. After
18
+ * you send SOL to the printed address, run
19
+ * the same command again with no args to
20
+ * finish minting + delegation + recording.
21
+ * Network comes from `LEASH_NETWORK` (or
22
+ * `agent.json:network`).
23
+ * leash agent show Print active agent identity.
24
+ * leash agent export [--out P] Export agent.json (alias for `leash-mcp export`).
25
+ * leash agent import <path> Install agent.json (alias for `leash-mcp import`).
26
+ * leash treasury balance List SOL + USDC/USDG/USDT balances.
27
+ * leash treasury withdraw … Owner-driven on-chain withdrawal.
28
+ * leash discover [-q QUERY] … Search Leash + pay-skills (public).
29
+ * leash discover endpoints <fqn> Expand a pay-skills provider into paid URLs.
30
+ * leash reputation <agent_mint> Reputation snapshot (public).
31
+ * leash receipts [--limit N] Recent receipts for the active agent.
32
+ * leash pay <link-url> [--max …] Pay an x402 paywall.
33
+ * leash doctor Config + RPC + API reachability check.
34
+ * leash help / -h Full help.
35
+ * leash version / -v Show installed version.
36
+ *
37
+ * Output mode
38
+ * -----------
39
+ * Each command prints a one-line summary by default; pass `--json` to
40
+ * get the raw `LeashToolResult` payload (same shape the MCP tools
41
+ * return) for piping into `jq`, scripts, etc.
42
+ */
43
+ export {};
44
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG"}
package/dist/cli.js ADDED
@@ -0,0 +1,755 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `leash` — human-driven Leash CLI.
4
+ *
5
+ * Wraps the same `LeashHost` that `@leashmarket/mcp` exposes to AI agents,
6
+ * but skips the MCP wire protocol and renders results as plain text
7
+ * (or `--json` when machine-readable output is wanted). Designed to
8
+ * be the "git/gh/aws" of the Leash agent economy: a small, fast tool
9
+ * for humans who want to inspect or operate their agent without
10
+ * spinning up a chat product or MCP host.
11
+ *
12
+ * Subcommands
13
+ * -----------
14
+ * leash agent create Provision an agent (two-step). First call
15
+ * [--name N] generates (or imports with `--executive
16
+ * [--generate | --import] <secret>`) an executive keypair, persists
17
+ * [--executive <secret>] it, and prints funding instructions. After
18
+ * you send SOL to the printed address, run
19
+ * the same command again with no args to
20
+ * finish minting + delegation + recording.
21
+ * Network comes from `LEASH_NETWORK` (or
22
+ * `agent.json:network`).
23
+ * leash agent show Print active agent identity.
24
+ * leash agent export [--out P] Export agent.json (alias for `leash-mcp export`).
25
+ * leash agent import <path> Install agent.json (alias for `leash-mcp import`).
26
+ * leash treasury balance List SOL + USDC/USDG/USDT balances.
27
+ * leash treasury withdraw … Owner-driven on-chain withdrawal.
28
+ * leash discover [-q QUERY] … Search Leash + pay-skills (public).
29
+ * leash discover endpoints <fqn> Expand a pay-skills provider into paid URLs.
30
+ * leash reputation <agent_mint> Reputation snapshot (public).
31
+ * leash receipts [--limit N] Recent receipts for the active agent.
32
+ * leash pay <link-url> [--max …] Pay an x402 paywall.
33
+ * leash doctor Config + RPC + API reachability check.
34
+ * leash help / -h Full help.
35
+ * leash version / -v Show installed version.
36
+ *
37
+ * Output mode
38
+ * -----------
39
+ * Each command prints a one-line summary by default; pass `--json` to
40
+ * get the raw `LeashToolResult` payload (same shape the MCP tools
41
+ * return) for piping into `jq`, scripts, etc.
42
+ */
43
+ import { HostRef, buildServerFromEnv } from '@leashmarket/mcp';
44
+ const VERSION = '0.1.0';
45
+ async function main() {
46
+ const argv = process.argv.slice(2);
47
+ const cmd = argv[0];
48
+ switch (cmd) {
49
+ case undefined:
50
+ case 'help':
51
+ case '-h':
52
+ case '--help':
53
+ printHelp();
54
+ return;
55
+ case 'version':
56
+ case '-v':
57
+ case '--version':
58
+ process.stdout.write(`leash ${VERSION}\n`);
59
+ return;
60
+ case 'agent':
61
+ await runAgent(argv.slice(1));
62
+ return;
63
+ case 'treasury':
64
+ await runTreasury(argv.slice(1));
65
+ return;
66
+ case 'discover':
67
+ await runDiscover(argv.slice(1));
68
+ return;
69
+ case 'reputation':
70
+ await runReputation(argv.slice(1));
71
+ return;
72
+ case 'receipts':
73
+ await runReceipts(argv.slice(1));
74
+ return;
75
+ case 'receipt':
76
+ await runReceipt(argv.slice(1));
77
+ return;
78
+ case 'history':
79
+ await runHistory(argv.slice(1));
80
+ return;
81
+ case 'daily':
82
+ await runDaily(argv.slice(1));
83
+ return;
84
+ case 'pay':
85
+ await runPay(argv.slice(1));
86
+ return;
87
+ case 'doctor':
88
+ await runDoctor(argv.slice(1));
89
+ return;
90
+ default:
91
+ process.stderr.write(`unknown command: ${cmd}\n\n`);
92
+ printHelp();
93
+ process.exit(2);
94
+ }
95
+ }
96
+ main().catch((err) => {
97
+ const msg = err instanceof Error ? (err.stack ?? err.message) : String(err);
98
+ process.stderr.write(`leash: fatal: ${msg}\n`);
99
+ process.exit(1);
100
+ });
101
+ // ────────────────────────────────────────────────────────────────────────────
102
+ // agent
103
+ // ────────────────────────────────────────────────────────────────────────────
104
+ async function runAgent(args) {
105
+ const sub = args[0];
106
+ switch (sub) {
107
+ case 'create':
108
+ await runAgentCreate(args.slice(1));
109
+ return;
110
+ case 'show':
111
+ await runAgentShow(args.slice(1));
112
+ return;
113
+ case 'export':
114
+ case 'import': {
115
+ // Defer to leash-mcp via a child process — no point in
116
+ // duplicating the file I/O.
117
+ const { spawnSync } = await import('node:child_process');
118
+ const result = spawnSync('leash-mcp', [sub, ...args.slice(1)], {
119
+ stdio: 'inherit',
120
+ });
121
+ process.exit(result.status ?? 0);
122
+ }
123
+ default:
124
+ process.stderr.write('usage: leash agent {create|show|export|import}\n');
125
+ process.exit(2);
126
+ }
127
+ }
128
+ async function runAgentCreate(args) {
129
+ const { hostRef } = buildServerFromEnv();
130
+ const json = wantJson(args);
131
+ const name = optArg(args, '--name');
132
+ const description = optArg(args, '--description');
133
+ const imageUrl = optArg(args, '--image');
134
+ const executive = optArg(args, '--executive');
135
+ const mode = executive
136
+ ? 'import'
137
+ : args.includes('--import')
138
+ ? 'import'
139
+ : args.includes('--generate')
140
+ ? 'generate'
141
+ : undefined;
142
+ if (mode === 'import' && !executive) {
143
+ process.stderr.write('usage: leash agent create --import --executive <base58_secret>\n' +
144
+ ' (or pass `--executive` alone to imply `--import`)\n');
145
+ process.exit(2);
146
+ }
147
+ // `--service name=https://endpoint` repeatable. EIP-8004
148
+ // RegistrationV1 entries the agent advertises (web, api, docs, …).
149
+ // Persisted in pending_register so Step 2 inherits them.
150
+ let services;
151
+ try {
152
+ services = parseServiceFlags(args);
153
+ }
154
+ catch (err) {
155
+ process.stderr.write(`${err.message}\n`);
156
+ process.exit(2);
157
+ }
158
+ const result = await hostRef.registerAgent({
159
+ ...(name ? { name } : {}),
160
+ ...(description ? { description } : {}),
161
+ ...(imageUrl ? { image_url: imageUrl } : {}),
162
+ ...(services && services.length > 0 ? { services } : {}),
163
+ ...(mode ? { mode } : {}),
164
+ ...(executive ? { executive_secret_base58: executive } : {}),
165
+ });
166
+ printResult(result, json, (payload) => {
167
+ if (payload.status === 'already_registered') {
168
+ return `agent ${payload.agent_mint} already configured`;
169
+ }
170
+ if (payload.status === 'funding_required') {
171
+ return [
172
+ `Step 1 of 2 — fund the executive keypair, then re-run \`leash agent create\`:`,
173
+ ``,
174
+ ` network: ${payload.network}`,
175
+ ` executive: ${payload.executive_pubkey} (${payload.keypair_source})`,
176
+ ` required: ${payload.required_sol} SOL (${payload.balance_sol} on-chain)`,
177
+ ` config saved: ${payload.config_path}`,
178
+ ``,
179
+ ...(payload.instructions ?? []).map((line) => ` • ${line}`),
180
+ ].join('\n');
181
+ }
182
+ if (payload.status === 'ok') {
183
+ const sigs = (payload.tx_signatures ?? {});
184
+ return [
185
+ `Step 2 of 2 — agent provisioned and recorded.`,
186
+ ``,
187
+ ` agent mint: ${payload.agent_mint}`,
188
+ ` treasury: ${payload.treasury_address}`,
189
+ ` executive: ${payload.executive_pubkey}`,
190
+ ` network: ${payload.network}`,
191
+ ` config: ${payload.config_written_to ?? '(not persisted)'}`,
192
+ ` mint tx: ${sigs.mint ?? '(unknown)'}`,
193
+ ` delegate tx: ${sigs.delegate ?? '(unknown)'}`,
194
+ ` receipts: ${payload.receipts_service_url ?? '(unknown)'}`,
195
+ ].join('\n');
196
+ }
197
+ return `error: ${payload.message ?? 'unknown'}`;
198
+ });
199
+ }
200
+ async function runAgentShow(args) {
201
+ const { hostRef } = buildServerFromEnv();
202
+ const json = wantJson(args);
203
+ const result = await hostRef.getIdentity({});
204
+ printResult(result, json, (payload) => {
205
+ if (payload.status === 'no_agent')
206
+ return 'no agent configured (run `leash agent create`)';
207
+ return [
208
+ `agent_mint: ${payload.agent_mint}`,
209
+ `executive_pubkey: ${payload.executive_pubkey}`,
210
+ `treasury: ${payload.treasury_address}`,
211
+ `network: ${payload.network}`,
212
+ ].join('\n');
213
+ });
214
+ }
215
+ // ────────────────────────────────────────────────────────────────────────────
216
+ // treasury
217
+ // ────────────────────────────────────────────────────────────────────────────
218
+ async function runTreasury(args) {
219
+ const sub = args[0];
220
+ switch (sub) {
221
+ case 'balance':
222
+ await runTreasuryBalance(args.slice(1));
223
+ return;
224
+ case 'withdraw':
225
+ await runTreasuryWithdraw(args.slice(1));
226
+ return;
227
+ case 'limit':
228
+ await runTreasuryLimit(args.slice(1));
229
+ return;
230
+ case 'set-limit':
231
+ await runTreasurySetLimit(args.slice(1));
232
+ return;
233
+ default:
234
+ process.stderr.write('usage: leash treasury {balance|withdraw|limit|set-limit}\n');
235
+ process.exit(2);
236
+ }
237
+ }
238
+ async function runTreasuryBalance(args) {
239
+ const { hostRef } = buildServerFromEnv();
240
+ const json = wantJson(args);
241
+ const result = await hostRef.checkTreasuryBalance({});
242
+ printResult(result, json, (payload) => {
243
+ if (payload.status !== 'ok')
244
+ return formatStatusError(payload);
245
+ const lines = [`treasury: ${payload.treasury}`];
246
+ lines.push(` SOL: ${payload.sol?.amount ?? '0'} (${payload.sol?.lamports ?? '0'} lamports)`);
247
+ for (const t of payload.tokens ?? []) {
248
+ lines.push(` ${t.symbol ?? t.mint}: ${t.amount} (atomic ${t.atomic})`);
249
+ }
250
+ return lines.join('\n');
251
+ });
252
+ }
253
+ async function runTreasuryWithdraw(args) {
254
+ const { hostRef } = buildServerFromEnv();
255
+ const json = wantJson(args);
256
+ const destination = optArg(args, '--to');
257
+ const tokenRaw = optArg(args, '--token') ?? optArg(args, '--symbol');
258
+ const amount = numArg(args, '--amount');
259
+ if (!destination || amount == null || !tokenRaw) {
260
+ process.stderr.write('usage: leash treasury withdraw --to <wallet> --amount <decimal> --token SOL|USDC|USDG|USDT\n');
261
+ process.exit(2);
262
+ }
263
+ const token = tokenRaw.toUpperCase();
264
+ const result = await hostRef.withdraw({ token, amount, destination });
265
+ printResult(result, json, (payload) => {
266
+ if (payload.status !== 'ok')
267
+ return formatStatusError(payload);
268
+ return [
269
+ `withdraw ok`,
270
+ ` amount: ${asAny(payload).amount} ${asAny(payload).token ?? asAny(payload).symbol}`,
271
+ ` destination: ${asAny(payload).destination ?? asAny(payload).destination_wallet}`,
272
+ ` tx_signature: ${asAny(payload).tx_signature}`,
273
+ ` explorer: ${asAny(payload).explorer_url}`,
274
+ ].join('\n');
275
+ });
276
+ }
277
+ async function runTreasuryLimit(args) {
278
+ const { hostRef } = buildServerFromEnv();
279
+ const json = wantJson(args);
280
+ const symbol = (optArg(args, '--token') ?? optArg(args, '--symbol') ?? 'USDC').toUpperCase();
281
+ const result = await hostRef.getSpendLimit({ symbol });
282
+ printResult(result, json, (payload) => {
283
+ if (payload.status !== 'ok')
284
+ return formatStatusError(payload);
285
+ return [
286
+ `spend limit (${payload.symbol})`,
287
+ ` treasury: ${payload.treasury}`,
288
+ ` source ata: ${payload.source_token_account}${payload.source_exists ? '' : ' (not yet created)'}`,
289
+ ` delegate: ${payload.delegate ?? '(none)'}`,
290
+ ` executive: ${payload.executive_pubkey}`,
291
+ ` delegate matches: ${payload.delegate_matches_executive ? 'yes' : 'no'}`,
292
+ ` delegated amount: ${payload.delegated_amount} (atomic ${payload.delegated_amount_atomic})`,
293
+ ` treasury balance: ${payload.balance} (atomic ${payload.balance_atomic})`,
294
+ ].join('\n');
295
+ });
296
+ }
297
+ async function runTreasurySetLimit(args) {
298
+ const { hostRef } = buildServerFromEnv();
299
+ const json = wantJson(args);
300
+ const symbol = (optArg(args, '--token') ?? optArg(args, '--symbol') ?? 'USDC').toUpperCase();
301
+ // Mode resolution: explicit --revoke / --unlimited / --amount win;
302
+ // otherwise infer from `--amount <N>` presence (cap with that
303
+ // value), else default to unlimited.
304
+ const explicitAmount = numArg(args, '--amount');
305
+ let mode;
306
+ if (args.includes('--revoke'))
307
+ mode = 'revoke';
308
+ else if (args.includes('--unlimited'))
309
+ mode = 'unlimited';
310
+ else if (explicitAmount !== undefined)
311
+ mode = 'amount';
312
+ else
313
+ mode = 'unlimited';
314
+ if (mode === 'amount' && (explicitAmount === undefined || !(explicitAmount > 0))) {
315
+ process.stderr.write('usage: leash treasury set-limit [--token USDC|USDG|USDT] (--unlimited | --revoke | --amount N)\n');
316
+ process.exit(2);
317
+ }
318
+ const callArgs = {
319
+ symbol,
320
+ mode,
321
+ };
322
+ if (mode === 'amount')
323
+ callArgs.amount = explicitAmount;
324
+ const result = await hostRef.setSpendLimit(callArgs);
325
+ printResult(result, json, (payload) => {
326
+ if (payload.status !== 'ok')
327
+ return formatStatusError(payload);
328
+ if (payload.mode === 'revoke') {
329
+ return [
330
+ `revoke ok (${payload.symbol})`,
331
+ ` treasury: ${payload.treasury}`,
332
+ ` tx_signature: ${payload.tx_signature}`,
333
+ ` explorer: ${payload.explorer_url}`,
334
+ ].join('\n');
335
+ }
336
+ return [
337
+ `set-limit ok (${payload.symbol}, ${payload.mode})`,
338
+ ` treasury: ${payload.treasury}`,
339
+ ` delegate: ${payload.delegate}`,
340
+ ` amount: ${payload.delegated_amount} (atomic ${payload.delegated_amount_atomic})`,
341
+ ` tx_signature: ${payload.tx_signature}`,
342
+ ` explorer: ${payload.explorer_url}`,
343
+ ].join('\n');
344
+ });
345
+ }
346
+ // ────────────────────────────────────────────────────────────────────────────
347
+ // discover / reputation / receipts / pay
348
+ // ────────────────────────────────────────────────────────────────────────────
349
+ async function runDiscover(args) {
350
+ // Sub-commands. Today: `discover endpoints <fqn>` mirrors
351
+ // `pay skills endpoints <fqn>` from the pay.sh CLI — handy for
352
+ // expanding a chosen pay-skills provider into its paid URLs once
353
+ // search has narrowed the field.
354
+ if (args[0] === 'endpoints') {
355
+ await runDiscoverEndpoints(args.slice(1));
356
+ return;
357
+ }
358
+ const { hostRef } = buildServerFromEnv();
359
+ const json = wantJson(args);
360
+ const rawSource = optArg(args, '--source');
361
+ const source = rawSource === 'leash' || rawSource === 'pay-skills' || rawSource === 'all'
362
+ ? rawSource
363
+ : undefined;
364
+ const query = {
365
+ capability: optArg(args, '-q') ?? optArg(args, '--capability'),
366
+ max_price_usdc: numArg(args, '--max-price'),
367
+ pricing_type: optArg(args, '--pricing-type'),
368
+ source,
369
+ limit: numArg(args, '--limit'),
370
+ };
371
+ const cleaned = Object.fromEntries(Object.entries(query).filter(([, v]) => v !== undefined));
372
+ const result = await hostRef.discover(cleaned);
373
+ printResult(result, json, (payload) => {
374
+ if (payload.status !== 'ok')
375
+ return formatStatusError(payload);
376
+ if (payload.count === 0)
377
+ return 'no listings match';
378
+ const lines = [`${payload.count} listing(s):`];
379
+ for (const item of payload.items ?? []) {
380
+ const price = item.pricing_type === 'free'
381
+ ? 'free'
382
+ : item.pricing_type === 'variable'
383
+ ? 'variable'
384
+ : `${item.price_usdc ?? '?'} USDC/call`;
385
+ const tag = item.source === 'pay-skills' ? '[pay.sh]' : '[leash] ';
386
+ const slug = item.source === 'pay-skills' ? ` (fqn: ${item.slug})` : '';
387
+ lines.push(` ${tag} ${item.title} — ${price} — ${item.url}${slug}`);
388
+ lines.push(` ${item.description}`);
389
+ }
390
+ if ((payload.items ?? []).some((i) => i.source === 'pay-skills')) {
391
+ lines.push('');
392
+ lines.push('Tip: `leash discover endpoints <fqn>` to expand a pay.sh provider.');
393
+ }
394
+ return lines.join('\n');
395
+ });
396
+ }
397
+ async function runDiscoverEndpoints(args) {
398
+ const { hostRef } = buildServerFromEnv();
399
+ const json = wantJson(args);
400
+ const fqn = args.find((a) => !a.startsWith('--'));
401
+ if (!fqn) {
402
+ process.stderr.write('usage: leash discover endpoints <fqn>\n' +
403
+ '\n' +
404
+ ' <fqn> pay-skills FQN like `agentmail/email` or\n' +
405
+ ' `coinbase-cdp/coinbase-developer-platform/baseSepoliaWalletApi`.\n' +
406
+ ' Lift it from the `(fqn: ...)` hint emitted by `leash discover`.\n');
407
+ process.exit(2);
408
+ }
409
+ const result = await hostRef.paySkillsProvider({ fqn });
410
+ printResult(result, json, (payload) => {
411
+ if (payload.status !== 'ok')
412
+ return formatStatusError(payload);
413
+ const lines = [
414
+ `${payload.title} — ${payload.fqn}`,
415
+ ` service_url: ${payload.service_url}`,
416
+ ` category: ${payload.category}`,
417
+ ` endpoints: ${payload.endpoints.length}`,
418
+ '',
419
+ ];
420
+ for (const ep of payload.endpoints ?? []) {
421
+ const protocols = (ep.protocol ?? []).join(',') || '(none)';
422
+ const stables = (ep.supported_usd ?? []).join(',') || '(none)';
423
+ const probe = ep.probe_status ?? '?';
424
+ const priceTier = ep.pricing?.dimensions?.[0]?.tiers?.[0]?.price_usd;
425
+ const price = typeof priceTier === 'number' ? `${priceTier} USD` : 'variable';
426
+ lines.push(` ${ep.method.padEnd(6)} ${ep.url}` +
427
+ `\n ${ep.description ?? '(no description)'}`);
428
+ lines.push(` price=${price} protocol=${protocols} stables=${stables} probe=${probe}`);
429
+ }
430
+ return lines.join('\n');
431
+ });
432
+ }
433
+ async function runReputation(args) {
434
+ const { hostRef } = buildServerFromEnv();
435
+ const json = wantJson(args);
436
+ const mint = args.find((a) => !a.startsWith('--'));
437
+ if (!mint) {
438
+ process.stderr.write('usage: leash reputation <agent_mint> [--network solana-devnet|solana-mainnet]\n');
439
+ process.exit(2);
440
+ }
441
+ const network = optArg(args, '--network');
442
+ const result = await hostRef.reputation({ agent_mint: mint, ...(network ? { network } : {}) });
443
+ printResult(result, json, (payload) => {
444
+ if (payload.status !== 'ok')
445
+ return formatStatusError(payload);
446
+ return [
447
+ `agent ${payload.agent_mint} (${payload.network})`,
448
+ ` rating: ${payload.rating}`,
449
+ ` settled_calls: ${payload.settled_calls}`,
450
+ ` denied_calls: ${payload.denied_calls}`,
451
+ ` total_volume_usdc: ${payload.total_volume_usdc}`,
452
+ ` distinct_counterparties: ${payload.distinct_counterparties}`,
453
+ ` dispute_rate: ${payload.dispute_rate}`,
454
+ ` oldest_receipt_at: ${payload.oldest_receipt_at ?? '(none)'}`,
455
+ ].join('\n');
456
+ });
457
+ }
458
+ async function runReceipts(args) {
459
+ const { hostRef } = buildServerFromEnv();
460
+ const json = wantJson(args);
461
+ const limit = numArg(args, '--limit');
462
+ const direction = optArg(args, '--direction');
463
+ const result = await hostRef.receipts({
464
+ ...(limit ? { limit } : {}),
465
+ ...(direction ? { direction } : {}),
466
+ });
467
+ printResult(result, json, (payload) => {
468
+ if (payload.status !== 'ok')
469
+ return formatStatusError(payload);
470
+ if (!payload.items?.length)
471
+ return 'no receipts yet';
472
+ const lines = [`${payload.count} receipt(s):`];
473
+ for (const r of payload.items) {
474
+ lines.push(` • ${r.timestamp} ${r.direction.padEnd(8)} ${r.decision.padEnd(6)} ${r.amount ?? '?'} ${r.currency ?? ''} ${r.tx_signature ?? '(no tx)'}`);
475
+ }
476
+ return lines.join('\n');
477
+ });
478
+ }
479
+ async function runReceipt(args) {
480
+ const { hostRef } = buildServerFromEnv();
481
+ const json = wantJson(args);
482
+ // Accept the hash as a positional arg (skip `--*` flags).
483
+ const hash = args.find((a) => !a.startsWith('--'));
484
+ if (!hash) {
485
+ process.stderr.write('usage: leash receipt <receipt_hash> [--json]\n' +
486
+ ' (the 64-hex-char value the explorer renders at /receipt/{hash})\n');
487
+ process.exit(2);
488
+ }
489
+ const result = await hostRef.getReceipt({ receipt_hash: hash });
490
+ printResult(result, json, (payload) => {
491
+ if (payload.status === 'not_found') {
492
+ return `not found: ${payload.receipt_hash} on ${payload.network}`;
493
+ }
494
+ if (payload.status !== 'ok')
495
+ return formatStatusError(payload);
496
+ const r = payload.receipt;
497
+ const price = (r.price ?? {});
498
+ const req = (r.request ?? {});
499
+ return [
500
+ `receipt ${payload.receipt_hash}`,
501
+ ` agent: ${payload.agent}`,
502
+ ` direction: ${payload.direction}`,
503
+ ` decision: ${payload.decision}`,
504
+ ` network: ${payload.network}`,
505
+ ` ingested_at: ${payload.ingested_at}`,
506
+ ` amount: ${price.amount ?? '?'} ${price.currency ?? ''}`,
507
+ ` request: ${req.method ?? '?'} ${req.url ?? '(none)'}`,
508
+ ` tx_signature: ${payload.tx_signature ?? '(none)'}`,
509
+ ` explorer: ${payload.explorer_url ?? '(none)'}`,
510
+ ].join('\n');
511
+ });
512
+ }
513
+ async function runHistory(args) {
514
+ const { hostRef } = buildServerFromEnv();
515
+ const json = wantJson(args);
516
+ const days = numArg(args, '--days');
517
+ const limit = numArg(args, '--limit');
518
+ const direction = optArg(args, '--direction');
519
+ const result = await hostRef.transactionHistory({
520
+ ...(days != null ? { days } : {}),
521
+ ...(limit != null ? { limit } : {}),
522
+ ...(direction ? { direction } : {}),
523
+ });
524
+ printResult(result, json, (payload) => {
525
+ if (payload.status !== 'ok')
526
+ return formatStatusError(payload);
527
+ const lines = [
528
+ `history ${payload.range.days}d ${payload.count} receipt(s)${payload.truncated ? ' (truncated)' : ''}`,
529
+ ` sent: $${payload.total_sent_usd} (${payload.sent_count})`,
530
+ ` received: $${payload.total_received_usd} (${payload.received_count})`,
531
+ ` net: $${payload.net_usd}`,
532
+ ];
533
+ if (payload.non_usd_count > 0) {
534
+ lines.push(` non-USD: ${payload.non_usd_count} receipt(s) (excluded from totals)`);
535
+ }
536
+ if (payload.items?.length) {
537
+ lines.push('');
538
+ for (const r of payload.items) {
539
+ lines.push(` ${r.timestamp} ${String(r.direction).padEnd(8)} ${String(r.decision).padEnd(6)} ${r.amount ?? '?'} ${r.currency ?? ''} ${r.tx_signature ?? '(no tx)'}`);
540
+ }
541
+ }
542
+ return lines.join('\n');
543
+ });
544
+ }
545
+ async function runDaily(args) {
546
+ const { hostRef } = buildServerFromEnv();
547
+ const json = wantJson(args);
548
+ const days = numArg(args, '--days');
549
+ const result = await hostRef.dailyTransactions({ ...(days != null ? { days } : {}) });
550
+ printResult(result, json, (payload) => {
551
+ if (payload.status !== 'ok')
552
+ return formatStatusError(payload);
553
+ const lines = [
554
+ `daily ${payload.range.days}d (UTC)`,
555
+ ` ${'date'.padEnd(10)} ${'sent'.padStart(10)} ${'recv'.padStart(10)} ${'net'.padStart(10)} in/out`,
556
+ ];
557
+ for (const b of payload.daily ?? []) {
558
+ lines.push(` ${b.date.padEnd(10)} ${`$${b.sent_usd}`.padStart(10)} ${`$${b.received_usd}`.padStart(10)} ${`$${b.net_usd}`.padStart(10)} ${b.received_count}/${b.sent_count}`);
559
+ }
560
+ lines.push('');
561
+ lines.push(` totals: sent $${payload.totals.sent_usd} received $${payload.totals.received_usd} net $${payload.totals.net_usd}`);
562
+ if (payload.totals.non_usd_count > 0) {
563
+ lines.push(` non-USD receipts (excluded): ${payload.totals.non_usd_count}`);
564
+ }
565
+ return lines.join('\n');
566
+ });
567
+ }
568
+ async function runPay(args) {
569
+ const { hostRef } = buildServerFromEnv();
570
+ const json = wantJson(args);
571
+ const url = args.find((a) => /^https?:\/\//.test(a));
572
+ if (!url) {
573
+ process.stderr.write('usage: leash pay <link-url>\n');
574
+ process.exit(2);
575
+ }
576
+ const result = await hostRef.pay({ url });
577
+ printResult(result, json, (payload) => {
578
+ if (payload.status !== 'ok')
579
+ return formatStatusError(payload);
580
+ return [
581
+ `paid ${payload.amount} ${payload.currency} → ${payload.recipient}`,
582
+ ` tx_signature: ${payload.tx_signature}`,
583
+ ` receipt_hash: ${payload.receipt_hash}`,
584
+ ` explorer: ${payload.explorer_url}`,
585
+ ].join('\n');
586
+ });
587
+ }
588
+ async function runDoctor(_args) {
589
+ // Defer to leash-mcp doctor for the heavy lifting.
590
+ const { spawnSync } = await import('node:child_process');
591
+ const result = spawnSync('leash-mcp', ['doctor'], { stdio: 'inherit' });
592
+ process.exit(result.status ?? 0);
593
+ }
594
+ // ────────────────────────────────────────────────────────────────────────────
595
+ // helpers
596
+ // ────────────────────────────────────────────────────────────────────────────
597
+ function wantJson(args) {
598
+ return args.includes('--json');
599
+ }
600
+ function optArg(args, flag) {
601
+ const i = args.indexOf(flag);
602
+ if (i === -1)
603
+ return undefined;
604
+ return args[i + 1];
605
+ }
606
+ function numArg(args, flag) {
607
+ const v = optArg(args, flag);
608
+ if (v === undefined)
609
+ return undefined;
610
+ const n = Number(v);
611
+ return Number.isFinite(n) ? n : undefined;
612
+ }
613
+ /**
614
+ * Parse repeatable `--service name=endpoint` flags into the
615
+ * EIP-8004 `services[]` shape. Each occurrence must contain a single
616
+ * `=` separating the (1-64 char) name from a valid URL endpoint.
617
+ *
618
+ * Examples:
619
+ * leash agent create --service web=https://my-agent.xyz
620
+ * --service api=https://api.my-agent.xyz
621
+ */
622
+ function parseServiceFlags(args) {
623
+ const out = [];
624
+ for (let i = 0; i < args.length; i++) {
625
+ if (args[i] !== '--service')
626
+ continue;
627
+ const raw = args[i + 1];
628
+ if (!raw) {
629
+ throw new Error('--service requires a value of the form `name=https://endpoint`');
630
+ }
631
+ const eq = raw.indexOf('=');
632
+ if (eq <= 0 || eq === raw.length - 1) {
633
+ throw new Error(`--service must be of the form \`name=https://endpoint\` (got: ${JSON.stringify(raw)})`);
634
+ }
635
+ const name = raw.slice(0, eq).trim();
636
+ const endpoint = raw.slice(eq + 1).trim();
637
+ if (name.length === 0 || name.length > 64) {
638
+ throw new Error(`--service name must be 1-64 chars (got: ${JSON.stringify(name)})`);
639
+ }
640
+ try {
641
+ new URL(endpoint);
642
+ }
643
+ catch {
644
+ throw new Error(`--service endpoint is not a valid URL: ${endpoint}`);
645
+ }
646
+ if (name === 'receipts') {
647
+ throw new Error('--service "receipts" is reserved — Leash auto-injects it. Use a different name.');
648
+ }
649
+ out.push({ name, endpoint });
650
+ }
651
+ return out;
652
+ }
653
+ function formatStatusError(payload) {
654
+ if (payload.status === 'no_agent')
655
+ return 'no agent configured (run `leash agent create`)';
656
+ return `${payload.status}: ${payload.message ?? '(no message)'}`;
657
+ }
658
+ /**
659
+ * Render a `LeashToolResult` either as the raw JSON payload (when
660
+ * `--json` is set) or via a command-specific human formatter.
661
+ *
662
+ * The formatter receives the parsed payload typed as `any` because
663
+ * each command's payload shape is host-specific (defined inside the
664
+ * `LeashHost` impl, not exposed as a runtime contract). We keep the
665
+ * outer surface narrow by walling this off behind one helper.
666
+ */
667
+ function printResult(result, json,
668
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
669
+ format) {
670
+ const text = result.content[0]?.type === 'text' ? result.content[0].text : '{}';
671
+ let payload = {};
672
+ try {
673
+ payload = JSON.parse(text);
674
+ }
675
+ catch {
676
+ payload = {};
677
+ }
678
+ if (json) {
679
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
680
+ return;
681
+ }
682
+ process.stdout.write(`${format(payload)}\n`);
683
+ }
684
+ /** Cast a parsed-JSON payload to `any` for ergonomic field access in formatters. */
685
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
686
+ function asAny(p) {
687
+ return p;
688
+ }
689
+ function printHelp() {
690
+ process.stdout.write([
691
+ 'usage: leash <command> [options]',
692
+ '',
693
+ 'agent commands:',
694
+ ' agent create [--name N] [--description T] [--image URL]',
695
+ ' [--service name=https://endpoint] (repeatable)',
696
+ ' [--generate | --import --executive <secret>]',
697
+ ' two-step agent provisioning. Network is taken',
698
+ ' from LEASH_NETWORK (devnet|mainnet). Run once to',
699
+ ' get funding instructions, fund the printed',
700
+ ' pubkey with SOL, then run again to mint.',
701
+ ' `--service` advertises EIP-8004 endpoints other',
702
+ ' agents/humans use to find this agent (e.g.',
703
+ ' `--service web=https://my-agent.xyz`).',
704
+ ' agent show print active agent identity',
705
+ ' agent export [--out PATH] export agent.json (alias for `leash-mcp export`)',
706
+ ' agent import <PATH> install an agent.json',
707
+ '',
708
+ 'treasury commands:',
709
+ ' treasury balance list SOL + token balances',
710
+ ' treasury withdraw --to W --amount N [--symbol|--mint X]',
711
+ ' owner-driven on-chain withdrawal',
712
+ ' treasury limit [--token USDC|USDG|USDT]',
713
+ ' show the active SPL Approve delegation +',
714
+ ' treasury balance for a stable',
715
+ ' treasury set-limit [--token USDC|USDG|USDT]',
716
+ ' (--unlimited | --revoke | --amount N)',
717
+ " update the executive's SPL spend authority.",
718
+ ' `--unlimited` (default) writes u64::MAX,',
719
+ ' `--revoke` zeros it, `--amount N` caps at N',
720
+ ' human units (e.g. --amount 100 = $100 USDC).',
721
+ '',
722
+ 'marketplace + reputation:',
723
+ ' discover [-q QUERY] [--max-price N] [--pricing-type T] [--source leash|pay-skills|all] [--limit N]',
724
+ ' Searches the Leash marketplace + Solana Foundation pay-skills registry (merged).',
725
+ ' discover endpoints <fqn> expand a pay-skills provider into its paid endpoint',
726
+ ' URLs (mirrors `pay skills endpoints <fqn>`). Take the',
727
+ ' <fqn> from the `(fqn: ...)` hint of `leash discover`.',
728
+ ' reputation <agent_mint> [--network solana-devnet|solana-mainnet]',
729
+ '',
730
+ 'activity:',
731
+ ' receipts [--limit N] [--direction outgoing|incoming|both]',
732
+ ' paginated receipt feed for the active agent',
733
+ ' receipt <receipt_hash> fetch a single ReceiptV1 by its hash',
734
+ ' (the same hash the explorer renders at /receipt/{hash})',
735
+ ' history [--days N] [--limit N] [--direction outgoing|incoming|both]',
736
+ ' receipts in the last N days (default 7) plus',
737
+ ' running totals: sent/received/net in USD',
738
+ ' daily [--days N] per-day P&L buckets for the last N days',
739
+ ' (default 7); stables summed at 1:1 USD',
740
+ ' pay <link-url> [--max-spend-usdc N]',
741
+ '',
742
+ 'misc:',
743
+ ' doctor config + RPC + API reachability check',
744
+ ' help, -h show this message',
745
+ ' version, -v show installed version',
746
+ '',
747
+ 'global flags:',
748
+ ' --json emit the raw LeashToolResult payload',
749
+ '',
750
+ 'config: ~/.config/leash/agent.json or LEASH_AGENT_MINT + LEASH_EXECUTIVE_KEY env vars',
751
+ 'docs: https://leash.market/docs/cli',
752
+ '',
753
+ ].join('\n'));
754
+ }
755
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@leashmarket/cli` programmatic surface.
3
+ *
4
+ * The package's primary use is the `leash` binary; the JS entry point
5
+ * exists for future embeddability (e.g. running CLI commands in
6
+ * tests without shelling out). For now we re-export the host
7
+ * builder so callers can wire their own surfaces over the same
8
+ * `LeashHost` the CLI uses internally.
9
+ */
10
+ export { buildServerFromEnv, HostRef } from '@leashmarket/mcp';
11
+ export type { LeashHost, LeashToolResult } from '@leashmarket/mcp-core';
12
+ export declare const LEASH_CLI_VERSION = "0.1.0";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExE,eAAO,MAAM,iBAAiB,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `@leashmarket/cli` programmatic surface.
3
+ *
4
+ * The package's primary use is the `leash` binary; the JS entry point
5
+ * exists for future embeddability (e.g. running CLI commands in
6
+ * tests without shelling out). For now we re-export the host
7
+ * builder so callers can wire their own surfaces over the same
8
+ * `LeashHost` the CLI uses internally.
9
+ */
10
+ export { buildServerFromEnv, HostRef } from '@leashmarket/mcp';
11
+ export const LEASH_CLI_VERSION = '0.1.0';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "publishConfig": {
3
+ "access": "public"
4
+ },
5
+ "name": "@leashmarket/cli",
6
+ "version": "0.1.0",
7
+ "description": "Human-driven Leash CLI. Mint agents, check balances, pay paywalls, discover services, and inspect reputation from your terminal.",
8
+ "private": false,
9
+ "type": "module",
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "bin": {
13
+ "leash": "./dist/cli.js"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md"
24
+ ],
25
+ "dependencies": {
26
+ "@leashmarket/mcp": "0.1.0",
27
+ "@leashmarket/mcp-core": "0.1.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^22.10.2",
31
+ "tsx": "^4.20.0",
32
+ "typescript": "^5.7.2",
33
+ "vitest": "^2.1.8"
34
+ },
35
+ "scripts": {
36
+ "build": "tsc -p tsconfig.build.json && chmod +x ./dist/cli.js",
37
+ "typecheck": "tsc -p tsconfig.json",
38
+ "lint": "echo lint:cli",
39
+ "test": "vitest run",
40
+ "dev": "node --import tsx ./src/cli.ts"
41
+ }
42
+ }