@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,279 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { createInterface } from 'node:readline/promises';
4
+ import { join } from 'node:path';
5
+ import { homedir } from 'node:os';
6
+ import { installPlugin, removePlugin, listInstalledPlugins, getPluginsDir } from '../../plugins/manager.js';
7
+ import { TRUSTED_PLUGINS } from '../../plugins/registry.js';
8
+ import { addInstance, removeInstance, getInstance, getInstances, updateInstanceConfig, loadPluginModule, } from '@antseed/node';
9
+ import { registerPluginCreateCommand } from './plugin-create.js';
10
+ const CONFIG_PATH = join(homedir(), '.antseed', 'config.json');
11
+ function generateInstanceId(pluginName) {
12
+ const suffix = Math.random().toString(36).slice(2, 8);
13
+ return `${pluginName}-${suffix}`;
14
+ }
15
+ function getConfigSchema(plugin) {
16
+ return plugin.configSchema ?? plugin.configKeys ?? [];
17
+ }
18
+ function maskSecret(value) {
19
+ if (value.length <= 4)
20
+ return '****';
21
+ return '****' + value.slice(-4);
22
+ }
23
+ async function promptForFields(rl, schema, existingConfig) {
24
+ const config = {};
25
+ for (const field of schema) {
26
+ const defaultVal = existingConfig?.[field.key] ?? field.default;
27
+ const defaultHint = field.type === 'secret' && typeof defaultVal === 'string' && defaultVal
28
+ ? ` [${maskSecret(defaultVal)}]`
29
+ : defaultVal !== undefined
30
+ ? ` [${String(defaultVal)}]`
31
+ : '';
32
+ const requiredHint = field.required ? ' (required)' : '';
33
+ const desc = field.description ? ` — ${field.description}` : '';
34
+ const prompt = ` ${field.label}${requiredHint}${desc}${defaultHint}: `;
35
+ let answer;
36
+ if (field.type === 'secret') {
37
+ process.stdout.write(prompt);
38
+ const stdin = process.stdin;
39
+ const wasRaw = stdin.isRaw;
40
+ if (stdin.isTTY)
41
+ stdin.setRawMode(true);
42
+ let secret = '';
43
+ answer = await new Promise((resolve) => {
44
+ const onData = (chunk) => {
45
+ const ch = chunk.toString();
46
+ if (ch === '\n' || ch === '\r') {
47
+ stdin.removeListener('data', onData);
48
+ if (stdin.isTTY && wasRaw !== undefined)
49
+ stdin.setRawMode(wasRaw);
50
+ process.stdout.write('\n');
51
+ resolve(secret);
52
+ }
53
+ else if (ch === '\u007f' || ch === '\b') {
54
+ secret = secret.slice(0, -1);
55
+ }
56
+ else if (ch === '\u0003') {
57
+ stdin.removeListener('data', onData);
58
+ if (stdin.isTTY && wasRaw !== undefined)
59
+ stdin.setRawMode(wasRaw);
60
+ process.exit(0);
61
+ }
62
+ else {
63
+ secret += ch;
64
+ }
65
+ };
66
+ stdin.on('data', onData);
67
+ });
68
+ }
69
+ else {
70
+ answer = await rl.question(prompt);
71
+ }
72
+ const trimmed = answer.trim();
73
+ if (trimmed) {
74
+ if (field.type === 'number') {
75
+ config[field.key] = Number(trimmed);
76
+ }
77
+ else if (field.type === 'boolean') {
78
+ config[field.key] = trimmed === 'true' || trimmed === 'yes' || trimmed === '1';
79
+ }
80
+ else {
81
+ config[field.key] = trimmed;
82
+ }
83
+ }
84
+ else if (defaultVal !== undefined) {
85
+ config[field.key] = defaultVal;
86
+ }
87
+ else if (field.required) {
88
+ console.log(chalk.red(` ${field.label} is required.`));
89
+ // Re-prompt by recursing on just this field
90
+ const retry = await promptForFields(rl, [field], existingConfig);
91
+ config[field.key] = retry[field.key];
92
+ }
93
+ }
94
+ return config;
95
+ }
96
+ export function registerPluginCommand(program) {
97
+ const pluginCmd = program
98
+ .command('plugin')
99
+ .description('Manage antseed plugins');
100
+ // Task 1: plugin add with interactive config
101
+ pluginCmd
102
+ .command('add <package>')
103
+ .description('Install a plugin from npm and configure an instance')
104
+ .action(async (packageName) => {
105
+ const spinner = ora(`Installing ${packageName}...`).start();
106
+ try {
107
+ await installPlugin(packageName);
108
+ spinner.succeed(chalk.green(`Installed ${packageName}`));
109
+ }
110
+ catch (err) {
111
+ spinner.fail(chalk.red(`Failed to install ${packageName}: ${err.message}`));
112
+ process.exit(1);
113
+ }
114
+ // Load plugin module to read configSchema
115
+ let plugin;
116
+ try {
117
+ plugin = await loadPluginModule(packageName, getPluginsDir());
118
+ }
119
+ catch (err) {
120
+ console.log(chalk.yellow(`\nInstalled but could not load plugin module: ${err.message}`));
121
+ return;
122
+ }
123
+ const schema = getConfigSchema(plugin);
124
+ if (schema.length === 0) {
125
+ console.log(chalk.dim('\nPlugin has no configuration fields.'));
126
+ const instanceId = generateInstanceId(plugin.name);
127
+ await addInstance(CONFIG_PATH, {
128
+ id: instanceId,
129
+ package: packageName,
130
+ type: plugin.type,
131
+ config: {},
132
+ enabled: true,
133
+ createdAt: new Date().toISOString(),
134
+ }, schema);
135
+ console.log(chalk.green(`\nCreated instance: ${instanceId}`));
136
+ return;
137
+ }
138
+ console.log(chalk.bold(`\nConfigure ${plugin.displayName}:\n`));
139
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
140
+ try {
141
+ const config = await promptForFields(rl, schema);
142
+ const instanceId = generateInstanceId(plugin.name);
143
+ await addInstance(CONFIG_PATH, {
144
+ id: instanceId,
145
+ package: packageName,
146
+ type: plugin.type,
147
+ config,
148
+ enabled: true,
149
+ createdAt: new Date().toISOString(),
150
+ }, schema);
151
+ console.log(chalk.green(`\nCreated instance: ${instanceId}`));
152
+ }
153
+ finally {
154
+ rl.close();
155
+ }
156
+ });
157
+ // Task 2: plugin config command
158
+ pluginCmd
159
+ .command('config <id>')
160
+ .description('Update configuration for a plugin instance')
161
+ .action(async (instanceId) => {
162
+ const instance = await getInstance(CONFIG_PATH, instanceId);
163
+ if (!instance) {
164
+ console.log(chalk.red(`Instance "${instanceId}" not found.`));
165
+ process.exit(1);
166
+ }
167
+ let plugin;
168
+ try {
169
+ plugin = await loadPluginModule(instance.package, getPluginsDir());
170
+ }
171
+ catch (err) {
172
+ console.log(chalk.red(`Could not load plugin: ${err.message}`));
173
+ process.exit(1);
174
+ return; // unreachable but satisfies TS
175
+ }
176
+ const schema = getConfigSchema(plugin);
177
+ if (schema.length === 0) {
178
+ console.log(chalk.dim('Plugin has no configuration fields.'));
179
+ return;
180
+ }
181
+ console.log(chalk.bold(`\nConfigure ${plugin.displayName} (${instanceId}):\n`));
182
+ // Show current values
183
+ for (const field of schema) {
184
+ const current = instance.config[field.key];
185
+ if (current !== undefined) {
186
+ const display = field.type === 'secret' ? maskSecret(String(current)) : String(current);
187
+ console.log(chalk.dim(` Current ${field.label}: ${display}`));
188
+ }
189
+ }
190
+ console.log('');
191
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
192
+ try {
193
+ const newConfig = await promptForFields(rl, schema, instance.config);
194
+ await updateInstanceConfig(CONFIG_PATH, instanceId, newConfig, schema);
195
+ console.log(chalk.green(`\nUpdated instance: ${instanceId}`));
196
+ }
197
+ finally {
198
+ rl.close();
199
+ }
200
+ });
201
+ // Task 5: plugin remove with instance handling
202
+ pluginCmd
203
+ .command('remove <name>')
204
+ .description('Remove a plugin instance or uninstall a package')
205
+ .action(async (name) => {
206
+ // Check if name matches an instance ID
207
+ const instance = await getInstance(CONFIG_PATH, name);
208
+ if (instance) {
209
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
210
+ try {
211
+ const confirm = await rl.question(`Remove instance "${name}"? (y/N): `);
212
+ if (confirm.trim().toLowerCase() !== 'y') {
213
+ console.log(chalk.dim('Cancelled.'));
214
+ return;
215
+ }
216
+ await removeInstance(CONFIG_PATH, name);
217
+ console.log(chalk.green(`Removed instance: ${name}`));
218
+ const uninstall = await rl.question(`Also uninstall npm package "${instance.package}"? (y/N): `);
219
+ if (uninstall.trim().toLowerCase() === 'y') {
220
+ const spinner = ora(`Removing ${instance.package}...`).start();
221
+ try {
222
+ await removePlugin(instance.package);
223
+ spinner.succeed(chalk.green(`Uninstalled ${instance.package}`));
224
+ }
225
+ catch (err) {
226
+ spinner.fail(chalk.red(`Failed to uninstall: ${err.message}`));
227
+ }
228
+ }
229
+ }
230
+ finally {
231
+ rl.close();
232
+ }
233
+ return;
234
+ }
235
+ // Fall through: treat as npm package name
236
+ const spinner = ora(`Removing ${name}...`).start();
237
+ try {
238
+ await removePlugin(name);
239
+ spinner.succeed(chalk.green(`Removed ${name}`));
240
+ }
241
+ catch (err) {
242
+ spinner.fail(chalk.red(`Failed to remove ${name}: ${err.message}`));
243
+ process.exit(1);
244
+ }
245
+ });
246
+ // Task 4: plugin list with instances
247
+ pluginCmd
248
+ .command('list')
249
+ .description('List installed plugins and configured instances')
250
+ .action(async () => {
251
+ const installed = await listInstalledPlugins();
252
+ const trusted = new Set(TRUSTED_PLUGINS.map((p) => p.package));
253
+ if (installed.length === 0) {
254
+ console.log(chalk.dim('No plugins installed. Run: antseed init'));
255
+ }
256
+ else {
257
+ console.log(chalk.bold('\nInstalled plugins:\n'));
258
+ for (const plugin of installed) {
259
+ const isTrusted = trusted.has(plugin.package);
260
+ const badge = isTrusted ? chalk.green(' [trusted]') : '';
261
+ console.log(` ${chalk.cyan(plugin.package)} ${chalk.dim(plugin.version)}${badge}`);
262
+ }
263
+ console.log('');
264
+ }
265
+ // Show configured instances
266
+ const instances = await getInstances(CONFIG_PATH);
267
+ if (instances.length > 0) {
268
+ console.log(chalk.bold('Configured instances:\n'));
269
+ for (const inst of instances) {
270
+ const status = inst.enabled === false ? chalk.red(' [disabled]') : chalk.green(' [enabled]');
271
+ console.log(` ${chalk.cyan(inst.id)} ${chalk.dim(inst.package)}${status}`);
272
+ }
273
+ console.log('');
274
+ }
275
+ });
276
+ // Register plugin create subcommand (Task 3)
277
+ registerPluginCreateCommand(pluginCmd);
278
+ }
279
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { TRUSTED_PLUGINS } from '../../plugins/registry.js';
4
+ import { buildPluginConfig, LEGACY_PACKAGE_MAP } from '../../plugins/loader.js';
5
+ test('TRUSTED_PLUGINS contains 6 official plugins', () => {
6
+ assert.equal(TRUSTED_PLUGINS.length, 6);
7
+ const names = TRUSTED_PLUGINS.map(p => p.name);
8
+ assert.ok(names.includes('anthropic'));
9
+ assert.ok(names.includes('claude-code'));
10
+ assert.ok(names.includes('openrouter'));
11
+ assert.ok(names.includes('local-llm'));
12
+ assert.ok(names.includes('local-proxy'));
13
+ assert.ok(names.includes('local-chat'));
14
+ });
15
+ test('TRUSTED_PLUGINS all have scoped package names', () => {
16
+ for (const plugin of TRUSTED_PLUGINS) {
17
+ assert.ok(plugin.package.startsWith('@antseed/'), `${plugin.name} package should be scoped`);
18
+ }
19
+ });
20
+ test('buildPluginConfig uses priority: instanceConfig < env < overrides', () => {
21
+ const keys = [
22
+ { key: 'API_KEY', label: 'API Key', type: 'string' },
23
+ { key: 'MODEL', label: 'Model', type: 'string' },
24
+ ];
25
+ const instanceConfig = { API_KEY: 'from-instance', MODEL: 'from-instance' };
26
+ const original = process.env['API_KEY'];
27
+ process.env['API_KEY'] = 'from-env';
28
+ try {
29
+ const result = buildPluginConfig(keys, { API_KEY: 'from-override' }, instanceConfig);
30
+ assert.equal(result['API_KEY'], 'from-override');
31
+ assert.equal(result['MODEL'], 'from-instance');
32
+ }
33
+ finally {
34
+ if (original === undefined) {
35
+ delete process.env['API_KEY'];
36
+ }
37
+ else {
38
+ process.env['API_KEY'] = original;
39
+ }
40
+ }
41
+ });
42
+ test('buildPluginConfig works without instanceConfig (backwards compatible)', () => {
43
+ const keys = [
44
+ { key: 'TEST_KEY_COMPAT', label: 'Test', type: 'string' },
45
+ ];
46
+ const result = buildPluginConfig(keys, { TEST_KEY_COMPAT: 'override' });
47
+ assert.equal(result['TEST_KEY_COMPAT'], 'override');
48
+ });
49
+ test('LEGACY_PACKAGE_MAP maps old names to scoped names', () => {
50
+ assert.equal(LEGACY_PACKAGE_MAP['antseed-provider-anthropic'], '@antseed/provider-claude-code');
51
+ assert.equal(LEGACY_PACKAGE_MAP['antseed-router-claude-code'], '@antseed/router-local-proxy');
52
+ });
53
+ //# sourceMappingURL=plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the `antseed profile` command and its subcommands.
4
+ */
5
+ export declare function registerProfileCommand(program: Command): void;
6
+ /**
7
+ * Register the `antseed peer <peerId>` command.
8
+ */
9
+ export declare function registerPeerCommand(program: Command): void;
10
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS1D"}
@@ -0,0 +1,89 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Register the `antseed profile` command and its subcommands.
4
+ */
5
+ export function registerProfileCommand(program) {
6
+ const profile = program
7
+ .command('profile')
8
+ .description('Manage your peer profile');
9
+ profile
10
+ .command('show')
11
+ .description('Display your current profile')
12
+ .action(async () => {
13
+ const { readFile } = await import('node:fs/promises');
14
+ const { join } = await import('node:path');
15
+ const { homedir } = await import('node:os');
16
+ const profilePath = join(homedir(), '.antseed', 'profile.json');
17
+ try {
18
+ const data = await readFile(profilePath, 'utf-8');
19
+ const prof = JSON.parse(data);
20
+ console.log(chalk.bold('Peer Profile'));
21
+ console.log(chalk.dim('\u2500'.repeat(40)));
22
+ console.log(` Name: ${chalk.cyan(prof.displayName)}`);
23
+ console.log(` Description: ${prof.description}`);
24
+ console.log(` Tags: ${(prof.tags || []).join(', ')}`);
25
+ console.log(` Capabilities: ${(prof.capabilities || []).join(', ')}`);
26
+ console.log(` Region: ${prof.region}`);
27
+ console.log(` Languages: ${(prof.languages || []).join(', ')}`);
28
+ if (prof.website)
29
+ console.log(` Website: ${prof.website}`);
30
+ console.log(` Created: ${new Date(prof.createdAt).toISOString()}`);
31
+ console.log(` Updated: ${new Date(prof.updatedAt).toISOString()}`);
32
+ }
33
+ catch {
34
+ console.log(chalk.yellow('No profile found. Use "antseed profile set" to create one.'));
35
+ }
36
+ });
37
+ profile
38
+ .command('set')
39
+ .description('Create or update your profile')
40
+ .requiredOption('--name <name>', 'Display name')
41
+ .option('--description <desc>', 'Description of what you offer', '')
42
+ .option('--tags <tags>', 'Comma-separated tags', '')
43
+ .option('--capabilities <caps>', 'Comma-separated capabilities (inference,agent,skill,tool)', 'inference')
44
+ .option('--region <region>', 'Region', 'unknown')
45
+ .option('--languages <langs>', 'Comma-separated languages', 'en')
46
+ .option('--website <url>', 'Website URL')
47
+ .action(async (options) => {
48
+ const { writeFile, mkdir, readFile } = await import('node:fs/promises');
49
+ const { join } = await import('node:path');
50
+ const { homedir } = await import('node:os');
51
+ const dir = join(homedir(), '.antseed');
52
+ await mkdir(dir, { recursive: true });
53
+ const profilePath = join(dir, 'profile.json');
54
+ let existing = {};
55
+ try {
56
+ existing = JSON.parse(await readFile(profilePath, 'utf-8'));
57
+ }
58
+ catch { }
59
+ const now = Date.now();
60
+ const prof = {
61
+ ...existing,
62
+ displayName: options.name,
63
+ description: options.description || existing.description || '',
64
+ tags: options.tags ? options.tags.split(',').map((t) => t.trim()) : existing.tags || [],
65
+ capabilities: options.capabilities.split(',').map((c) => c.trim()),
66
+ region: options.region,
67
+ languages: options.languages.split(',').map((l) => l.trim()),
68
+ website: options.website || existing.website,
69
+ createdAt: existing.createdAt || now,
70
+ updatedAt: now,
71
+ };
72
+ await writeFile(profilePath, JSON.stringify(prof, null, 2));
73
+ console.log(chalk.green('Profile saved successfully.'));
74
+ });
75
+ }
76
+ /**
77
+ * Register the `antseed peer <peerId>` command.
78
+ */
79
+ export function registerPeerCommand(program) {
80
+ program
81
+ .command('peer')
82
+ .description('View a peer\'s profile')
83
+ .argument('<peerId>', 'Peer ID (hex)')
84
+ .action(async (peerId) => {
85
+ console.log(chalk.bold(`Peer: ${peerId.slice(0, 16)}...`));
86
+ console.log(chalk.yellow('Connect to the network first to view peer details.'));
87
+ });
88
+ }
89
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Command } from 'commander';
2
+ import { type SellerRuntimeOverrides } from '../../config/effective.js';
3
+ import type { SellerCLIConfig } from '../../config/types.js';
4
+ export declare function buildSellerRuntimeOverridesFromFlags(options: {
5
+ reserve?: number;
6
+ inputUsdPerMillion?: number;
7
+ outputUsdPerMillion?: number;
8
+ }): SellerRuntimeOverrides;
9
+ export declare function buildSellerPluginRuntimeEnv(sellerConfig: SellerCLIConfig, providerName: string): Record<string, string>;
10
+ export declare function registerSeedCommand(program: Command): void;
11
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcxC,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAuD5D,wBAAgB,oCAAoC,CAAC,OAAO,EAAE;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,GAAG,sBAAsB,CAYzB;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,eAAe,EAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoV1D"}