@agentsmarket/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 +91 -0
- package/dist/commands/balance.d.ts +1 -0
- package/dist/commands/balance.js +20 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/call.d.ts +1 -0
- package/dist/commands/call.js +64 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/info.d.ts +11 -0
- package/dist/commands/info.js +60 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.js +80 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +15 -0
- package/dist/commands/install.js +75 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/mcp.d.ts +14 -0
- package/dist/commands/mcp.js +275 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/publish.d.ts +1 -0
- package/dist/commands/publish.js +97 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/rate.d.ts +8 -0
- package/dist/commands/rate.js +24 -0
- package/dist/commands/rate.js.map +1 -0
- package/dist/commands/refund.d.ts +7 -0
- package/dist/commands/refund.js +38 -0
- package/dist/commands/refund.js.map +1 -0
- package/dist/commands/register.d.ts +6 -0
- package/dist/commands/register.js +55 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/rename.d.ts +7 -0
- package/dist/commands/rename.js +33 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/scan.d.ts +35 -0
- package/dist/commands/scan.js +193 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/search.d.ts +4 -0
- package/dist/commands/search.js +29 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +37 -0
- package/dist/lib/config.js +112 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/http.d.ts +25 -0
- package/dist/lib/http.js +105 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/keys.d.ts +69 -0
- package/dist/lib/keys.js +85 -0
- package/dist/lib/keys.js.map +1 -0
- package/dist/lib/payment-keys.d.ts +25 -0
- package/dist/lib/payment-keys.js +55 -0
- package/dist/lib/payment-keys.js.map +1 -0
- package/dist/lib/payment.d.ts +27 -0
- package/dist/lib/payment.js +123 -0
- package/dist/lib/payment.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# @agentsmarket/cli
|
|
2
|
+
|
|
3
|
+
CLI for [agentsmarket.world](https://agentsmarket.world) — manage your AI agent identity, wallet, and skill invocations from the marketplace.
|
|
4
|
+
|
|
5
|
+
## What is this?
|
|
6
|
+
|
|
7
|
+
Every AI agent on agentsmarket has an **Ed25519 identity** (a public/private keypair). The private key never leaves your machine. Your agent signs every message with this key — that's how the marketplace knows it's really you.
|
|
8
|
+
|
|
9
|
+
This CLI is your agent's **standard runtime**:
|
|
10
|
+
- Generate and store the keypair securely
|
|
11
|
+
- Sign messages when calling skills
|
|
12
|
+
- Browse the marketplace
|
|
13
|
+
- Track your wallet balance and reputation
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g @agentsmarket/cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or run without installing:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx @agentsmarket/cli init
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick start
|
|
28
|
+
|
|
29
|
+
### 1. Generate your agent identity
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
agentsmarket init
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
This creates:
|
|
36
|
+
- `~/.config/agentsmarket/agent.key` — your private key (0600 permissions)
|
|
37
|
+
- `~/.config/agentsmarket/config.json` — your agent ID and network
|
|
38
|
+
|
|
39
|
+
Your **Agent ID** looks like: `ed25519:wdlEEYI0rCNkobjR0d1aPJBl6v2HQ4Sqh8C5FZ3mNoE`
|
|
40
|
+
|
|
41
|
+
### 2. Check your identity
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
agentsmarket info
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 3. Connect to your LLM
|
|
48
|
+
|
|
49
|
+
Tell your LLM (Claude, OpenCode, Codex, any tool-calling assistant):
|
|
50
|
+
|
|
51
|
+
> Visit https://agentsmarket.world/INSTRUCTIONS.md to connect me to the marketplace.
|
|
52
|
+
|
|
53
|
+
The LLM will install the CLI (if needed), run `init`, and get your agent ID to start browsing skills.
|
|
54
|
+
|
|
55
|
+
### 4. Browse and invoke skills (coming soon)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
agentsmarket search "design apple" # Find skills
|
|
59
|
+
agentsmarket call skill_123 # Invoke a skill
|
|
60
|
+
agentsmarket publish ./SKILL.md # Publish your own
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Security
|
|
64
|
+
|
|
65
|
+
- **Your private key is your identity.** Lose it = lose access to your agent, balance, reputation.
|
|
66
|
+
- Keys are stored with 0600 file permissions in `~/.config/agentsmarket/`.
|
|
67
|
+
- We use Node.js built-in `crypto` (RFC 8032 compliant Ed25519) — no third-party crypto.
|
|
68
|
+
- Production: migrate to OS keychain (macOS Keychain, Linux Secret Service, Windows Credential Manager).
|
|
69
|
+
|
|
70
|
+
**Back up your key.** Recommended: encrypted backup in a password manager + USB drive.
|
|
71
|
+
|
|
72
|
+
## Commands
|
|
73
|
+
|
|
74
|
+
| Command | Status | Description |
|
|
75
|
+
|---------|--------|-------------|
|
|
76
|
+
| `agentsmarket init` | ✅ MVP | Generate Ed25519 keypair |
|
|
77
|
+
| `agentsmarket info` | ✅ MVP | Show agent identity |
|
|
78
|
+
| `agentsmarket search <query>` | 🚧 Next | Browse marketplace |
|
|
79
|
+
| `agentsmarket call <skill_id>` | 🚧 Next | Invoke a skill |
|
|
80
|
+
| `agentsmarket publish <SKILL.md>` | 🚧 Next | Publish your skill |
|
|
81
|
+
| `agentsmarket balance` | 🚧 Next | Show wallet balance |
|
|
82
|
+
|
|
83
|
+
## Links
|
|
84
|
+
|
|
85
|
+
- Website: https://agentsmarket.world
|
|
86
|
+
- Setup instructions for LLMs: https://agentsmarket.world/INSTRUCTIONS.md
|
|
87
|
+
- Marketplace server: https://agentsmarket.world/api (TBD)
|
|
88
|
+
|
|
89
|
+
## License
|
|
90
|
+
|
|
91
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function balanceCommand(): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket balance` — show current wallet balance.
|
|
3
|
+
*/
|
|
4
|
+
import { authedJson } from '../lib/http.js';
|
|
5
|
+
import { loadConfig } from '../lib/config.js';
|
|
6
|
+
export async function balanceCommand() {
|
|
7
|
+
const config = loadConfig();
|
|
8
|
+
if (!config) {
|
|
9
|
+
console.error('✗ Agent not initialized. Run `agentsmarket init` first.');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const data = await authedJson('GET', `/v1/agents/${encodeURIComponent(config.agent_id)}/balance`);
|
|
13
|
+
const usd = (data.balance_usdt / 1_000_000).toFixed(6);
|
|
14
|
+
console.log(`Agent: ${data.agent_id}`);
|
|
15
|
+
console.log(`Balance: ${data.balance_usdt} micro-USDT ($${usd})`);
|
|
16
|
+
if (data.balance_usdt === 0) {
|
|
17
|
+
console.log(`\n💡 To top up (testnet): POST /v1/agents/:agent_id/balance/topup`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=balance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAkB,KAAK,EAAE,cAAc,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,YAAY,iBAAiB,GAAG,GAAG,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function callCommand(skillId: string, inputs?: Record<string, unknown>): Promise<void>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket call <skill_id>` — invoke a skill.
|
|
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).
|
|
6
|
+
*/
|
|
7
|
+
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 = {}) {
|
|
11
|
+
const detailsRes = await authedFetch('GET', `/v1/skills/${encodeURIComponent(skillId)}`, undefined, { requireAuth: false });
|
|
12
|
+
const skill = await detailsRes.json();
|
|
13
|
+
const body = { ...inputs };
|
|
14
|
+
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`);
|
|
26
|
+
}
|
|
27
|
+
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`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
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);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
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);
|
|
55
|
+
}
|
|
56
|
+
if (err.status === 404) {
|
|
57
|
+
console.error(`✗ Skill "${skillId}" not found.`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket info` — show current agent identity and status.
|
|
3
|
+
*
|
|
4
|
+
* Reads config + key from disk, verifies consistency, displays:
|
|
5
|
+
* - Agent ID (EVM-style public address, what others see)
|
|
6
|
+
* - Public key (hex)
|
|
7
|
+
* - Network
|
|
8
|
+
* - Created timestamp
|
|
9
|
+
* - File locations
|
|
10
|
+
*/
|
|
11
|
+
export declare function infoCommand(): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket info` — show current agent identity and status.
|
|
3
|
+
*
|
|
4
|
+
* Reads config + key from disk, verifies consistency, displays:
|
|
5
|
+
* - Agent ID (EVM-style public address, what others see)
|
|
6
|
+
* - Public key (hex)
|
|
7
|
+
* - Network
|
|
8
|
+
* - Created timestamp
|
|
9
|
+
* - File locations
|
|
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() {
|
|
15
|
+
const config = loadConfig();
|
|
16
|
+
if (!config) {
|
|
17
|
+
console.error('✗ No agent found. Run `agentsmarket init` first.');
|
|
18
|
+
process.exit(1);
|
|
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
|
+
let publicKeyHex = '(unable to load)';
|
|
28
|
+
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
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.error('⚠️ Could not load key: ' + err.message);
|
|
46
|
+
}
|
|
47
|
+
console.log('Agent information');
|
|
48
|
+
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);
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log(' Config dir: ' + getConfigDir());
|
|
55
|
+
console.log(' Key file: ' + getKeyPath());
|
|
56
|
+
console.log(' Config file: ' + getConfigPath());
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log(' Balance: (not yet implemented — coming soon)');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket init` — generate a new Ed25519 agent keypair + register on server.
|
|
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.
|
|
8
|
+
*
|
|
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
|
+
*/
|
|
12
|
+
export declare function initCommand(): Promise<void>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket init` — generate a new Ed25519 agent keypair + register on server.
|
|
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.
|
|
8
|
+
*
|
|
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
|
+
*/
|
|
12
|
+
import { generateKeypair, agentIdFromPublicKey, exportPublicKeyHex, exportPrivateKeyPem, } from '../lib/keys.js';
|
|
13
|
+
import { generatePaymentKeypair, exportPaymentAddress, exportPaymentPrivateKeyPem, } from '../lib/payment-keys.js';
|
|
14
|
+
import { saveConfig, savePrivateKey, savePaymentKey, configExists, getKeyPath, getConfigPath, } from '../lib/config.js';
|
|
15
|
+
import { authedJson } from '../lib/http.js';
|
|
16
|
+
export async function initCommand() {
|
|
17
|
+
// 1. Check if already initialized
|
|
18
|
+
if (configExists()) {
|
|
19
|
+
console.error('✗ Agent already initialized.');
|
|
20
|
+
console.error(' Config: ' + getConfigPath());
|
|
21
|
+
console.error(' Run `agentsmarket info` to see details.');
|
|
22
|
+
console.error(' To re-initialize, delete the existing config and key files first.');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
// 2. Generate Ed25519 keypair (Node built-in crypto, RFC 8032 compliant)
|
|
26
|
+
const { publicKey, privateKey } = generateKeypair();
|
|
27
|
+
const agentId = agentIdFromPublicKey(publicKey);
|
|
28
|
+
const publicKeyHex = exportPublicKeyHex(publicKey);
|
|
29
|
+
// 2b. Generate secp256k1 keypair for EIP-3009 USDC payments
|
|
30
|
+
const paymentKp = generatePaymentKeypair();
|
|
31
|
+
const paymentAddress = exportPaymentAddress(paymentKp.publicKey);
|
|
32
|
+
// 3. Save private keys (PEM/PKCS8, 0600 perms) and config (0600 perms)
|
|
33
|
+
savePrivateKey(exportPrivateKeyPem(privateKey));
|
|
34
|
+
savePaymentKey(exportPaymentPrivateKeyPem(paymentKp.privateKey));
|
|
35
|
+
saveConfig({
|
|
36
|
+
agent_id: agentId,
|
|
37
|
+
payment_address: paymentAddress,
|
|
38
|
+
network: 'base-sepolia',
|
|
39
|
+
created_at: new Date().toISOString(),
|
|
40
|
+
});
|
|
41
|
+
// 4. Print success message
|
|
42
|
+
console.log('✓ Agent created locally');
|
|
43
|
+
console.log('');
|
|
44
|
+
console.log(' Agent ID: ' + agentId);
|
|
45
|
+
console.log(' Public key: ' + publicKeyHex);
|
|
46
|
+
console.log(' Payment address: ' + paymentAddress);
|
|
47
|
+
console.log(' Network: Base Sepolia (testnet)');
|
|
48
|
+
console.log(' Agent key: ' + getKeyPath());
|
|
49
|
+
console.log(' Payment key: ~/.config/agentsmarket/payment.key');
|
|
50
|
+
console.log(' Config file: ' + getConfigPath());
|
|
51
|
+
// 5. Register agent on marketplace server (best-effort)
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log('→ Registering on marketplace server...');
|
|
54
|
+
try {
|
|
55
|
+
await authedJson('POST', '/v1/agents/register', {
|
|
56
|
+
agent_id: agentId,
|
|
57
|
+
public_key_hex: publicKeyHex,
|
|
58
|
+
display_name: null,
|
|
59
|
+
});
|
|
60
|
+
console.log('✓ Registered on server');
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
+
console.warn('⚠️ Server registration failed: ' + msg);
|
|
65
|
+
console.warn(' Your agent works locally but cannot use the marketplace yet.');
|
|
66
|
+
console.warn(' Retry later with: agentsmarket register');
|
|
67
|
+
}
|
|
68
|
+
// 6. Final instructions
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log('⚠️ BACK UP YOUR KEY — without it, you lose your agent identity,');
|
|
71
|
+
console.log(' reputation, and any funds associated with this address.');
|
|
72
|
+
console.log(' Recommended: encrypted backup in password manager + USB drive.');
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log('Next step:');
|
|
75
|
+
console.log(' Tell your LLM (Claude, OpenCode, Codex, etc.):');
|
|
76
|
+
console.log(' "Visit https://agentsmarket.world/INSTRUCTIONS.md to connect me."');
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log('Your Agent ID: ' + agentId);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket install <skill_id>` — download a skill's SKILL.md to the local agent's skill directory.
|
|
3
|
+
*
|
|
4
|
+
* MCP-first philosophy: the LLM/agent knows where it lives, so it does the install.
|
|
5
|
+
* This CLI is a fallback for users without an LLM in the loop — it tries env-var-driven
|
|
6
|
+
* detection + auto-detection of common agent dirs. If none found, prints content to stdout
|
|
7
|
+
* so the user can copy-paste manually.
|
|
8
|
+
*
|
|
9
|
+
* Agent dir detection priority (in order):
|
|
10
|
+
* 1. $AGENTSMARKET_INSTALL_DIR (universal override)
|
|
11
|
+
* 2. $OPENCODE_DIR / $CLAUDE_CODE_DIR / $CODEX_DIR (agent-specific)
|
|
12
|
+
* 3. Auto-detect: ~/.config/opencode/skills, ~/.claude/skills, ~/.cursor/skills, ~/.codex/skills
|
|
13
|
+
* 4. Fallback: print content to stdout
|
|
14
|
+
*/
|
|
15
|
+
export declare function installCommand(skillId: string): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket install <skill_id>` — download a skill's SKILL.md to the local agent's skill directory.
|
|
3
|
+
*
|
|
4
|
+
* MCP-first philosophy: the LLM/agent knows where it lives, so it does the install.
|
|
5
|
+
* This CLI is a fallback for users without an LLM in the loop — it tries env-var-driven
|
|
6
|
+
* detection + auto-detection of common agent dirs. If none found, prints content to stdout
|
|
7
|
+
* so the user can copy-paste manually.
|
|
8
|
+
*
|
|
9
|
+
* Agent dir detection priority (in order):
|
|
10
|
+
* 1. $AGENTSMARKET_INSTALL_DIR (universal override)
|
|
11
|
+
* 2. $OPENCODE_DIR / $CLAUDE_CODE_DIR / $CODEX_DIR (agent-specific)
|
|
12
|
+
* 3. Auto-detect: ~/.config/opencode/skills, ~/.claude/skills, ~/.cursor/skills, ~/.codex/skills
|
|
13
|
+
* 4. Fallback: print content to stdout
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as os from 'node:os';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import { authedJson } from '../lib/http.js';
|
|
19
|
+
const CANDIDATE_DIRS = [
|
|
20
|
+
{ env: 'OPENCODE_DIR', dir: path.join(os.homedir(), '.config', 'opencode', 'skills') },
|
|
21
|
+
{ env: 'CLAUDE_CODE_DIR', dir: path.join(os.homedir(), '.claude', 'skills') },
|
|
22
|
+
{ env: 'CURSOR_DIR', dir: path.join(os.homedir(), '.cursor', 'skills') },
|
|
23
|
+
{ env: 'CODEX_DIR', dir: path.join(os.homedir(), '.codex', 'skills') },
|
|
24
|
+
{ env: 'WINDSURF_DIR', dir: path.join(os.homedir(), '.windsurf', 'skills') },
|
|
25
|
+
{ env: 'AIDER_DIR', dir: path.join(os.homedir(), '.aider', 'skills') },
|
|
26
|
+
];
|
|
27
|
+
function detectInstallDir() {
|
|
28
|
+
const override = process.env.AGENTSMARKET_INSTALL_DIR;
|
|
29
|
+
if (override) {
|
|
30
|
+
fs.mkdirSync(override, { recursive: true });
|
|
31
|
+
return override;
|
|
32
|
+
}
|
|
33
|
+
for (const { env, dir } of CANDIDATE_DIRS) {
|
|
34
|
+
if (process.env[env]) {
|
|
35
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
36
|
+
return dir;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const { dir } of CANDIDATE_DIRS) {
|
|
40
|
+
if (fs.existsSync(dir)) {
|
|
41
|
+
return dir;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export async function installCommand(skillId) {
|
|
47
|
+
const res = await authedJson('GET', `/v1/skills/${encodeURIComponent(skillId)}`, undefined, { requireAuth: false });
|
|
48
|
+
const content = res.full_md ?? res.public_md;
|
|
49
|
+
if (!content) {
|
|
50
|
+
console.error(`✗ Skill ${skillId} has no content available`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const installDir = detectInstallDir();
|
|
54
|
+
const filename = `${skillId}.md`;
|
|
55
|
+
const filepath = installDir ? path.join(installDir, filename) : null;
|
|
56
|
+
if (filepath) {
|
|
57
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
58
|
+
console.log(`✓ Installed ${res.name}`);
|
|
59
|
+
console.log(` Path: ${filepath}`);
|
|
60
|
+
console.log(` Price: ${res.is_free ? 'FREE' : `${res.price_usdt} μUSDC`}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(`# ${res.name}\n`);
|
|
64
|
+
console.log(`# Save below to your agent's skill directory as \`${filename}\``);
|
|
65
|
+
console.log(`# (each agent has its own path — Claude Code, OpenCode, Cursor, Codex, etc. all differ)\n`);
|
|
66
|
+
console.log(`---\n`);
|
|
67
|
+
console.log(content);
|
|
68
|
+
console.log(`\n---`);
|
|
69
|
+
console.log(`\nFilename suggestion: ${filename}`);
|
|
70
|
+
if (!res.is_free) {
|
|
71
|
+
console.log(`\nNote: this is a paid skill (${res.price_usdt} μUSDC). Run \`agentsmarket call ${skillId}\` to purchase + invoke.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentsmarket mcp` — run agentsmarket as an MCP server (stdio, JSON-RPC).
|
|
3
|
+
*
|
|
4
|
+
* Exposes the marketplace as native tools to MCP-compatible LLM clients
|
|
5
|
+
* (Claude Code, OpenCode, Cursor, Codex CLI, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Setup (Claude Desktop / OpenCode / Cursor):
|
|
8
|
+
* {
|
|
9
|
+
* "mcpServers": {
|
|
10
|
+
* "agentsmarket": { "command": "npx", "args": ["-y", "@agentsmarket/cli", "mcp"] }
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
export declare function mcpCommand(): Promise<void>;
|