@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 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD9D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { loadOrCreateIdentity, BaseEscrowClient, identityToEvmWallet, identityToEvmAddress, } from '@antseed/node';
|
|
6
|
+
export function registerWithdrawCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('withdraw <amount>')
|
|
9
|
+
.description('Withdraw USDC from the escrow contract (amount in human-readable USDC, e.g. "5" = 5 USDC)')
|
|
10
|
+
.action(async (amount) => {
|
|
11
|
+
const globalOpts = getGlobalOptions(program);
|
|
12
|
+
const config = await loadConfig(globalOpts.config);
|
|
13
|
+
const payments = config.payments;
|
|
14
|
+
if (!payments?.crypto) {
|
|
15
|
+
console.error(chalk.red('Error: No crypto payment configuration found.'));
|
|
16
|
+
console.error(chalk.dim('Configure payments.crypto in your config file or run: antseed init'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const amountFloat = parseFloat(amount);
|
|
20
|
+
if (isNaN(amountFloat) || amountFloat <= 0) {
|
|
21
|
+
console.error(chalk.red('Error: Amount must be a positive number.'));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Convert human-readable USDC to base units (6 decimals)
|
|
25
|
+
const amountBaseUnits = BigInt(Math.round(amountFloat * 1_000_000));
|
|
26
|
+
const identity = await loadOrCreateIdentity(globalOpts.dataDir);
|
|
27
|
+
const wallet = identityToEvmWallet(identity);
|
|
28
|
+
const address = identityToEvmAddress(identity);
|
|
29
|
+
const escrowClient = new BaseEscrowClient({
|
|
30
|
+
rpcUrl: payments.crypto.rpcUrl,
|
|
31
|
+
contractAddress: payments.crypto.escrowContractAddress,
|
|
32
|
+
usdcAddress: payments.crypto.usdcContractAddress,
|
|
33
|
+
});
|
|
34
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
35
|
+
console.log(chalk.dim(`Amount: ${amountFloat} USDC (${amountBaseUnits} base units)`));
|
|
36
|
+
const spinner = ora('Withdrawing USDC from escrow...').start();
|
|
37
|
+
try {
|
|
38
|
+
const txHash = await escrowClient.withdraw(wallet, amountBaseUnits);
|
|
39
|
+
spinner.succeed(chalk.green(`Withdrew ${amountFloat} USDC from escrow`));
|
|
40
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
spinner.fail(chalk.red(`Withdrawal failed: ${err.message}`));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=withdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../../src/cli/commands/withdraw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a USD earnings string with a dollar sign and green color.
|
|
3
|
+
* @param amountUSD - Amount as string (e.g., "1.234567")
|
|
4
|
+
* @returns Formatted string like "$1.23"
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatEarnings(amountUSD: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Format a token count with K/M suffix.
|
|
9
|
+
* @param tokens - Number of tokens
|
|
10
|
+
* @returns Formatted string like "1.5K" or "2.3M"
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatTokens(tokens: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a capacity usage percentage with color coding.
|
|
15
|
+
* Green < 50%, Yellow 50-80%, Red > 80%
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatCapacity(percent: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
20
|
+
* @param ms - Duration in milliseconds
|
|
21
|
+
* @returns String like "2h 15m" or "45s" or "3d 1h"
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatDuration(ms: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Format a reputation score (0-1) with color coding.
|
|
26
|
+
* Green >= 0.8, Yellow >= 0.5, Red < 0.5
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatReputation(score: number): string;
|
|
29
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Format a USD earnings string with a dollar sign and green color.
|
|
4
|
+
* @param amountUSD - Amount as string (e.g., "1.234567")
|
|
5
|
+
* @returns Formatted string like "$1.23"
|
|
6
|
+
*/
|
|
7
|
+
export function formatEarnings(amountUSD) {
|
|
8
|
+
const num = parseFloat(amountUSD);
|
|
9
|
+
return chalk.green(`$${num.toFixed(2)}`);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Format a token count with K/M suffix.
|
|
13
|
+
* @param tokens - Number of tokens
|
|
14
|
+
* @returns Formatted string like "1.5K" or "2.3M"
|
|
15
|
+
*/
|
|
16
|
+
export function formatTokens(tokens) {
|
|
17
|
+
if (tokens >= 1_000_000) {
|
|
18
|
+
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
19
|
+
}
|
|
20
|
+
if (tokens >= 1_000) {
|
|
21
|
+
return `${(tokens / 1_000).toFixed(1)}K`;
|
|
22
|
+
}
|
|
23
|
+
return String(tokens);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format a capacity usage percentage with color coding.
|
|
27
|
+
* Green < 50%, Yellow 50-80%, Red > 80%
|
|
28
|
+
*/
|
|
29
|
+
export function formatCapacity(percent) {
|
|
30
|
+
const label = `${percent.toFixed(0)}%`;
|
|
31
|
+
if (percent < 50)
|
|
32
|
+
return chalk.green(label);
|
|
33
|
+
if (percent < 80)
|
|
34
|
+
return chalk.yellow(label);
|
|
35
|
+
return chalk.red(label);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
39
|
+
* @param ms - Duration in milliseconds
|
|
40
|
+
* @returns String like "2h 15m" or "45s" or "3d 1h"
|
|
41
|
+
*/
|
|
42
|
+
export function formatDuration(ms) {
|
|
43
|
+
const seconds = Math.floor(ms / 1000);
|
|
44
|
+
if (seconds < 60)
|
|
45
|
+
return `${seconds}s`;
|
|
46
|
+
const minutes = Math.floor(seconds / 60);
|
|
47
|
+
if (minutes < 60)
|
|
48
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
49
|
+
const hours = Math.floor(minutes / 60);
|
|
50
|
+
if (hours < 24)
|
|
51
|
+
return `${hours}h ${minutes % 60}m`;
|
|
52
|
+
const days = Math.floor(hours / 24);
|
|
53
|
+
return `${days}d ${hours % 24}h`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format a reputation score (0-1) with color coding.
|
|
57
|
+
* Green >= 0.8, Yellow >= 0.5, Red < 0.5
|
|
58
|
+
*/
|
|
59
|
+
export function formatReputation(score) {
|
|
60
|
+
const label = `${(score * 100).toFixed(0)}%`;
|
|
61
|
+
if (score >= 0.8)
|
|
62
|
+
return chalk.green(label);
|
|
63
|
+
if (score >= 0.5)
|
|
64
|
+
return chalk.yellow(label);
|
|
65
|
+
return chalk.red(label);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { loadEnvFromFiles } from '../env/load-env.js';
|
|
4
|
+
import { registerSeedCommand } from './commands/seed.js';
|
|
5
|
+
import { registerConnectCommand } from './commands/connect.js';
|
|
6
|
+
import { registerStatusCommand } from './commands/status.js';
|
|
7
|
+
import { registerConfigCommand } from './commands/config.js';
|
|
8
|
+
import { registerDashboardCommand } from './commands/dashboard.js';
|
|
9
|
+
import { registerDevCommand } from './commands/dev.js';
|
|
10
|
+
import { registerBrowseCommand } from './commands/browse.js';
|
|
11
|
+
import { registerInitCommand } from './commands/init.js';
|
|
12
|
+
import { registerPluginCommand } from './commands/plugin.js';
|
|
13
|
+
import { registerProfileCommand, registerPeerCommand } from './commands/profile.js';
|
|
14
|
+
import { registerDepositCommand } from './commands/deposit.js';
|
|
15
|
+
import { registerWithdrawCommand } from './commands/withdraw.js';
|
|
16
|
+
import { registerBalanceCommand } from './commands/balance.js';
|
|
17
|
+
loadEnvFromFiles();
|
|
18
|
+
const program = new Command();
|
|
19
|
+
program
|
|
20
|
+
.name('antseed')
|
|
21
|
+
.description('P2P marketplace for reselling idle LLM plan capacity')
|
|
22
|
+
.version('0.1.0')
|
|
23
|
+
.option('-c, --config <path>', 'path to config file', '~/.antseed/config.json')
|
|
24
|
+
.option('--data-dir <path>', 'path to node identity/state directory', '~/.antseed')
|
|
25
|
+
.option('-v, --verbose', 'enable verbose logging', false);
|
|
26
|
+
registerSeedCommand(program);
|
|
27
|
+
registerConnectCommand(program);
|
|
28
|
+
registerStatusCommand(program);
|
|
29
|
+
registerConfigCommand(program);
|
|
30
|
+
registerDashboardCommand(program);
|
|
31
|
+
registerDevCommand(program);
|
|
32
|
+
registerBrowseCommand(program);
|
|
33
|
+
registerInitCommand(program);
|
|
34
|
+
registerPluginCommand(program);
|
|
35
|
+
registerProfileCommand(program);
|
|
36
|
+
registerPeerCommand(program);
|
|
37
|
+
registerDepositCommand(program);
|
|
38
|
+
registerWithdrawCommand(program);
|
|
39
|
+
registerBalanceCommand(program);
|
|
40
|
+
program.parse(process.argv);
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,gBAAgB,EAAE,CAAC;AAEnB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC;KAC9E,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,YAAY,CAAC;KAClF,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;AAE5D,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ShutdownCallback = () => Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Register a callback to be called on shutdown (SIGINT/SIGTERM).
|
|
4
|
+
* Multiple callbacks are called in LIFO order (last registered = first called).
|
|
5
|
+
* The process exits after all callbacks complete.
|
|
6
|
+
*
|
|
7
|
+
* @param callback - Async function to run during shutdown
|
|
8
|
+
*/
|
|
9
|
+
export declare function setupShutdownHandler(callback: ShutdownCallback): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/cli/shutdown.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAK5C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAyBrE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
let shutdownCallbacks = [];
|
|
2
|
+
let isShuttingDown = false;
|
|
3
|
+
/**
|
|
4
|
+
* Register a callback to be called on shutdown (SIGINT/SIGTERM).
|
|
5
|
+
* Multiple callbacks are called in LIFO order (last registered = first called).
|
|
6
|
+
* The process exits after all callbacks complete.
|
|
7
|
+
*
|
|
8
|
+
* @param callback - Async function to run during shutdown
|
|
9
|
+
*/
|
|
10
|
+
export function setupShutdownHandler(callback) {
|
|
11
|
+
shutdownCallbacks.push(callback);
|
|
12
|
+
// Only register signal handlers once
|
|
13
|
+
if (shutdownCallbacks.length === 1) {
|
|
14
|
+
const handler = async () => {
|
|
15
|
+
if (isShuttingDown)
|
|
16
|
+
return; // Prevent double-shutdown
|
|
17
|
+
isShuttingDown = true;
|
|
18
|
+
// Execute callbacks in LIFO order
|
|
19
|
+
const callbacks = [...shutdownCallbacks].reverse();
|
|
20
|
+
for (const cb of callbacks) {
|
|
21
|
+
try {
|
|
22
|
+
await cb();
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error('Shutdown error:', err.message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
process.exit(0);
|
|
29
|
+
};
|
|
30
|
+
process.on('SIGINT', handler);
|
|
31
|
+
process.on('SIGTERM', handler);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=shutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/cli/shutdown.ts"],"names":[],"mappings":"AAEA,IAAI,iBAAiB,GAAuB,EAAE,CAAC;AAC/C,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAA0B;IAC7D,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjC,qCAAqC;IACrC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,cAAc;gBAAE,OAAO,CAAC,0BAA0B;YACtD,cAAc,GAAG,IAAI,CAAC;YAEtB,kCAAkC;YAClC,MAAM,SAAS,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC;YACnD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,EAAE,EAAE,CAAC;gBACb,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CA2CnD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a default Antseed configuration with sensible defaults.
|
|
3
|
+
*/
|
|
4
|
+
export function createDefaultConfig() {
|
|
5
|
+
return {
|
|
6
|
+
identity: {
|
|
7
|
+
displayName: 'Antseed Node',
|
|
8
|
+
},
|
|
9
|
+
providers: [],
|
|
10
|
+
seller: {
|
|
11
|
+
reserveFloor: 10,
|
|
12
|
+
maxConcurrentBuyers: 5,
|
|
13
|
+
enabledProviders: [],
|
|
14
|
+
pricing: {
|
|
15
|
+
defaults: {
|
|
16
|
+
inputUsdPerMillion: 10,
|
|
17
|
+
outputUsdPerMillion: 10,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
buyer: {
|
|
22
|
+
preferredProviders: ['anthropic', 'openai', 'claude-code', 'claude-oauth', 'openrouter', 'local-llm'],
|
|
23
|
+
maxPricing: {
|
|
24
|
+
defaults: {
|
|
25
|
+
inputUsdPerMillion: 100,
|
|
26
|
+
outputUsdPerMillion: 100,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
minPeerReputation: 50,
|
|
30
|
+
proxyPort: 8377,
|
|
31
|
+
},
|
|
32
|
+
payments: {
|
|
33
|
+
preferredMethod: 'crypto',
|
|
34
|
+
platformFeeRate: 0.05,
|
|
35
|
+
crypto: {
|
|
36
|
+
chainId: 'base-local',
|
|
37
|
+
rpcUrl: 'http://127.0.0.1:8545',
|
|
38
|
+
escrowContractAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
|
|
39
|
+
usdcContractAddress: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',
|
|
40
|
+
defaultLockAmountUSDC: '1',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
network: {
|
|
44
|
+
bootstrapNodes: [],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,QAAQ,EAAE;YACR,WAAW,EAAE,cAAc;SAC5B;QACD,SAAS,EAAE,EAAE;QACb,MAAM,EAAE;YACN,YAAY,EAAE,EAAE;YAChB,mBAAmB,EAAE,CAAC;YACtB,gBAAgB,EAAE,EAAE;YACpB,OAAO,EAAE;gBACP,QAAQ,EAAE;oBACR,kBAAkB,EAAE,EAAE;oBACtB,mBAAmB,EAAE,EAAE;iBACxB;aACF;SACF;QACD,KAAK,EAAE;YACL,kBAAkB,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC;YACrG,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,kBAAkB,EAAE,GAAG;oBACvB,mBAAmB,EAAE,GAAG;iBACzB;aACF;YACD,iBAAiB,EAAE,EAAE;YACrB,SAAS,EAAE,IAAI;SAChB;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,QAAQ;YACzB,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE;gBACN,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,uBAAuB;gBAC/B,qBAAqB,EAAE,4CAA4C;gBACnE,mBAAmB,EAAE,4CAA4C;gBACjE,qBAAqB,EAAE,GAAG;aAC3B;SACF;QACD,OAAO,EAAE;YACP,cAAc,EAAE,EAAE;SACnB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BuyerCLIConfig, AntseedConfig, SellerCLIConfig } from './types.js';
|
|
2
|
+
export interface SellerRuntimeOverrides {
|
|
3
|
+
reserveFloor?: number;
|
|
4
|
+
inputUsdPerMillion?: number;
|
|
5
|
+
outputUsdPerMillion?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface BuyerRuntimeOverrides {
|
|
8
|
+
proxyPort?: number;
|
|
9
|
+
minPeerReputation?: number;
|
|
10
|
+
preferredProviders?: string[];
|
|
11
|
+
maxInputUsdPerMillion?: number;
|
|
12
|
+
maxOutputUsdPerMillion?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ResolveEffectiveConfigInput {
|
|
15
|
+
config: AntseedConfig;
|
|
16
|
+
env?: NodeJS.ProcessEnv;
|
|
17
|
+
sellerOverrides?: SellerRuntimeOverrides;
|
|
18
|
+
buyerOverrides?: BuyerRuntimeOverrides;
|
|
19
|
+
}
|
|
20
|
+
export declare function resolveEffectiveSellerConfig(input: ResolveEffectiveConfigInput): SellerCLIConfig;
|
|
21
|
+
export declare function resolveEffectiveBuyerConfig(input: ResolveEffectiveConfigInput): BuyerCLIConfig;
|
|
22
|
+
export declare function resolveEffectiveRoleConfig(input: ResolveEffectiveConfigInput): {
|
|
23
|
+
seller: SellerCLIConfig;
|
|
24
|
+
buyer: BuyerCLIConfig;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=effective.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective.d.ts","sourceRoot":"","sources":["../../src/config/effective.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAmBD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,2BAA2B,GAAG,eAAe,CA0BhG;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,2BAA2B,GAAG,cAAc,CAwC9F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,2BAA2B,GAAG;IAC9E,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,cAAc,CAAC;CACvB,CAKA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
function parseEnvNumber(env, key) {
|
|
2
|
+
const raw = env[key];
|
|
3
|
+
if (raw === undefined)
|
|
4
|
+
return undefined;
|
|
5
|
+
const parsed = Number(raw);
|
|
6
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
7
|
+
}
|
|
8
|
+
function parseEnvProviders(env, key) {
|
|
9
|
+
const raw = env[key];
|
|
10
|
+
if (!raw)
|
|
11
|
+
return undefined;
|
|
12
|
+
const list = raw
|
|
13
|
+
.split(',')
|
|
14
|
+
.map((entry) => entry.trim())
|
|
15
|
+
.filter((entry) => entry.length > 0);
|
|
16
|
+
return list.length > 0 ? list : undefined;
|
|
17
|
+
}
|
|
18
|
+
export function resolveEffectiveSellerConfig(input) {
|
|
19
|
+
const env = input.env ?? process.env;
|
|
20
|
+
const seller = structuredClone(input.config.seller);
|
|
21
|
+
const envInputUsdPerMillion = parseEnvNumber(env, 'ANTSEED_SELLER_INPUT_USD_PER_MILLION');
|
|
22
|
+
const envOutputUsdPerMillion = parseEnvNumber(env, 'ANTSEED_SELLER_OUTPUT_USD_PER_MILLION');
|
|
23
|
+
if (envInputUsdPerMillion !== undefined) {
|
|
24
|
+
seller.pricing.defaults.inputUsdPerMillion = envInputUsdPerMillion;
|
|
25
|
+
}
|
|
26
|
+
if (envOutputUsdPerMillion !== undefined) {
|
|
27
|
+
seller.pricing.defaults.outputUsdPerMillion = envOutputUsdPerMillion;
|
|
28
|
+
}
|
|
29
|
+
const overrides = input.sellerOverrides;
|
|
30
|
+
if (overrides?.reserveFloor !== undefined) {
|
|
31
|
+
seller.reserveFloor = overrides.reserveFloor;
|
|
32
|
+
}
|
|
33
|
+
if (overrides?.inputUsdPerMillion !== undefined) {
|
|
34
|
+
seller.pricing.defaults.inputUsdPerMillion = overrides.inputUsdPerMillion;
|
|
35
|
+
}
|
|
36
|
+
if (overrides?.outputUsdPerMillion !== undefined) {
|
|
37
|
+
seller.pricing.defaults.outputUsdPerMillion = overrides.outputUsdPerMillion;
|
|
38
|
+
}
|
|
39
|
+
return seller;
|
|
40
|
+
}
|
|
41
|
+
export function resolveEffectiveBuyerConfig(input) {
|
|
42
|
+
const env = input.env ?? process.env;
|
|
43
|
+
const buyer = structuredClone(input.config.buyer);
|
|
44
|
+
const envMinReputation = parseEnvNumber(env, 'ANTSEED_BUYER_MIN_REPUTATION');
|
|
45
|
+
const envPreferredProviders = parseEnvProviders(env, 'ANTSEED_BUYER_PREFERRED_PROVIDERS');
|
|
46
|
+
const envMaxInputUsdPerMillion = parseEnvNumber(env, 'ANTSEED_BUYER_MAX_INPUT_USD_PER_MILLION');
|
|
47
|
+
const envMaxOutputUsdPerMillion = parseEnvNumber(env, 'ANTSEED_BUYER_MAX_OUTPUT_USD_PER_MILLION');
|
|
48
|
+
if (envMinReputation !== undefined) {
|
|
49
|
+
buyer.minPeerReputation = envMinReputation;
|
|
50
|
+
}
|
|
51
|
+
if (envPreferredProviders) {
|
|
52
|
+
buyer.preferredProviders = envPreferredProviders;
|
|
53
|
+
}
|
|
54
|
+
if (envMaxInputUsdPerMillion !== undefined) {
|
|
55
|
+
buyer.maxPricing.defaults.inputUsdPerMillion = envMaxInputUsdPerMillion;
|
|
56
|
+
}
|
|
57
|
+
if (envMaxOutputUsdPerMillion !== undefined) {
|
|
58
|
+
buyer.maxPricing.defaults.outputUsdPerMillion = envMaxOutputUsdPerMillion;
|
|
59
|
+
}
|
|
60
|
+
const overrides = input.buyerOverrides;
|
|
61
|
+
if (overrides?.proxyPort !== undefined) {
|
|
62
|
+
buyer.proxyPort = overrides.proxyPort;
|
|
63
|
+
}
|
|
64
|
+
if (overrides?.minPeerReputation !== undefined) {
|
|
65
|
+
buyer.minPeerReputation = overrides.minPeerReputation;
|
|
66
|
+
}
|
|
67
|
+
if (overrides?.preferredProviders && overrides.preferredProviders.length > 0) {
|
|
68
|
+
buyer.preferredProviders = [...overrides.preferredProviders];
|
|
69
|
+
}
|
|
70
|
+
if (overrides?.maxInputUsdPerMillion !== undefined) {
|
|
71
|
+
buyer.maxPricing.defaults.inputUsdPerMillion = overrides.maxInputUsdPerMillion;
|
|
72
|
+
}
|
|
73
|
+
if (overrides?.maxOutputUsdPerMillion !== undefined) {
|
|
74
|
+
buyer.maxPricing.defaults.outputUsdPerMillion = overrides.maxOutputUsdPerMillion;
|
|
75
|
+
}
|
|
76
|
+
return buyer;
|
|
77
|
+
}
|
|
78
|
+
export function resolveEffectiveRoleConfig(input) {
|
|
79
|
+
return {
|
|
80
|
+
seller: resolveEffectiveSellerConfig(input),
|
|
81
|
+
buyer: resolveEffectiveBuyerConfig(input),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=effective.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective.js","sourceRoot":"","sources":["../../src/config/effective.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective.test.d.ts","sourceRoot":"","sources":["../../src/config/effective.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { createDefaultConfig } from './defaults.js';
|
|
4
|
+
import { resolveEffectiveBuyerConfig, resolveEffectiveRoleConfig, resolveEffectiveSellerConfig, } from './effective.js';
|
|
5
|
+
test('effective seller config precedence is flags > env > config > defaults', () => {
|
|
6
|
+
const config = createDefaultConfig();
|
|
7
|
+
config.seller.pricing.defaults.inputUsdPerMillion = 10;
|
|
8
|
+
config.seller.pricing.defaults.outputUsdPerMillion = 20;
|
|
9
|
+
const env = {
|
|
10
|
+
ANTSEED_SELLER_INPUT_USD_PER_MILLION: '30',
|
|
11
|
+
ANTSEED_SELLER_OUTPUT_USD_PER_MILLION: '40',
|
|
12
|
+
};
|
|
13
|
+
const effective = resolveEffectiveSellerConfig({
|
|
14
|
+
config,
|
|
15
|
+
env,
|
|
16
|
+
sellerOverrides: {
|
|
17
|
+
inputUsdPerMillion: 50,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
assert.equal(effective.pricing.defaults.inputUsdPerMillion, 50);
|
|
21
|
+
assert.equal(effective.pricing.defaults.outputUsdPerMillion, 40);
|
|
22
|
+
});
|
|
23
|
+
test('effective buyer config precedence is flags > env > config > defaults', () => {
|
|
24
|
+
const config = createDefaultConfig();
|
|
25
|
+
config.buyer.minPeerReputation = 25;
|
|
26
|
+
config.buyer.maxPricing.defaults.inputUsdPerMillion = 70;
|
|
27
|
+
config.buyer.maxPricing.defaults.outputUsdPerMillion = 80;
|
|
28
|
+
const env = {
|
|
29
|
+
ANTSEED_BUYER_MIN_REPUTATION: '45',
|
|
30
|
+
ANTSEED_BUYER_PREFERRED_PROVIDERS: 'openai,anthropic',
|
|
31
|
+
ANTSEED_BUYER_MAX_INPUT_USD_PER_MILLION: '90',
|
|
32
|
+
ANTSEED_BUYER_MAX_OUTPUT_USD_PER_MILLION: '95',
|
|
33
|
+
};
|
|
34
|
+
const effective = resolveEffectiveBuyerConfig({
|
|
35
|
+
config,
|
|
36
|
+
env,
|
|
37
|
+
buyerOverrides: {
|
|
38
|
+
minPeerReputation: 55,
|
|
39
|
+
preferredProviders: ['anthropic', 'openai'],
|
|
40
|
+
maxOutputUsdPerMillion: 99,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
assert.equal(effective.minPeerReputation, 55);
|
|
44
|
+
assert.deepEqual(effective.preferredProviders, ['anthropic', 'openai']);
|
|
45
|
+
assert.equal(effective.maxPricing.defaults.inputUsdPerMillion, 90);
|
|
46
|
+
assert.equal(effective.maxPricing.defaults.outputUsdPerMillion, 99);
|
|
47
|
+
});
|
|
48
|
+
test('effective config resolution does not mutate loaded config', () => {
|
|
49
|
+
const config = createDefaultConfig();
|
|
50
|
+
const original = JSON.parse(JSON.stringify(config));
|
|
51
|
+
const env = {
|
|
52
|
+
ANTSEED_BUYER_MAX_INPUT_USD_PER_MILLION: '123',
|
|
53
|
+
};
|
|
54
|
+
const effective = resolveEffectiveRoleConfig({
|
|
55
|
+
config,
|
|
56
|
+
env,
|
|
57
|
+
sellerOverrides: {
|
|
58
|
+
outputUsdPerMillion: 44,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
assert.equal(effective.buyer.maxPricing.defaults.inputUsdPerMillion, 123);
|
|
62
|
+
assert.equal(effective.seller.pricing.defaults.outputUsdPerMillion, 44);
|
|
63
|
+
assert.deepEqual(config, original);
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=effective.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective.test.js","sourceRoot":"","sources":["../../src/config/effective.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AntseedConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load configuration from a JSON file.
|
|
4
|
+
* Returns default configuration if the file does not exist.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadConfig(configPath: string): Promise<AntseedConfig>;
|
|
7
|
+
/**
|
|
8
|
+
* Save configuration to a JSON file.
|
|
9
|
+
* Creates the directory if it doesn't exist.
|
|
10
|
+
*/
|
|
11
|
+
export declare function saveConfig(configPath: string, config: AntseedConfig): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EAGd,MAAM,YAAY,CAAC;AAoLpB;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgD3E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF"}
|