@antseed/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/.env.example +15 -0
- package/README.md +169 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.d.ts.map +1 -0
- package/dist/cli/commands/balance.js +64 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/browse.d.ts +7 -0
- package/dist/cli/commands/browse.d.ts.map +1 -0
- package/dist/cli/commands/browse.js +100 -0
- package/dist/cli/commands/browse.js.map +1 -0
- package/dist/cli/commands/config.d.ts +20 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +239 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/connect.d.ts +14 -0
- package/dist/cli/commands/connect.d.ts.map +1 -0
- package/dist/cli/commands/connect.js +298 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/connect.test.d.ts +2 -0
- package/dist/cli/commands/connect.test.d.ts.map +1 -0
- package/dist/cli/commands/connect.test.js +54 -0
- package/dist/cli/commands/connect.test.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +6 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +48 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/deposit.d.ts +3 -0
- package/dist/cli/commands/deposit.d.ts.map +1 -0
- package/dist/cli/commands/deposit.js +48 -0
- package/dist/cli/commands/deposit.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +3 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +94 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +91 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/plugin-create.d.ts +11 -0
- package/dist/cli/commands/plugin-create.d.ts.map +1 -0
- package/dist/cli/commands/plugin-create.js +201 -0
- package/dist/cli/commands/plugin-create.js.map +1 -0
- package/dist/cli/commands/plugin-create.test.d.ts +2 -0
- package/dist/cli/commands/plugin-create.test.d.ts.map +1 -0
- package/dist/cli/commands/plugin-create.test.js +53 -0
- package/dist/cli/commands/plugin-create.test.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +3 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +279 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/plugin.test.d.ts +2 -0
- package/dist/cli/commands/plugin.test.d.ts.map +1 -0
- package/dist/cli/commands/plugin.test.js +53 -0
- package/dist/cli/commands/plugin.test.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +10 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +89 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +11 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +397 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/seed.test.d.ts +2 -0
- package/dist/cli/commands/seed.test.d.ts.map +1 -0
- package/dist/cli/commands/seed.test.js +57 -0
- package/dist/cli/commands/seed.test.js.map +1 -0
- package/dist/cli/commands/status.d.ts +8 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +55 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/types.d.ts +14 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +41 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/commands/withdraw.d.ts +3 -0
- package/dist/cli/commands/withdraw.d.ts.map +1 -0
- package/dist/cli/commands/withdraw.js +48 -0
- package/dist/cli/commands/withdraw.js.map +1 -0
- package/dist/cli/formatters.d.ts +29 -0
- package/dist/cli/formatters.d.ts.map +1 -0
- package/dist/cli/formatters.js +67 -0
- package/dist/cli/formatters.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +41 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/shutdown.d.ts +11 -0
- package/dist/cli/shutdown.d.ts.map +1 -0
- package/dist/cli/shutdown.js +34 -0
- package/dist/cli/shutdown.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +48 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/effective.d.ts +26 -0
- package/dist/config/effective.d.ts.map +1 -0
- package/dist/config/effective.js +84 -0
- package/dist/config/effective.js.map +1 -0
- package/dist/config/effective.test.d.ts +2 -0
- package/dist/config/effective.test.d.ts.map +1 -0
- package/dist/config/effective.test.js +65 -0
- package/dist/config/effective.test.js.map +1 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +212 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/loader.test.d.ts +2 -0
- package/dist/config/loader.test.d.ts.map +1 -0
- package/dist/config/loader.test.js +77 -0
- package/dist/config/loader.test.js.map +1 -0
- package/dist/config/types.d.ts +133 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +10 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +50 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/env/load-env.d.ts +6 -0
- package/dist/env/load-env.d.ts.map +1 -0
- package/dist/env/load-env.js +18 -0
- package/dist/env/load-env.js.map +1 -0
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +70 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +11 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +52 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +39 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/proxy/buyer-proxy.d.ts +30 -0
- package/dist/proxy/buyer-proxy.d.ts.map +1 -0
- package/dist/proxy/buyer-proxy.js +488 -0
- package/dist/proxy/buyer-proxy.js.map +1 -0
- package/dist/status/node-status.d.ts +22 -0
- package/dist/status/node-status.d.ts.map +1 -0
- package/dist/status/node-status.js +83 -0
- package/dist/status/node-status.js.map +1 -0
- package/package.json +39 -0
- package/src/cli/commands/balance.ts +77 -0
- package/src/cli/commands/browse.ts +113 -0
- package/src/cli/commands/config.ts +271 -0
- package/src/cli/commands/connect.test.ts +69 -0
- package/src/cli/commands/connect.ts +342 -0
- package/src/cli/commands/dashboard.ts +59 -0
- package/src/cli/commands/deposit.ts +61 -0
- package/src/cli/commands/dev.ts +107 -0
- package/src/cli/commands/init.ts +99 -0
- package/src/cli/commands/plugin-create.test.ts +60 -0
- package/src/cli/commands/plugin-create.ts +230 -0
- package/src/cli/commands/plugin.test.ts +55 -0
- package/src/cli/commands/plugin.ts +295 -0
- package/src/cli/commands/profile.ts +95 -0
- package/src/cli/commands/seed.test.ts +70 -0
- package/src/cli/commands/seed.ts +447 -0
- package/src/cli/commands/status.ts +73 -0
- package/src/cli/commands/types.ts +56 -0
- package/src/cli/commands/withdraw.ts +61 -0
- package/src/cli/formatters.ts +64 -0
- package/src/cli/index.ts +46 -0
- package/src/cli/shutdown.ts +38 -0
- package/src/config/defaults.ts +49 -0
- package/src/config/effective.test.ts +80 -0
- package/src/config/effective.ts +119 -0
- package/src/config/loader.test.ts +95 -0
- package/src/config/loader.ts +251 -0
- package/src/config/types.ts +139 -0
- package/src/config/validation.ts +78 -0
- package/src/env/load-env.ts +20 -0
- package/src/plugins/loader.ts +96 -0
- package/src/plugins/manager.ts +66 -0
- package/src/plugins/registry.ts +45 -0
- package/src/proxy/buyer-proxy.ts +604 -0
- package/src/status/node-status.ts +105 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import crypto from 'node:crypto';
|
|
4
|
+
import { getGlobalOptions } from './types.js';
|
|
5
|
+
import { loadConfig } from '../../config/loader.js';
|
|
6
|
+
import { AntseedNode } from '@antseed/node';
|
|
7
|
+
import { DHTNode } from '@antseed/node/discovery';
|
|
8
|
+
import { toPeerId } from '@antseed/node';
|
|
9
|
+
import { parseBootstrapList, toBootstrapConfig } from '@antseed/node/discovery';
|
|
10
|
+
import { setupShutdownHandler } from '../shutdown.js';
|
|
11
|
+
export function registerDevCommand(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('dev')
|
|
14
|
+
.description('Run seller + buyer locally for development and testing')
|
|
15
|
+
.option('-p, --port <number>', 'buyer proxy port', (v) => parseInt(v, 10))
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
const globalOpts = getGlobalOptions(program);
|
|
18
|
+
const config = await loadConfig(globalOpts.config);
|
|
19
|
+
if (options.port !== undefined) {
|
|
20
|
+
config.buyer.proxyPort = options.port;
|
|
21
|
+
}
|
|
22
|
+
const spinner = ora('Starting local network...').start();
|
|
23
|
+
// 1. Create and start local bootstrap DHT node
|
|
24
|
+
const bootstrapPeerId = toPeerId(crypto.randomBytes(32).toString('hex'));
|
|
25
|
+
const bootstrapDht = new DHTNode({
|
|
26
|
+
peerId: bootstrapPeerId,
|
|
27
|
+
port: 0,
|
|
28
|
+
bootstrapNodes: [],
|
|
29
|
+
reannounceIntervalMs: 60_000,
|
|
30
|
+
operationTimeoutMs: 10_000,
|
|
31
|
+
});
|
|
32
|
+
try {
|
|
33
|
+
await bootstrapDht.start();
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
spinner.fail(chalk.red(`Failed to start local DHT: ${err.message}`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const bootstrapPort = bootstrapDht.getPort();
|
|
40
|
+
spinner.text = 'Starting seller node...';
|
|
41
|
+
// 2. Bootstrap config pointing at local node
|
|
42
|
+
const localBootstrap = toBootstrapConfig(parseBootstrapList([`127.0.0.1:${bootstrapPort}`]));
|
|
43
|
+
// 3. Start seller node
|
|
44
|
+
const seller = new AntseedNode({
|
|
45
|
+
role: 'seller',
|
|
46
|
+
bootstrapNodes: localBootstrap,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
await seller.start();
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
await bootstrapDht.stop();
|
|
53
|
+
spinner.fail(chalk.red(`Failed to start seller: ${err.message}`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
spinner.text = 'Starting buyer node...';
|
|
57
|
+
// 4. Start buyer node
|
|
58
|
+
const buyer = new AntseedNode({
|
|
59
|
+
role: 'buyer',
|
|
60
|
+
bootstrapNodes: localBootstrap,
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
await buyer.start();
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
await seller.stop();
|
|
67
|
+
await bootstrapDht.stop();
|
|
68
|
+
spinner.fail(chalk.red(`Failed to start buyer proxy: ${err.message}`));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
spinner.succeed(chalk.green('Dev mode running (local network)'));
|
|
72
|
+
const proxyUrl = `http://localhost:${config.buyer.proxyPort}`;
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log(chalk.bold('Proxy running at: ') + chalk.cyan(proxyUrl));
|
|
75
|
+
console.log(chalk.dim(`Local DHT bootstrap on port ${bootstrapPort}`));
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(chalk.bold('Configure your CLI tools:'));
|
|
78
|
+
console.log(chalk.dim(' # Anthropic (Claude Code)'));
|
|
79
|
+
console.log(` export ANTHROPIC_BASE_URL=${proxyUrl}`);
|
|
80
|
+
console.log(chalk.dim(' # OpenAI (Codex)'));
|
|
81
|
+
console.log(` export OPENAI_BASE_URL=${proxyUrl}`);
|
|
82
|
+
console.log(chalk.dim(' # Google'));
|
|
83
|
+
console.log(` export GOOGLE_API_BASE_URL=${proxyUrl}`);
|
|
84
|
+
console.log('');
|
|
85
|
+
setupShutdownHandler(async () => {
|
|
86
|
+
spinner.start('Shutting down dev environment...');
|
|
87
|
+
await buyer.stop();
|
|
88
|
+
await seller.stop();
|
|
89
|
+
await bootstrapDht.stop();
|
|
90
|
+
spinner.succeed('Dev environment stopped.');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASxC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF1D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig, saveConfig } from '../../config/loader.js';
|
|
5
|
+
import { TRUSTED_PLUGINS } from '../../plugins/registry.js';
|
|
6
|
+
import { installPlugin } from '../../plugins/manager.js';
|
|
7
|
+
export function registerInitCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('init')
|
|
10
|
+
.description('Interactive setup — install trusted plugins and configure providers')
|
|
11
|
+
.option('--auth-type <type>', 'auth type for providers: apikey, oauth, or claude-code', 'claude-code')
|
|
12
|
+
.option('--api-key <key>', 'API key (required when auth-type is apikey)')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
const globalOpts = getGlobalOptions(program);
|
|
15
|
+
const config = await loadConfig(globalOpts.config);
|
|
16
|
+
console.log(chalk.bold('\nAntseed — Setup\n'));
|
|
17
|
+
// 1. Install plugins
|
|
18
|
+
const providers = TRUSTED_PLUGINS.filter((p) => p.type === 'provider');
|
|
19
|
+
const routers = TRUSTED_PLUGINS.filter((p) => p.type === 'router');
|
|
20
|
+
console.log(chalk.bold('Installing plugins:\n'));
|
|
21
|
+
if (providers.length > 0) {
|
|
22
|
+
console.log(chalk.dim(' PROVIDERS (for: antseed seed)'));
|
|
23
|
+
for (const p of providers) {
|
|
24
|
+
console.log(` ${chalk.cyan(p.name.padEnd(16))} ${p.description}`);
|
|
25
|
+
}
|
|
26
|
+
console.log('');
|
|
27
|
+
}
|
|
28
|
+
if (routers.length > 0) {
|
|
29
|
+
console.log(chalk.dim(' ROUTERS (for: antseed connect)'));
|
|
30
|
+
for (const r of routers) {
|
|
31
|
+
console.log(` ${chalk.cyan(r.name.padEnd(16))} ${r.description}`);
|
|
32
|
+
}
|
|
33
|
+
console.log('');
|
|
34
|
+
}
|
|
35
|
+
for (const plugin of TRUSTED_PLUGINS) {
|
|
36
|
+
const spinner = ora(`Installing ${plugin.package}...`).start();
|
|
37
|
+
try {
|
|
38
|
+
await installPlugin(plugin.package);
|
|
39
|
+
spinner.succeed(chalk.green(`Installed ${plugin.package}`));
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
spinner.fail(chalk.red(`Failed to install ${plugin.package}: ${err.message}`));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 2. Configure providers in the config file
|
|
46
|
+
const authType = options.authType;
|
|
47
|
+
const apiKey = options.apiKey;
|
|
48
|
+
if (authType === 'apikey' && !apiKey) {
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log(chalk.yellow('Skipping provider config — no --api-key provided.'));
|
|
51
|
+
console.log(chalk.dim(' Add later: antseed config add-provider -t anthropic -k <key>'));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (const plugin of providers) {
|
|
55
|
+
const existing = config.providers.find(p => p.type === plugin.name);
|
|
56
|
+
if (!existing) {
|
|
57
|
+
const provider = {
|
|
58
|
+
type: plugin.name,
|
|
59
|
+
endpoint: 'https://api.anthropic.com',
|
|
60
|
+
authHeaderName: authType === 'claude-code' ? 'authorization' : 'x-api-key',
|
|
61
|
+
authValue: apiKey ?? '',
|
|
62
|
+
authType,
|
|
63
|
+
};
|
|
64
|
+
config.providers.push(provider);
|
|
65
|
+
config.seller.enabledProviders.push(plugin.name);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
existing.authType = authType;
|
|
69
|
+
if (apiKey)
|
|
70
|
+
existing.authValue = apiKey;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
await saveConfig(globalOpts.config, config);
|
|
74
|
+
console.log('');
|
|
75
|
+
console.log(chalk.green(`Config saved with auth type: ${authType}`));
|
|
76
|
+
}
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log(chalk.bold('Next steps:'));
|
|
79
|
+
console.log(` ${chalk.cyan('antseed config seller set pricing.defaults.inputUsdPerMillion 12')}`);
|
|
80
|
+
console.log(` ${chalk.cyan('antseed config seller set pricing.defaults.outputUsdPerMillion 36')}`);
|
|
81
|
+
console.log(` ${chalk.cyan('antseed config buyer set preferredProviders \'["anthropic","openai"]\'')}`);
|
|
82
|
+
console.log(` ${chalk.cyan('antseed config buyer set maxPricing.defaults.inputUsdPerMillion 25')}`);
|
|
83
|
+
console.log(` ${chalk.cyan('antseed config buyer set maxPricing.defaults.outputUsdPerMillion 75')}`);
|
|
84
|
+
console.log(` ${chalk.cyan('antseed seed --provider anthropic')}`);
|
|
85
|
+
console.log(` ${chalk.cyan('antseed connect --router claude-code')}`);
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(chalk.dim('Seller settings live under seller.* and buyer preferences live under buyer.* in your config file.'));
|
|
88
|
+
console.log('');
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
interface PluginScaffoldOptions {
|
|
3
|
+
name: string;
|
|
4
|
+
type: 'provider' | 'router';
|
|
5
|
+
displayName: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function scaffoldPlugin(dir: string, opts: PluginScaffoldOptions): Promise<void>;
|
|
9
|
+
export declare function registerPluginCreateCommand(pluginCmd: Command): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=plugin-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin-create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMxC,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAuKD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5F;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAmCpE"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createInterface } from 'node:readline/promises';
|
|
3
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
function generatePackageJson(opts) {
|
|
6
|
+
return JSON.stringify({
|
|
7
|
+
name: `@antseed/${opts.type}-${opts.name}`,
|
|
8
|
+
version: '0.1.0',
|
|
9
|
+
description: opts.description,
|
|
10
|
+
type: 'module',
|
|
11
|
+
main: 'dist/index.js',
|
|
12
|
+
types: 'dist/index.d.ts',
|
|
13
|
+
scripts: {
|
|
14
|
+
build: 'tsc',
|
|
15
|
+
test: 'node --test dist/**/*.test.js',
|
|
16
|
+
prepublishOnly: 'npm run build',
|
|
17
|
+
},
|
|
18
|
+
keywords: ['antseed', 'plugin', opts.type],
|
|
19
|
+
peerDependencies: {
|
|
20
|
+
'@antseed/node': '>=0.1.0',
|
|
21
|
+
},
|
|
22
|
+
devDependencies: {
|
|
23
|
+
'@antseed/node': 'workspace:*',
|
|
24
|
+
'@types/node': '^20.11.0',
|
|
25
|
+
typescript: '^5.3.0',
|
|
26
|
+
},
|
|
27
|
+
}, null, 2);
|
|
28
|
+
}
|
|
29
|
+
function generateTsconfig() {
|
|
30
|
+
return JSON.stringify({
|
|
31
|
+
compilerOptions: {
|
|
32
|
+
target: 'ES2022',
|
|
33
|
+
module: 'NodeNext',
|
|
34
|
+
moduleResolution: 'NodeNext',
|
|
35
|
+
outDir: 'dist',
|
|
36
|
+
rootDir: 'src',
|
|
37
|
+
strict: true,
|
|
38
|
+
esModuleInterop: true,
|
|
39
|
+
skipLibCheck: true,
|
|
40
|
+
declaration: true,
|
|
41
|
+
sourceMap: true,
|
|
42
|
+
},
|
|
43
|
+
include: ['src/**/*.ts'],
|
|
44
|
+
exclude: ['node_modules', 'dist'],
|
|
45
|
+
}, null, 2);
|
|
46
|
+
}
|
|
47
|
+
function generateIndexTs(opts) {
|
|
48
|
+
const importType = opts.type === 'provider' ? 'AntseedProviderPlugin' : 'AntseedRouterPlugin';
|
|
49
|
+
const methodImport = opts.type === 'provider'
|
|
50
|
+
? `import { createProvider } from './${opts.type}.js'`
|
|
51
|
+
: `import { createRouter } from './${opts.type}.js'`;
|
|
52
|
+
const method = opts.type === 'provider' ? 'createProvider' : 'createRouter';
|
|
53
|
+
return `import type { ${importType}, ConfigField } from '@antseed/node'
|
|
54
|
+
${methodImport}
|
|
55
|
+
|
|
56
|
+
const configSchema: ConfigField[] = [
|
|
57
|
+
// Define your plugin's configuration fields here
|
|
58
|
+
// { key: 'API_KEY', label: 'API Key', type: 'secret', required: true, description: 'Your API key' },
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
const plugin: ${importType} = {
|
|
62
|
+
name: '${opts.name}',
|
|
63
|
+
displayName: '${opts.displayName}',
|
|
64
|
+
version: '0.1.0',
|
|
65
|
+
description: '${opts.description}',
|
|
66
|
+
type: '${opts.type}',
|
|
67
|
+
configSchema,
|
|
68
|
+
${method},
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default plugin
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
function generateProviderTs(opts) {
|
|
75
|
+
return `import type { Provider, SerializedHttpRequest, SerializedHttpResponse } from '@antseed/node'
|
|
76
|
+
|
|
77
|
+
export function createProvider(config: Record<string, string>): Provider {
|
|
78
|
+
return {
|
|
79
|
+
name: '${opts.name}',
|
|
80
|
+
models: [],
|
|
81
|
+
pricing: {
|
|
82
|
+
defaults: { inputUsdPerMillion: 0, outputUsdPerMillion: 0 },
|
|
83
|
+
},
|
|
84
|
+
maxConcurrency: 1,
|
|
85
|
+
async handleRequest(req: SerializedHttpRequest): Promise<SerializedHttpResponse> {
|
|
86
|
+
// Implement your provider logic here
|
|
87
|
+
throw new Error('Not implemented')
|
|
88
|
+
},
|
|
89
|
+
getCapacity() {
|
|
90
|
+
return { current: 0, max: 1 }
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
function generateRouterTs(_opts) {
|
|
97
|
+
return `import type { Router, PeerInfo, SerializedHttpRequest } from '@antseed/node'
|
|
98
|
+
|
|
99
|
+
export function createRouter(config: Record<string, string>): Router {
|
|
100
|
+
return {
|
|
101
|
+
selectPeer(req: SerializedHttpRequest, peers: PeerInfo[]): PeerInfo | null {
|
|
102
|
+
// Implement your router logic here
|
|
103
|
+
return peers[0] ?? null
|
|
104
|
+
},
|
|
105
|
+
onResult(peer: PeerInfo, result: { success: boolean; latencyMs: number; tokens: number }): void {
|
|
106
|
+
// Track peer performance here
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
function generateTestTs(opts) {
|
|
113
|
+
return `import assert from 'node:assert/strict'
|
|
114
|
+
import test from 'node:test'
|
|
115
|
+
|
|
116
|
+
test('${opts.name} plugin exports valid manifest', async () => {
|
|
117
|
+
const { default: plugin } = await import('./index.js')
|
|
118
|
+
assert.equal(plugin.type, '${opts.type}')
|
|
119
|
+
assert.equal(plugin.name, '${opts.name}')
|
|
120
|
+
assert.ok(plugin.displayName)
|
|
121
|
+
assert.ok(plugin.version)
|
|
122
|
+
assert.ok(Array.isArray(plugin.configSchema))
|
|
123
|
+
})
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
function generateReadme(opts) {
|
|
127
|
+
return `# antseed-${opts.type}-${opts.name}
|
|
128
|
+
|
|
129
|
+
${opts.description}
|
|
130
|
+
|
|
131
|
+
## Installation
|
|
132
|
+
|
|
133
|
+
\`\`\`bash
|
|
134
|
+
antseed plugin add antseed-${opts.type}-${opts.name}
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
## Configuration
|
|
138
|
+
|
|
139
|
+
Configure via interactive prompt:
|
|
140
|
+
|
|
141
|
+
\`\`\`bash
|
|
142
|
+
antseed plugin config <instance-id>
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
## Development
|
|
146
|
+
|
|
147
|
+
\`\`\`bash
|
|
148
|
+
npm install
|
|
149
|
+
npm run build
|
|
150
|
+
npm test
|
|
151
|
+
\`\`\`
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
export async function scaffoldPlugin(dir, opts) {
|
|
155
|
+
await mkdir(join(dir, 'src'), { recursive: true });
|
|
156
|
+
await writeFile(join(dir, 'package.json'), generatePackageJson(opts), 'utf-8');
|
|
157
|
+
await writeFile(join(dir, 'tsconfig.json'), generateTsconfig(), 'utf-8');
|
|
158
|
+
await writeFile(join(dir, 'src', 'index.ts'), generateIndexTs(opts), 'utf-8');
|
|
159
|
+
if (opts.type === 'provider') {
|
|
160
|
+
await writeFile(join(dir, 'src', 'provider.ts'), generateProviderTs(opts), 'utf-8');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
await writeFile(join(dir, 'src', 'router.ts'), generateRouterTs(opts), 'utf-8');
|
|
164
|
+
}
|
|
165
|
+
await writeFile(join(dir, 'src', 'index.test.ts'), generateTestTs(opts), 'utf-8');
|
|
166
|
+
await writeFile(join(dir, 'README.md'), generateReadme(opts), 'utf-8');
|
|
167
|
+
}
|
|
168
|
+
export function registerPluginCreateCommand(pluginCmd) {
|
|
169
|
+
pluginCmd
|
|
170
|
+
.command('create')
|
|
171
|
+
.description('Scaffold a new plugin project')
|
|
172
|
+
.action(async () => {
|
|
173
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
174
|
+
try {
|
|
175
|
+
const name = (await rl.question('Plugin name (lowercase, no spaces): ')).trim();
|
|
176
|
+
if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
177
|
+
console.log(chalk.red('Invalid plugin name. Use lowercase letters, numbers, and hyphens.'));
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
const typeAnswer = (await rl.question('Plugin type (provider/router): ')).trim();
|
|
181
|
+
if (typeAnswer !== 'provider' && typeAnswer !== 'router') {
|
|
182
|
+
console.log(chalk.red('Plugin type must be "provider" or "router".'));
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
const type = typeAnswer;
|
|
186
|
+
const displayName = (await rl.question('Display name: ')).trim() || name;
|
|
187
|
+
const description = (await rl.question('Description: ')).trim() || `Antseed ${type} plugin`;
|
|
188
|
+
const dir = join(process.cwd(), `antseed-${type}-${name}`);
|
|
189
|
+
await scaffoldPlugin(dir, { name, type, displayName, description });
|
|
190
|
+
console.log(chalk.green(`\nScaffolded plugin at: ${dir}`));
|
|
191
|
+
console.log(chalk.dim('\nNext steps:'));
|
|
192
|
+
console.log(chalk.dim(` cd antseed-${type}-${name}`));
|
|
193
|
+
console.log(chalk.dim(' npm install'));
|
|
194
|
+
console.log(chalk.dim(' npm run build'));
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
rl.close();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=plugin-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-create.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-create.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin-create.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { scaffoldPlugin } from './plugin-create.js';
|
|
7
|
+
test('scaffoldPlugin creates provider project structure', async () => {
|
|
8
|
+
const dir = await mkdtemp(join(tmpdir(), 'antseed-test-'));
|
|
9
|
+
try {
|
|
10
|
+
await scaffoldPlugin(dir, {
|
|
11
|
+
name: 'test-provider',
|
|
12
|
+
type: 'provider',
|
|
13
|
+
displayName: 'Test Provider',
|
|
14
|
+
description: 'A test provider plugin',
|
|
15
|
+
});
|
|
16
|
+
const pkg = JSON.parse(await readFile(join(dir, 'package.json'), 'utf-8'));
|
|
17
|
+
assert.equal(pkg.name, '@antseed/provider-test-provider');
|
|
18
|
+
const tsconfig = await readFile(join(dir, 'tsconfig.json'), 'utf-8');
|
|
19
|
+
assert.ok(tsconfig.includes('NodeNext'));
|
|
20
|
+
const index = await readFile(join(dir, 'src', 'index.ts'), 'utf-8');
|
|
21
|
+
assert.ok(index.includes("type: 'provider'"));
|
|
22
|
+
assert.ok(index.includes('AntseedProviderPlugin'));
|
|
23
|
+
const provider = await readFile(join(dir, 'src', 'provider.ts'), 'utf-8');
|
|
24
|
+
assert.ok(provider.includes('createProvider'));
|
|
25
|
+
const testFile = await readFile(join(dir, 'src', 'index.test.ts'), 'utf-8');
|
|
26
|
+
assert.ok(testFile.includes("'provider'"));
|
|
27
|
+
const readme = await readFile(join(dir, 'README.md'), 'utf-8');
|
|
28
|
+
assert.ok(readme.includes('test-provider'));
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await rm(dir, { recursive: true, force: true });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
test('scaffoldPlugin creates router project structure', async () => {
|
|
35
|
+
const dir = await mkdtemp(join(tmpdir(), 'antseed-test-'));
|
|
36
|
+
try {
|
|
37
|
+
await scaffoldPlugin(dir, {
|
|
38
|
+
name: 'test-router',
|
|
39
|
+
type: 'router',
|
|
40
|
+
displayName: 'Test Router',
|
|
41
|
+
description: 'A test router plugin',
|
|
42
|
+
});
|
|
43
|
+
const index = await readFile(join(dir, 'src', 'index.ts'), 'utf-8');
|
|
44
|
+
assert.ok(index.includes("type: 'router'"));
|
|
45
|
+
assert.ok(index.includes('AntseedRouterPlugin'));
|
|
46
|
+
const router = await readFile(join(dir, 'src', 'router.ts'), 'utf-8');
|
|
47
|
+
assert.ok(router.includes('createRouter'));
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await rm(dir, { recursive: true, force: true });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=plugin-create.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-create.test.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin-create.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwGxC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8L5D"}
|