@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 +153 -0
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +755 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/package.json +42 -0
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|