@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.
Files changed (179) hide show
  1. package/.env.example +15 -0
  2. package/README.md +169 -0
  3. package/dist/cli/commands/balance.d.ts +3 -0
  4. package/dist/cli/commands/balance.d.ts.map +1 -0
  5. package/dist/cli/commands/balance.js +64 -0
  6. package/dist/cli/commands/balance.js.map +1 -0
  7. package/dist/cli/commands/browse.d.ts +7 -0
  8. package/dist/cli/commands/browse.d.ts.map +1 -0
  9. package/dist/cli/commands/browse.js +100 -0
  10. package/dist/cli/commands/browse.js.map +1 -0
  11. package/dist/cli/commands/config.d.ts +20 -0
  12. package/dist/cli/commands/config.d.ts.map +1 -0
  13. package/dist/cli/commands/config.js +239 -0
  14. package/dist/cli/commands/config.js.map +1 -0
  15. package/dist/cli/commands/connect.d.ts +14 -0
  16. package/dist/cli/commands/connect.d.ts.map +1 -0
  17. package/dist/cli/commands/connect.js +298 -0
  18. package/dist/cli/commands/connect.js.map +1 -0
  19. package/dist/cli/commands/connect.test.d.ts +2 -0
  20. package/dist/cli/commands/connect.test.d.ts.map +1 -0
  21. package/dist/cli/commands/connect.test.js +54 -0
  22. package/dist/cli/commands/connect.test.js.map +1 -0
  23. package/dist/cli/commands/dashboard.d.ts +6 -0
  24. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  25. package/dist/cli/commands/dashboard.js +48 -0
  26. package/dist/cli/commands/dashboard.js.map +1 -0
  27. package/dist/cli/commands/deposit.d.ts +3 -0
  28. package/dist/cli/commands/deposit.d.ts.map +1 -0
  29. package/dist/cli/commands/deposit.js +48 -0
  30. package/dist/cli/commands/deposit.js.map +1 -0
  31. package/dist/cli/commands/dev.d.ts +3 -0
  32. package/dist/cli/commands/dev.d.ts.map +1 -0
  33. package/dist/cli/commands/dev.js +94 -0
  34. package/dist/cli/commands/dev.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +3 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +91 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/plugin-create.d.ts +11 -0
  40. package/dist/cli/commands/plugin-create.d.ts.map +1 -0
  41. package/dist/cli/commands/plugin-create.js +201 -0
  42. package/dist/cli/commands/plugin-create.js.map +1 -0
  43. package/dist/cli/commands/plugin-create.test.d.ts +2 -0
  44. package/dist/cli/commands/plugin-create.test.d.ts.map +1 -0
  45. package/dist/cli/commands/plugin-create.test.js +53 -0
  46. package/dist/cli/commands/plugin-create.test.js.map +1 -0
  47. package/dist/cli/commands/plugin.d.ts +3 -0
  48. package/dist/cli/commands/plugin.d.ts.map +1 -0
  49. package/dist/cli/commands/plugin.js +279 -0
  50. package/dist/cli/commands/plugin.js.map +1 -0
  51. package/dist/cli/commands/plugin.test.d.ts +2 -0
  52. package/dist/cli/commands/plugin.test.d.ts.map +1 -0
  53. package/dist/cli/commands/plugin.test.js +53 -0
  54. package/dist/cli/commands/plugin.test.js.map +1 -0
  55. package/dist/cli/commands/profile.d.ts +10 -0
  56. package/dist/cli/commands/profile.d.ts.map +1 -0
  57. package/dist/cli/commands/profile.js +89 -0
  58. package/dist/cli/commands/profile.js.map +1 -0
  59. package/dist/cli/commands/seed.d.ts +11 -0
  60. package/dist/cli/commands/seed.d.ts.map +1 -0
  61. package/dist/cli/commands/seed.js +397 -0
  62. package/dist/cli/commands/seed.js.map +1 -0
  63. package/dist/cli/commands/seed.test.d.ts +2 -0
  64. package/dist/cli/commands/seed.test.d.ts.map +1 -0
  65. package/dist/cli/commands/seed.test.js +57 -0
  66. package/dist/cli/commands/seed.test.js.map +1 -0
  67. package/dist/cli/commands/status.d.ts +8 -0
  68. package/dist/cli/commands/status.d.ts.map +1 -0
  69. package/dist/cli/commands/status.js +55 -0
  70. package/dist/cli/commands/status.js.map +1 -0
  71. package/dist/cli/commands/types.d.ts +14 -0
  72. package/dist/cli/commands/types.d.ts.map +1 -0
  73. package/dist/cli/commands/types.js +41 -0
  74. package/dist/cli/commands/types.js.map +1 -0
  75. package/dist/cli/commands/withdraw.d.ts +3 -0
  76. package/dist/cli/commands/withdraw.d.ts.map +1 -0
  77. package/dist/cli/commands/withdraw.js +48 -0
  78. package/dist/cli/commands/withdraw.js.map +1 -0
  79. package/dist/cli/formatters.d.ts +29 -0
  80. package/dist/cli/formatters.d.ts.map +1 -0
  81. package/dist/cli/formatters.js +67 -0
  82. package/dist/cli/formatters.js.map +1 -0
  83. package/dist/cli/index.d.ts +3 -0
  84. package/dist/cli/index.d.ts.map +1 -0
  85. package/dist/cli/index.js +41 -0
  86. package/dist/cli/index.js.map +1 -0
  87. package/dist/cli/shutdown.d.ts +11 -0
  88. package/dist/cli/shutdown.d.ts.map +1 -0
  89. package/dist/cli/shutdown.js +34 -0
  90. package/dist/cli/shutdown.js.map +1 -0
  91. package/dist/config/defaults.d.ts +6 -0
  92. package/dist/config/defaults.d.ts.map +1 -0
  93. package/dist/config/defaults.js +48 -0
  94. package/dist/config/defaults.js.map +1 -0
  95. package/dist/config/effective.d.ts +26 -0
  96. package/dist/config/effective.d.ts.map +1 -0
  97. package/dist/config/effective.js +84 -0
  98. package/dist/config/effective.js.map +1 -0
  99. package/dist/config/effective.test.d.ts +2 -0
  100. package/dist/config/effective.test.d.ts.map +1 -0
  101. package/dist/config/effective.test.js +65 -0
  102. package/dist/config/effective.test.js.map +1 -0
  103. package/dist/config/loader.d.ts +12 -0
  104. package/dist/config/loader.d.ts.map +1 -0
  105. package/dist/config/loader.js +212 -0
  106. package/dist/config/loader.js.map +1 -0
  107. package/dist/config/loader.test.d.ts +2 -0
  108. package/dist/config/loader.test.d.ts.map +1 -0
  109. package/dist/config/loader.test.js +77 -0
  110. package/dist/config/loader.test.js.map +1 -0
  111. package/dist/config/types.d.ts +133 -0
  112. package/dist/config/types.d.ts.map +1 -0
  113. package/dist/config/types.js +2 -0
  114. package/dist/config/types.js.map +1 -0
  115. package/dist/config/validation.d.ts +10 -0
  116. package/dist/config/validation.d.ts.map +1 -0
  117. package/dist/config/validation.js +50 -0
  118. package/dist/config/validation.js.map +1 -0
  119. package/dist/env/load-env.d.ts +6 -0
  120. package/dist/env/load-env.d.ts.map +1 -0
  121. package/dist/env/load-env.js +18 -0
  122. package/dist/env/load-env.js.map +1 -0
  123. package/dist/plugins/loader.d.ts +7 -0
  124. package/dist/plugins/loader.d.ts.map +1 -0
  125. package/dist/plugins/loader.js +70 -0
  126. package/dist/plugins/loader.js.map +1 -0
  127. package/dist/plugins/manager.d.ts +11 -0
  128. package/dist/plugins/manager.d.ts.map +1 -0
  129. package/dist/plugins/manager.js +52 -0
  130. package/dist/plugins/manager.js.map +1 -0
  131. package/dist/plugins/registry.d.ts +8 -0
  132. package/dist/plugins/registry.d.ts.map +1 -0
  133. package/dist/plugins/registry.js +39 -0
  134. package/dist/plugins/registry.js.map +1 -0
  135. package/dist/proxy/buyer-proxy.d.ts +30 -0
  136. package/dist/proxy/buyer-proxy.d.ts.map +1 -0
  137. package/dist/proxy/buyer-proxy.js +488 -0
  138. package/dist/proxy/buyer-proxy.js.map +1 -0
  139. package/dist/status/node-status.d.ts +22 -0
  140. package/dist/status/node-status.d.ts.map +1 -0
  141. package/dist/status/node-status.js +83 -0
  142. package/dist/status/node-status.js.map +1 -0
  143. package/package.json +39 -0
  144. package/src/cli/commands/balance.ts +77 -0
  145. package/src/cli/commands/browse.ts +113 -0
  146. package/src/cli/commands/config.ts +271 -0
  147. package/src/cli/commands/connect.test.ts +69 -0
  148. package/src/cli/commands/connect.ts +342 -0
  149. package/src/cli/commands/dashboard.ts +59 -0
  150. package/src/cli/commands/deposit.ts +61 -0
  151. package/src/cli/commands/dev.ts +107 -0
  152. package/src/cli/commands/init.ts +99 -0
  153. package/src/cli/commands/plugin-create.test.ts +60 -0
  154. package/src/cli/commands/plugin-create.ts +230 -0
  155. package/src/cli/commands/plugin.test.ts +55 -0
  156. package/src/cli/commands/plugin.ts +295 -0
  157. package/src/cli/commands/profile.ts +95 -0
  158. package/src/cli/commands/seed.test.ts +70 -0
  159. package/src/cli/commands/seed.ts +447 -0
  160. package/src/cli/commands/status.ts +73 -0
  161. package/src/cli/commands/types.ts +56 -0
  162. package/src/cli/commands/withdraw.ts +61 -0
  163. package/src/cli/formatters.ts +64 -0
  164. package/src/cli/index.ts +46 -0
  165. package/src/cli/shutdown.ts +38 -0
  166. package/src/config/defaults.ts +49 -0
  167. package/src/config/effective.test.ts +80 -0
  168. package/src/config/effective.ts +119 -0
  169. package/src/config/loader.test.ts +95 -0
  170. package/src/config/loader.ts +251 -0
  171. package/src/config/types.ts +139 -0
  172. package/src/config/validation.ts +78 -0
  173. package/src/env/load-env.ts +20 -0
  174. package/src/plugins/loader.ts +96 -0
  175. package/src/plugins/manager.ts +66 -0
  176. package/src/plugins/registry.ts +45 -0
  177. package/src/proxy/buyer-proxy.ts +604 -0
  178. package/src/status/node-status.ts +105 -0
  179. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ import type { AntseedConfig } from './types.js';
2
+ /**
3
+ * Create a default Antseed configuration with sensible defaults.
4
+ */
5
+ export declare function createDefaultConfig(): AntseedConfig;
6
+ //# sourceMappingURL=defaults.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=effective.test.d.ts.map
@@ -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"}