basedagents 0.1.3 → 0.3.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 +11 -0
- package/bin/basedagents.mjs +3 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +57 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/register.d.ts +8 -0
- package/dist/cli/register.d.ts.map +1 -0
- package/dist/cli/register.js +222 -0
- package/dist/cli/register.js.map +1 -0
- package/dist/cli/validate.d.ts +13 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +329 -0
- package/dist/cli/validate.js.map +1 -0
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -10,6 +10,17 @@ npm install basedagents
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## CLI
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx basedagents validate # validates ./basedagents.json
|
|
17
|
+
npx basedagents validate path/to/file # validates a specific file
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Output shows schema errors, actionable recommendations (missing fields that affect reputation), and a summary. Exits with code 0 if valid, 1 if errors.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
13
24
|
## Quick Start
|
|
14
25
|
|
|
15
26
|
### Register a new agent
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8BH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B1C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* basedagents CLI
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* basedagents validate [file] Validate a manifest before registration
|
|
6
|
+
* basedagents validate --help Show help
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from './validate.js';
|
|
9
|
+
import { register } from './register.js';
|
|
10
|
+
const VERSION = '0.2.0';
|
|
11
|
+
const HELP = `
|
|
12
|
+
basedagents — CLI for the BasedAgents agent registry
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
basedagents <command> [options]
|
|
16
|
+
|
|
17
|
+
Commands:
|
|
18
|
+
register Interactively register a new agent
|
|
19
|
+
validate [file] Validate a basedagents.json manifest before registration
|
|
20
|
+
Defaults to ./basedagents.json if no file given
|
|
21
|
+
|
|
22
|
+
Options:
|
|
23
|
+
--version, -v Print version
|
|
24
|
+
--help, -h Show this help message
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
npx basedagents register
|
|
28
|
+
npx basedagents validate
|
|
29
|
+
npx basedagents validate ./my-agent/basedagents.json
|
|
30
|
+
|
|
31
|
+
Docs: https://basedagents.ai/docs
|
|
32
|
+
`;
|
|
33
|
+
export async function main() {
|
|
34
|
+
const args = process.argv.slice(2);
|
|
35
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
36
|
+
console.log(HELP);
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
40
|
+
console.log(VERSION);
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
const command = args[0];
|
|
44
|
+
if (command === 'register') {
|
|
45
|
+
await register(args.slice(1));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (command === 'validate') {
|
|
49
|
+
const file = args[1] ?? 'basedagents.json';
|
|
50
|
+
const result = validate(file);
|
|
51
|
+
process.exit(result.valid ? 0 : 1);
|
|
52
|
+
}
|
|
53
|
+
console.error(`\nUnknown command: ${command}`);
|
|
54
|
+
console.error(`Run 'basedagents --help' for usage.\n`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBZ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* basedagents register
|
|
3
|
+
*
|
|
4
|
+
* Interactive terminal flow for registering a new agent.
|
|
5
|
+
* Generates a keypair, prompts for profile info, solves PoW, and submits.
|
|
6
|
+
*/
|
|
7
|
+
export declare function register(args: string[]): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/cli/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgEH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqL5D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* basedagents register
|
|
3
|
+
*
|
|
4
|
+
* Interactive terminal flow for registering a new agent.
|
|
5
|
+
* Generates a keypair, prompts for profile info, solves PoW, and submits.
|
|
6
|
+
*/
|
|
7
|
+
import { createInterface } from 'readline';
|
|
8
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { generateKeypair, serializeKeypair, publicKeyToAgentId, solveProofOfWorkAsync } from '../index.js';
|
|
12
|
+
import { RegistryClient } from '../index.js';
|
|
13
|
+
// ─── ANSI ───
|
|
14
|
+
const R = '\x1b[0m';
|
|
15
|
+
const bold = (s) => `\x1b[1m${s}${R}`;
|
|
16
|
+
const dim = (s) => `\x1b[2m${s}${R}`;
|
|
17
|
+
const red = (s) => `\x1b[31m${s}${R}`;
|
|
18
|
+
const yellow = (s) => `\x1b[33m${s}${R}`;
|
|
19
|
+
const green = (s) => `\x1b[32m${s}${R}`;
|
|
20
|
+
const cyan = (s) => `\x1b[36m${s}${R}`;
|
|
21
|
+
const API_URL = process.env.BASEDAGENTS_API_URL ?? 'https://api.basedagents.ai';
|
|
22
|
+
// ─── Readline helpers ───
|
|
23
|
+
function makeRl() {
|
|
24
|
+
return createInterface({ input: process.stdin, output: process.stdout });
|
|
25
|
+
}
|
|
26
|
+
function prompt(rl, question) {
|
|
27
|
+
return new Promise(resolve => rl.question(question, answer => resolve(answer.trim())));
|
|
28
|
+
}
|
|
29
|
+
async function ask(rl, label, defaultVal, required = false) {
|
|
30
|
+
const hint = defaultVal ? dim(` (${defaultVal})`) : required ? dim(' (required)') : dim(' (optional, Enter to skip)');
|
|
31
|
+
while (true) {
|
|
32
|
+
const answer = await prompt(rl, ` ${label}${hint}: `);
|
|
33
|
+
const value = answer || defaultVal || '';
|
|
34
|
+
if (required && !value) {
|
|
35
|
+
console.log(red(` → Required.`));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function confirm(rl, question, defaultYes = true) {
|
|
42
|
+
const hint = defaultYes ? dim('Y/n') : dim('y/N');
|
|
43
|
+
const answer = await prompt(rl, ` ${question} [${hint}]: `);
|
|
44
|
+
if (!answer)
|
|
45
|
+
return defaultYes;
|
|
46
|
+
return answer.toLowerCase().startsWith('y');
|
|
47
|
+
}
|
|
48
|
+
// ─── PoW progress spinner ───
|
|
49
|
+
const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
50
|
+
let spinnerIdx = 0;
|
|
51
|
+
function showProgress(attempts) {
|
|
52
|
+
const spin = SPINNER[spinnerIdx++ % SPINNER.length];
|
|
53
|
+
process.stdout.write(`\r ${spin} Solving proof-of-work... ${cyan(attempts.toLocaleString())} hashes`);
|
|
54
|
+
}
|
|
55
|
+
// ─── Slugify for filename ───
|
|
56
|
+
function slugify(s) {
|
|
57
|
+
return s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
58
|
+
}
|
|
59
|
+
// ─── Main register flow ───
|
|
60
|
+
export async function register(args) {
|
|
61
|
+
const apiUrl = args.includes('--api') ? args[args.indexOf('--api') + 1] : API_URL;
|
|
62
|
+
const dryRun = args.includes('--dry-run');
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log(bold('basedagents register'));
|
|
65
|
+
console.log(dim('Register a new agent on basedagents.ai'));
|
|
66
|
+
console.log('');
|
|
67
|
+
const rl = makeRl();
|
|
68
|
+
try {
|
|
69
|
+
// ── Profile prompts ──
|
|
70
|
+
console.log(bold('Agent Profile'));
|
|
71
|
+
console.log(dim(' Required fields are marked. Everything else is optional but improves discoverability and reputation.'));
|
|
72
|
+
console.log('');
|
|
73
|
+
const name = await ask(rl, 'Agent name', undefined, true);
|
|
74
|
+
const description = await ask(rl, 'Description (what does this agent do?)', undefined, true);
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log(dim(' Capabilities: comma-separated list of what your agent can do.'));
|
|
77
|
+
console.log(dim(` Known values: code-review, code-generation, analysis, reasoning, search,`));
|
|
78
|
+
console.log(dim(` planning, data-analysis, summarization, tool-use, web-search`));
|
|
79
|
+
const capInput = await ask(rl, 'Capabilities', undefined, true);
|
|
80
|
+
const capabilities = capInput.split(',').map(s => s.trim()).filter(Boolean);
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log(dim(' Protocols: how your agent accepts connections.'));
|
|
83
|
+
console.log(dim(` Options: https, mcp, a2a, websocket, grpc, openapi`));
|
|
84
|
+
const protoInput = await ask(rl, 'Protocols', 'https');
|
|
85
|
+
const protocols = protoInput.split(',').map(s => s.trim()).filter(Boolean);
|
|
86
|
+
console.log('');
|
|
87
|
+
const homepage = await ask(rl, 'Homepage URL');
|
|
88
|
+
const contactEndpoint = await ask(rl, 'Verification endpoint URL');
|
|
89
|
+
if (!contactEndpoint) {
|
|
90
|
+
console.log(yellow(` ⚠ Without a contact endpoint your agent will stay in pending status.`));
|
|
91
|
+
console.log(yellow(` You can add it later with: ${cyan('client.updateProfile(kp, { contact_endpoint: "..." })')}`));
|
|
92
|
+
}
|
|
93
|
+
const organization = await ask(rl, 'Organization');
|
|
94
|
+
const version = await ask(rl, 'Version', '1.0.0');
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(dim(' Skills: npm/pypi/cargo packages your agent uses. Comma-separated.'));
|
|
97
|
+
console.log(dim(' Example: typescript, zod, langchain'));
|
|
98
|
+
console.log(dim(' These feed your Skill Trust reputation score (15% of total).'));
|
|
99
|
+
const skillsInput = await ask(rl, 'Skills');
|
|
100
|
+
const skills = skillsInput
|
|
101
|
+
? skillsInput.split(',').map(s => {
|
|
102
|
+
const trimmed = s.trim();
|
|
103
|
+
// detect registry prefix like "pypi:langchain"
|
|
104
|
+
const colonIdx = trimmed.indexOf(':');
|
|
105
|
+
if (colonIdx > 0) {
|
|
106
|
+
return { name: trimmed.slice(colonIdx + 1), registry: trimmed.slice(0, colonIdx) };
|
|
107
|
+
}
|
|
108
|
+
return { name: trimmed, registry: 'npm' };
|
|
109
|
+
}).filter(s => s.name)
|
|
110
|
+
: [];
|
|
111
|
+
// ── Summary ──
|
|
112
|
+
console.log('');
|
|
113
|
+
console.log('─'.repeat(52));
|
|
114
|
+
console.log(bold('Summary'));
|
|
115
|
+
console.log('─'.repeat(52));
|
|
116
|
+
const rows = [
|
|
117
|
+
['Name', name],
|
|
118
|
+
['Description', description.length > 60 ? description.slice(0, 60) + '…' : description],
|
|
119
|
+
['Capabilities', capabilities.join(', ')],
|
|
120
|
+
['Protocols', protocols.join(', ')],
|
|
121
|
+
...(homepage ? [['Homepage', homepage]] : []),
|
|
122
|
+
...(contactEndpoint ? [['Endpoint', contactEndpoint]] : []),
|
|
123
|
+
...(organization ? [['Org', organization]] : []),
|
|
124
|
+
['Version', version],
|
|
125
|
+
...(skills.length ? [['Skills', skills.map(s => `${s.registry}:${s.name}`).join(', ')]] : []),
|
|
126
|
+
];
|
|
127
|
+
for (const [k, v] of rows) {
|
|
128
|
+
console.log(` ${dim(k.padEnd(14))} ${v}`);
|
|
129
|
+
}
|
|
130
|
+
console.log('─'.repeat(52));
|
|
131
|
+
console.log('');
|
|
132
|
+
const proceed = await confirm(rl, 'Register this agent?');
|
|
133
|
+
if (!proceed) {
|
|
134
|
+
console.log(dim('\n Aborted.\n'));
|
|
135
|
+
rl.close();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// ── Keypair ──
|
|
139
|
+
console.log('');
|
|
140
|
+
process.stdout.write(' Generating Ed25519 keypair...');
|
|
141
|
+
const keypair = await generateKeypair();
|
|
142
|
+
const agentId = publicKeyToAgentId(keypair.publicKey);
|
|
143
|
+
console.log(` ${green('✓')}`);
|
|
144
|
+
// Save keypair
|
|
145
|
+
const keysDir = join(homedir(), '.basedagents', 'keys');
|
|
146
|
+
mkdirSync(keysDir, { recursive: true });
|
|
147
|
+
const slug = slugify(name);
|
|
148
|
+
let keypairPath = join(keysDir, `${slug}-keypair.json`);
|
|
149
|
+
// avoid collision
|
|
150
|
+
let i = 2;
|
|
151
|
+
while (existsSync(keypairPath)) {
|
|
152
|
+
keypairPath = join(keysDir, `${slug}-${i++}-keypair.json`);
|
|
153
|
+
}
|
|
154
|
+
writeFileSync(keypairPath, serializeKeypair(keypair), { mode: 0o600 });
|
|
155
|
+
console.log(` ${green('✓')} Keypair saved to ${cyan(keypairPath)}`);
|
|
156
|
+
console.log('');
|
|
157
|
+
console.log(yellow(` ⚠ Back this file up. It is your agent's private key.`));
|
|
158
|
+
console.log(yellow(` Losing it means losing control of ${cyan(agentId)}`));
|
|
159
|
+
console.log('');
|
|
160
|
+
if (dryRun) {
|
|
161
|
+
console.log(dim(' --dry-run: skipping registration.\n'));
|
|
162
|
+
rl.close();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// ── Proof-of-Work ──
|
|
166
|
+
const t0 = Date.now();
|
|
167
|
+
const { nonce } = await solveProofOfWorkAsync(keypair.publicKey, 22, { onProgress: showProgress });
|
|
168
|
+
const powMs = Date.now() - t0;
|
|
169
|
+
process.stdout.write(`\r ${green('✓')} Proof-of-work solved in ${cyan(Math.round(powMs / 1000) + 's')} (${cyan(nonce)}) \n`);
|
|
170
|
+
// ── Register ──
|
|
171
|
+
process.stdout.write(' Registering with basedagents.ai...');
|
|
172
|
+
const client = new RegistryClient(apiUrl);
|
|
173
|
+
const profile = {
|
|
174
|
+
name,
|
|
175
|
+
description,
|
|
176
|
+
capabilities,
|
|
177
|
+
protocols,
|
|
178
|
+
...(homepage ? { homepage } : {}),
|
|
179
|
+
...(contactEndpoint ? { contact_endpoint: contactEndpoint } : {}),
|
|
180
|
+
...(organization ? { organization } : {}),
|
|
181
|
+
version,
|
|
182
|
+
...(skills.length ? { skills } : {}),
|
|
183
|
+
};
|
|
184
|
+
const agent = await client.register(keypair, profile);
|
|
185
|
+
console.log(` ${green('✓')}`);
|
|
186
|
+
// ── Success ──
|
|
187
|
+
console.log('');
|
|
188
|
+
console.log('─'.repeat(52));
|
|
189
|
+
console.log(green(bold('✓ Agent registered!')));
|
|
190
|
+
console.log('─'.repeat(52));
|
|
191
|
+
console.log(` ${dim('Agent ID')} ${cyan(agent.id)}`);
|
|
192
|
+
console.log(` ${dim('Status')} ${agent.status}`);
|
|
193
|
+
console.log(` ${dim('Keypair')} ${keypairPath}`);
|
|
194
|
+
console.log(` ${dim('Profile')} https://basedagents.ai/agents/${agent.id}`);
|
|
195
|
+
console.log('─'.repeat(52));
|
|
196
|
+
console.log('');
|
|
197
|
+
if (agent.status === 'pending') {
|
|
198
|
+
console.log(dim(' Next steps:'));
|
|
199
|
+
if (!contactEndpoint) {
|
|
200
|
+
console.log(dim(' 1. Set a contact endpoint so the registry can verify your agent:'));
|
|
201
|
+
console.log(` ${cyan(`npx basedagents update --contact-endpoint https://your-agent.example.com/verify`)}`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
console.log(dim(' 1. Your agent will be probed automatically within 5 minutes.'));
|
|
205
|
+
console.log(dim(' Make sure your endpoint is reachable and returns 2xx.'));
|
|
206
|
+
}
|
|
207
|
+
console.log(dim(' 2. Once verified, status flips to active and you appear in the directory.'));
|
|
208
|
+
}
|
|
209
|
+
console.log('');
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
console.log('');
|
|
213
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
214
|
+
console.log(red(` ✗ Registration failed: ${msg}`));
|
|
215
|
+
console.log('');
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
rl.close();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/cli/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* basedagents validate
|
|
3
|
+
*
|
|
4
|
+
* Reads a basedagents.json manifest, validates it against the JSON Schema,
|
|
5
|
+
* and reports errors + actionable recommendations before registration.
|
|
6
|
+
*/
|
|
7
|
+
export interface ValidateResult {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
errorCount: number;
|
|
10
|
+
warningCount: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function validate(filePath: string): ValidateResult;
|
|
13
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6PH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAgGzD"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* basedagents validate
|
|
3
|
+
*
|
|
4
|
+
* Reads a basedagents.json manifest, validates it against the JSON Schema,
|
|
5
|
+
* and reports errors + actionable recommendations before registration.
|
|
6
|
+
*/
|
|
7
|
+
import Ajv from 'ajv';
|
|
8
|
+
import addFormats from 'ajv-formats';
|
|
9
|
+
import { readFileSync, existsSync } from 'fs';
|
|
10
|
+
import { resolve } from 'path';
|
|
11
|
+
// ─── Inline schema (works offline, no network dep) ───
|
|
12
|
+
const SCHEMA = {
|
|
13
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
14
|
+
$id: 'https://basedagents.ai/schema/manifest/0.1.json',
|
|
15
|
+
title: 'BasedAgents Manifest',
|
|
16
|
+
type: 'object',
|
|
17
|
+
required: ['manifest_version', 'identity', 'capabilities', 'protocols'],
|
|
18
|
+
additionalProperties: false,
|
|
19
|
+
properties: {
|
|
20
|
+
$schema: { type: 'string' },
|
|
21
|
+
manifest_version: { type: 'string', const: '0.1' },
|
|
22
|
+
identity: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
required: ['name', 'version', 'description'],
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
properties: {
|
|
27
|
+
name: { type: 'string', minLength: 1, maxLength: 100 },
|
|
28
|
+
version: { type: 'string', maxLength: 50 },
|
|
29
|
+
description: { type: 'string', minLength: 1, maxLength: 500 },
|
|
30
|
+
homepage: { type: 'string', format: 'uri' },
|
|
31
|
+
logo_url: { type: 'string', format: 'uri' },
|
|
32
|
+
contact_endpoint: { type: 'string', format: 'uri' },
|
|
33
|
+
contact_email: { type: 'string', format: 'email' },
|
|
34
|
+
organization: { type: 'string', maxLength: 100 },
|
|
35
|
+
organization_url: { type: 'string', format: 'uri' },
|
|
36
|
+
tags: { type: 'array', maxItems: 20, items: { type: 'string', maxLength: 50 } },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
runtime: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
additionalProperties: false,
|
|
42
|
+
properties: {
|
|
43
|
+
framework: { type: 'string' },
|
|
44
|
+
model: { type: 'string' },
|
|
45
|
+
model_provider: { type: 'string' },
|
|
46
|
+
language: { type: 'string' },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
capabilities: {
|
|
50
|
+
type: 'array', minItems: 1, maxItems: 50,
|
|
51
|
+
items: { type: 'string', minLength: 1, maxLength: 100 },
|
|
52
|
+
},
|
|
53
|
+
protocols: {
|
|
54
|
+
type: 'array', minItems: 1,
|
|
55
|
+
items: { type: 'string', enum: ['https', 'mcp', 'a2a', 'websocket', 'grpc', 'openapi'] },
|
|
56
|
+
},
|
|
57
|
+
tools: {
|
|
58
|
+
type: 'array', maxItems: 50,
|
|
59
|
+
items: {
|
|
60
|
+
type: 'object', required: ['name'], additionalProperties: false,
|
|
61
|
+
properties: {
|
|
62
|
+
name: { type: 'string', minLength: 1 },
|
|
63
|
+
registry: { type: 'string', enum: ['npm', 'pypi', 'cargo', 'clawhub'] },
|
|
64
|
+
version: { type: 'string' },
|
|
65
|
+
purpose: { type: 'string', maxLength: 200 },
|
|
66
|
+
private: { type: 'boolean' },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
permissions: {
|
|
71
|
+
type: 'object', additionalProperties: false,
|
|
72
|
+
properties: {
|
|
73
|
+
network: {
|
|
74
|
+
type: 'object', additionalProperties: false,
|
|
75
|
+
properties: {
|
|
76
|
+
outbound: { type: 'array', items: { type: 'string' } },
|
|
77
|
+
inbound: { type: 'boolean' },
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
data: {
|
|
81
|
+
type: 'object', additionalProperties: false,
|
|
82
|
+
properties: {
|
|
83
|
+
reads: { type: 'array', items: { type: 'string' } },
|
|
84
|
+
writes: { type: 'array', items: { type: 'string' } },
|
|
85
|
+
stores: { type: 'boolean' },
|
|
86
|
+
retains_pii: { type: 'boolean' },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
compute: {
|
|
90
|
+
type: 'object', additionalProperties: false,
|
|
91
|
+
properties: {
|
|
92
|
+
max_tokens_per_request: { type: 'integer', minimum: 1 },
|
|
93
|
+
max_concurrent_requests: { type: 'integer', minimum: 1 },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
safety: {
|
|
99
|
+
type: 'object', additionalProperties: false,
|
|
100
|
+
properties: {
|
|
101
|
+
content_policy: { type: 'string', enum: ['openai', 'anthropic', 'google', 'custom', 'none'] },
|
|
102
|
+
refuses: {
|
|
103
|
+
type: 'array',
|
|
104
|
+
items: {
|
|
105
|
+
type: 'string',
|
|
106
|
+
enum: [
|
|
107
|
+
'harmful_code_generation', 'secrets_exfiltration', 'prompt_injection',
|
|
108
|
+
'pii_collection', 'unauthorized_tool_calls', 'data_exfiltration',
|
|
109
|
+
'social_engineering', 'self_replication',
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
scope_bound: { type: 'boolean' },
|
|
114
|
+
human_in_loop: { type: 'boolean' },
|
|
115
|
+
human_in_loop_for: { type: 'array', items: { type: 'string' } },
|
|
116
|
+
sandboxed: { type: 'boolean' },
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
verification: {
|
|
120
|
+
type: 'object', additionalProperties: false,
|
|
121
|
+
properties: {
|
|
122
|
+
endpoint: { type: 'string', format: 'uri' },
|
|
123
|
+
protocol: { type: 'string', enum: ['https', 'mcp', 'a2a', 'websocket'] },
|
|
124
|
+
probe_instructions: { type: 'string', maxLength: 500 },
|
|
125
|
+
expected_response_ms: { type: 'integer', minimum: 100, maximum: 60000 },
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
registry: {
|
|
129
|
+
type: 'object', additionalProperties: false,
|
|
130
|
+
properties: {
|
|
131
|
+
id: { type: 'string', pattern: '^ag_[1-9A-HJ-NP-Za-km-z]+$' },
|
|
132
|
+
url: { type: 'string', format: 'uri' },
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
// ─── ANSI colors (no external dep) ───
|
|
138
|
+
const c = {
|
|
139
|
+
reset: '\x1b[0m',
|
|
140
|
+
bold: '\x1b[1m',
|
|
141
|
+
dim: '\x1b[2m',
|
|
142
|
+
red: '\x1b[31m',
|
|
143
|
+
yellow: '\x1b[33m',
|
|
144
|
+
green: '\x1b[32m',
|
|
145
|
+
cyan: '\x1b[36m',
|
|
146
|
+
white: '\x1b[37m',
|
|
147
|
+
};
|
|
148
|
+
const bold = (s) => `${c.bold}${s}${c.reset}`;
|
|
149
|
+
const red = (s) => `${c.red}${s}${c.reset}`;
|
|
150
|
+
const yellow = (s) => `${c.yellow}${s}${c.reset}`;
|
|
151
|
+
const green = (s) => `${c.green}${s}${c.reset}`;
|
|
152
|
+
const dim = (s) => `${c.dim}${s}${c.reset}`;
|
|
153
|
+
const cyan = (s) => `${c.cyan}${s}${c.reset}`;
|
|
154
|
+
// ─── Friendly error messages ───
|
|
155
|
+
function friendlyError(instancePath, message, params) {
|
|
156
|
+
if (!message)
|
|
157
|
+
return 'Invalid value';
|
|
158
|
+
// "must have required property 'X'"
|
|
159
|
+
if (params.missingProperty)
|
|
160
|
+
return `Required field ${bold(String(params.missingProperty))} is missing`;
|
|
161
|
+
// "must be equal to constant"
|
|
162
|
+
if (params.allowedValue !== undefined)
|
|
163
|
+
return `Must be ${bold(JSON.stringify(params.allowedValue))}`;
|
|
164
|
+
// "must be equal to one of the allowed values"
|
|
165
|
+
if (Array.isArray(params.allowedValues))
|
|
166
|
+
return `Must be one of: ${params.allowedValues.map(v => bold(String(v))).join(', ')}`;
|
|
167
|
+
// "must NOT have fewer than N items"
|
|
168
|
+
if (params.limit !== undefined && message.includes('fewer'))
|
|
169
|
+
return `Must contain at least ${bold(String(params.limit))} item${Number(params.limit) > 1 ? 's' : ''}`;
|
|
170
|
+
// "must NOT have more than N items"
|
|
171
|
+
if (params.limit !== undefined && message.includes('more'))
|
|
172
|
+
return `Cannot exceed ${bold(String(params.limit))} items`;
|
|
173
|
+
// "must match format"
|
|
174
|
+
if (params.format === 'uri')
|
|
175
|
+
return `Must be a valid URL (e.g. ${bold('https://example.com')})`;
|
|
176
|
+
if (params.format === 'email')
|
|
177
|
+
return `Must be a valid email address`;
|
|
178
|
+
// "must NOT have additional properties"
|
|
179
|
+
if (params.additionalProperty)
|
|
180
|
+
return `Unknown field ${bold(String(params.additionalProperty))} — check spelling`;
|
|
181
|
+
return message;
|
|
182
|
+
}
|
|
183
|
+
function getRecommendations(manifest) {
|
|
184
|
+
const recs = [];
|
|
185
|
+
const identity = (manifest.identity ?? {});
|
|
186
|
+
if (!manifest.tools || manifest.tools.length === 0) {
|
|
187
|
+
recs.push({
|
|
188
|
+
field: 'tools',
|
|
189
|
+
message: 'No skills/tools declared',
|
|
190
|
+
impact: 'Skill Trust component scores 0 (−15% of max reputation)',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (!identity.contact_endpoint) {
|
|
194
|
+
recs.push({
|
|
195
|
+
field: 'identity.contact_endpoint',
|
|
196
|
+
message: 'No probe endpoint',
|
|
197
|
+
impact: 'Agent cannot reach active status without a verifiable endpoint',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (!manifest.verification) {
|
|
201
|
+
recs.push({
|
|
202
|
+
field: 'verification',
|
|
203
|
+
message: 'No verification config',
|
|
204
|
+
impact: 'Verifiers won\'t know how to probe your agent',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (!manifest.safety) {
|
|
208
|
+
recs.push({
|
|
209
|
+
field: 'safety',
|
|
210
|
+
message: 'No safety declarations',
|
|
211
|
+
impact: 'Agents without declared safety constraints are harder to trust',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
if (!manifest.runtime) {
|
|
215
|
+
recs.push({
|
|
216
|
+
field: 'runtime',
|
|
217
|
+
message: 'No runtime info',
|
|
218
|
+
impact: 'Won\'t appear in framework/model-filtered searches',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (!identity.organization) {
|
|
222
|
+
recs.push({
|
|
223
|
+
field: 'identity.organization',
|
|
224
|
+
message: 'No organization set',
|
|
225
|
+
impact: 'Lower discoverability for enterprise search',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const data = (manifest.permissions?.data ?? {});
|
|
229
|
+
if (data.retains_pii === true && !identity.contact_email) {
|
|
230
|
+
recs.push({
|
|
231
|
+
field: 'identity.contact_email',
|
|
232
|
+
message: 'PII retention declared but no contact email',
|
|
233
|
+
impact: 'Required for compliance — GDPR/CCPA surface area',
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
return recs;
|
|
237
|
+
}
|
|
238
|
+
export function validate(filePath) {
|
|
239
|
+
const absPath = resolve(filePath);
|
|
240
|
+
console.log('');
|
|
241
|
+
// 1. File exists?
|
|
242
|
+
if (!existsSync(absPath)) {
|
|
243
|
+
console.log(red(`✗ File not found: ${filePath}`));
|
|
244
|
+
console.log(dim(` Create a basedagents.json in this directory to get started.`));
|
|
245
|
+
console.log(dim(` See: https://basedagents.ai/docs/manifest\n`));
|
|
246
|
+
return { valid: false, errorCount: 1, warningCount: 0 };
|
|
247
|
+
}
|
|
248
|
+
console.log(green(`✓`) + ` ${bold(filePath)}`);
|
|
249
|
+
// 2. Valid JSON?
|
|
250
|
+
let manifest;
|
|
251
|
+
try {
|
|
252
|
+
manifest = JSON.parse(readFileSync(absPath, 'utf-8'));
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
const msg = e instanceof SyntaxError ? e.message : String(e);
|
|
256
|
+
console.log(red(`✗ Invalid JSON: ${msg}\n`));
|
|
257
|
+
return { valid: false, errorCount: 1, warningCount: 0 };
|
|
258
|
+
}
|
|
259
|
+
console.log(green(`✓`) + ` Valid JSON`);
|
|
260
|
+
// 3. Schema validation
|
|
261
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
262
|
+
addFormats(ajv);
|
|
263
|
+
const valid = ajv.validate(SCHEMA, manifest);
|
|
264
|
+
const errors = ajv.errors ?? [];
|
|
265
|
+
console.log('');
|
|
266
|
+
console.log(bold(`Validating against manifest schema v0.1...`));
|
|
267
|
+
console.log('');
|
|
268
|
+
if (errors.length > 0) {
|
|
269
|
+
console.log(bold(red(`✗ ${errors.length} error${errors.length > 1 ? 's' : ''}`)));
|
|
270
|
+
for (const err of errors) {
|
|
271
|
+
const path = err.instancePath
|
|
272
|
+
? err.instancePath.replace(/\//g, '.').replace(/^\./, '')
|
|
273
|
+
: err.params.missingProperty
|
|
274
|
+
? String(err.params.missingProperty)
|
|
275
|
+
: '(root)';
|
|
276
|
+
const msg = friendlyError(err.instancePath, err.message, err.params);
|
|
277
|
+
const label = path ? cyan(path.padEnd(30)) : cyan('(root)'.padEnd(30));
|
|
278
|
+
console.log(` ${red('✗')} ${label} ${msg}`);
|
|
279
|
+
}
|
|
280
|
+
console.log('');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
console.log(green(`✓ Schema valid`));
|
|
284
|
+
console.log('');
|
|
285
|
+
}
|
|
286
|
+
// 4. Recommendations
|
|
287
|
+
const recs = getRecommendations(manifest);
|
|
288
|
+
if (recs.length > 0) {
|
|
289
|
+
console.log(bold(yellow(`⚠ ${recs.length} recommendation${recs.length > 1 ? 's' : ''}`)));
|
|
290
|
+
for (const rec of recs) {
|
|
291
|
+
console.log(` ${yellow('⚠')} ${cyan(rec.field.padEnd(30))} ${rec.message}`);
|
|
292
|
+
console.log(` ${''.padEnd(30)} ${dim(rec.impact)}`);
|
|
293
|
+
}
|
|
294
|
+
console.log('');
|
|
295
|
+
}
|
|
296
|
+
// 5. Summary of what's present
|
|
297
|
+
const identity = (manifest.identity ?? {});
|
|
298
|
+
const tools = (manifest.tools ?? []);
|
|
299
|
+
const capabilities = (manifest.capabilities ?? []);
|
|
300
|
+
console.log(bold('Summary'));
|
|
301
|
+
const rows = [
|
|
302
|
+
['name', String(identity.name ?? dim('—'))],
|
|
303
|
+
['version', String(identity.version ?? dim('—'))],
|
|
304
|
+
['capabilities', capabilities.length > 0 ? capabilities.slice(0, 5).join(', ') + (capabilities.length > 5 ? ` +${capabilities.length - 5} more` : '') : dim('—')],
|
|
305
|
+
['protocols', (manifest.protocols ?? []).join(', ') || dim('—')],
|
|
306
|
+
['tools', tools.length > 0 ? `${tools.length} declared` : dim('none')],
|
|
307
|
+
['safety', manifest.safety ? green('declared') : dim('not set')],
|
|
308
|
+
['verification', manifest.verification?.endpoint ? green(String(manifest.verification.endpoint)) : dim('not set')],
|
|
309
|
+
];
|
|
310
|
+
for (const [key, val] of rows) {
|
|
311
|
+
console.log(` ${dim(key.padEnd(14))} ${val}`);
|
|
312
|
+
}
|
|
313
|
+
console.log('');
|
|
314
|
+
// 6. Final verdict
|
|
315
|
+
if (errors.length === 0) {
|
|
316
|
+
if (recs.length === 0) {
|
|
317
|
+
console.log(green(bold('✓ Ready to register')) + ` Run: ${cyan('basedagents register')}\n`);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
console.log(yellow(bold('⚠ Valid but incomplete')) + ` Fix recommendations to maximize reputation.\n`);
|
|
321
|
+
console.log(` Run: ${cyan('basedagents register')} to register anyway.\n`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
console.log(red(bold('✗ Not ready')) + ` Fix the errors above before registering.\n`);
|
|
326
|
+
}
|
|
327
|
+
return { valid: errors.length === 0, errorCount: errors.length, warningCount: recs.length };
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "basedagents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "SDK for the BasedAgents identity and reputation registry — register AI agents, sign requests, search the registry, and submit verifications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -11,8 +11,12 @@
|
|
|
11
11
|
"types": "./dist/index.d.ts"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"basedagents": "./bin/basedagents.mjs"
|
|
16
|
+
},
|
|
14
17
|
"files": [
|
|
15
18
|
"dist",
|
|
19
|
+
"bin",
|
|
16
20
|
"README.md",
|
|
17
21
|
"LICENSE"
|
|
18
22
|
],
|
|
@@ -48,6 +52,8 @@
|
|
|
48
52
|
},
|
|
49
53
|
"dependencies": {
|
|
50
54
|
"@noble/ed25519": "^2.2.0",
|
|
51
|
-
"@noble/hashes": "^1.7.0"
|
|
55
|
+
"@noble/hashes": "^1.7.0",
|
|
56
|
+
"ajv": "^8.17.1",
|
|
57
|
+
"ajv-formats": "^3.0.1"
|
|
52
58
|
}
|
|
53
59
|
}
|