clawmarket 0.4.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 (94) hide show
  1. package/README.md +142 -0
  2. package/dist/api-proxy.d.ts +11 -0
  3. package/dist/api-proxy.d.ts.map +1 -0
  4. package/dist/api-proxy.js +98 -0
  5. package/dist/api-proxy.js.map +1 -0
  6. package/dist/buyer/discovery.d.ts +52 -0
  7. package/dist/buyer/discovery.d.ts.map +1 -0
  8. package/dist/buyer/discovery.js +121 -0
  9. package/dist/buyer/discovery.js.map +1 -0
  10. package/dist/buyer/index.d.ts +4 -0
  11. package/dist/buyer/index.d.ts.map +1 -0
  12. package/dist/buyer/index.js +4 -0
  13. package/dist/buyer/index.js.map +1 -0
  14. package/dist/buyer/mode.d.ts +60 -0
  15. package/dist/buyer/mode.d.ts.map +1 -0
  16. package/dist/buyer/mode.js +150 -0
  17. package/dist/buyer/mode.js.map +1 -0
  18. package/dist/buyer/relay.d.ts +27 -0
  19. package/dist/buyer/relay.d.ts.map +1 -0
  20. package/dist/buyer/relay.js +103 -0
  21. package/dist/buyer/relay.js.map +1 -0
  22. package/dist/cli.d.ts +11 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +252 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/config.d.ts +29 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +37 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/crypto/e2ee.d.ts +45 -0
  31. package/dist/crypto/e2ee.d.ts.map +1 -0
  32. package/dist/crypto/e2ee.js +87 -0
  33. package/dist/crypto/e2ee.js.map +1 -0
  34. package/dist/crypto/index.d.ts +3 -0
  35. package/dist/crypto/index.d.ts.map +1 -0
  36. package/dist/crypto/index.js +3 -0
  37. package/dist/crypto/index.js.map +1 -0
  38. package/dist/crypto/ticket.d.ts +62 -0
  39. package/dist/crypto/ticket.d.ts.map +1 -0
  40. package/dist/crypto/ticket.js +123 -0
  41. package/dist/crypto/ticket.js.map +1 -0
  42. package/dist/index.d.ts +11 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +13 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/local-proxy.d.ts +12 -0
  47. package/dist/local-proxy.d.ts.map +1 -0
  48. package/dist/local-proxy.js +593 -0
  49. package/dist/local-proxy.js.map +1 -0
  50. package/dist/openclaw-adapter.d.ts +105 -0
  51. package/dist/openclaw-adapter.d.ts.map +1 -0
  52. package/dist/openclaw-adapter.js +125 -0
  53. package/dist/openclaw-adapter.js.map +1 -0
  54. package/dist/provider.d.ts +116 -0
  55. package/dist/provider.d.ts.map +1 -0
  56. package/dist/provider.js +328 -0
  57. package/dist/provider.js.map +1 -0
  58. package/dist/seller/index.d.ts +4 -0
  59. package/dist/seller/index.d.ts.map +1 -0
  60. package/dist/seller/index.js +4 -0
  61. package/dist/seller/index.js.map +1 -0
  62. package/dist/seller/mode.d.ts +62 -0
  63. package/dist/seller/mode.d.ts.map +1 -0
  64. package/dist/seller/mode.js +179 -0
  65. package/dist/seller/mode.js.map +1 -0
  66. package/dist/seller/registry.d.ts +27 -0
  67. package/dist/seller/registry.d.ts.map +1 -0
  68. package/dist/seller/registry.js +95 -0
  69. package/dist/seller/registry.js.map +1 -0
  70. package/dist/seller/relay.d.ts +64 -0
  71. package/dist/seller/relay.d.ts.map +1 -0
  72. package/dist/seller/relay.js +171 -0
  73. package/dist/seller/relay.js.map +1 -0
  74. package/dist/seller-cli.d.ts +26 -0
  75. package/dist/seller-cli.d.ts.map +1 -0
  76. package/dist/seller-cli.js +354 -0
  77. package/dist/seller-cli.js.map +1 -0
  78. package/dist/seller-daemon.d.ts +7 -0
  79. package/dist/seller-daemon.d.ts.map +1 -0
  80. package/dist/seller-daemon.js +349 -0
  81. package/dist/seller-daemon.js.map +1 -0
  82. package/dist/types/config.d.ts +529 -0
  83. package/dist/types/config.d.ts.map +1 -0
  84. package/dist/types/config.js +81 -0
  85. package/dist/types/config.js.map +1 -0
  86. package/dist/types/index.d.ts +3 -0
  87. package/dist/types/index.d.ts.map +1 -0
  88. package/dist/types/index.js +3 -0
  89. package/dist/types/index.js.map +1 -0
  90. package/dist/types/protocol.d.ts +131 -0
  91. package/dist/types/protocol.d.ts.map +1 -0
  92. package/dist/types/protocol.js +2 -0
  93. package/dist/types/protocol.js.map +1 -0
  94. package/package.json +53 -0
@@ -0,0 +1,171 @@
1
+ import WebSocket from 'ws';
2
+ import { EventEmitter } from 'events';
3
+ /**
4
+ * WebSocket connection to Relay for sellers
5
+ */
6
+ export class RelayConnection extends EventEmitter {
7
+ ws = null;
8
+ url;
9
+ sellerId;
10
+ token;
11
+ reconnectAttempts = 0;
12
+ maxReconnectAttempts = 10;
13
+ reconnectDelay = 1000;
14
+ pingInterval = null;
15
+ isClosing = false;
16
+ constructor(url, sellerId, token) {
17
+ super();
18
+ this.url = url;
19
+ this.sellerId = sellerId;
20
+ this.token = token;
21
+ }
22
+ /**
23
+ * Connect to the Relay
24
+ */
25
+ connect() {
26
+ if (this.ws?.readyState === WebSocket.OPEN) {
27
+ return;
28
+ }
29
+ this.isClosing = false;
30
+ const wsUrl = `${this.url}/relay?seller_id=${this.sellerId}&token=${this.token}`;
31
+ this.ws = new WebSocket(wsUrl);
32
+ this.ws.on('open', () => {
33
+ this.reconnectAttempts = 0;
34
+ this.startPingInterval();
35
+ this.emit('connected');
36
+ });
37
+ this.ws.on('message', (data) => {
38
+ try {
39
+ const message = JSON.parse(data.toString());
40
+ this.handleMessage(message);
41
+ }
42
+ catch (err) {
43
+ this.emit('error', new Error(`Failed to parse message: ${err}`));
44
+ }
45
+ });
46
+ this.ws.on('close', (code, reason) => {
47
+ this.stopPingInterval();
48
+ this.emit('disconnected', code, reason.toString());
49
+ if (!this.isClosing && this.reconnectAttempts < this.maxReconnectAttempts) {
50
+ this.scheduleReconnect();
51
+ }
52
+ });
53
+ this.ws.on('error', (err) => {
54
+ this.emit('error', err);
55
+ });
56
+ }
57
+ /**
58
+ * Handle incoming messages
59
+ */
60
+ handleMessage(message) {
61
+ switch (message.type) {
62
+ case 'request':
63
+ this.emit('request', message);
64
+ break;
65
+ case 'ping':
66
+ this.sendPong(message.requestId);
67
+ break;
68
+ default:
69
+ // Ignore other message types
70
+ break;
71
+ }
72
+ }
73
+ /**
74
+ * Send response back through Relay
75
+ */
76
+ sendResponse(requestId, payload) {
77
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
78
+ throw new Error('Not connected to Relay');
79
+ }
80
+ const response = {
81
+ type: 'response',
82
+ requestId,
83
+ payload,
84
+ timestamp: Date.now(),
85
+ };
86
+ this.ws.send(JSON.stringify(response));
87
+ }
88
+ /**
89
+ * Send error response
90
+ */
91
+ sendError(requestId, error) {
92
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
93
+ return;
94
+ }
95
+ const response = {
96
+ type: 'error',
97
+ requestId,
98
+ error,
99
+ timestamp: Date.now(),
100
+ };
101
+ this.ws.send(JSON.stringify(response));
102
+ }
103
+ /**
104
+ * Send pong response
105
+ */
106
+ sendPong(requestId) {
107
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
108
+ return;
109
+ }
110
+ const pong = {
111
+ type: 'pong',
112
+ requestId,
113
+ timestamp: Date.now(),
114
+ };
115
+ this.ws.send(JSON.stringify(pong));
116
+ }
117
+ /**
118
+ * Start ping interval to keep connection alive
119
+ */
120
+ startPingInterval() {
121
+ this.pingInterval = setInterval(() => {
122
+ if (this.ws?.readyState === WebSocket.OPEN) {
123
+ const ping = {
124
+ type: 'ping',
125
+ requestId: `ping-${Date.now()}`,
126
+ timestamp: Date.now(),
127
+ };
128
+ this.ws.send(JSON.stringify(ping));
129
+ }
130
+ }, 30000);
131
+ }
132
+ /**
133
+ * Stop ping interval
134
+ */
135
+ stopPingInterval() {
136
+ if (this.pingInterval) {
137
+ clearInterval(this.pingInterval);
138
+ this.pingInterval = null;
139
+ }
140
+ }
141
+ /**
142
+ * Schedule reconnection attempt
143
+ */
144
+ scheduleReconnect() {
145
+ this.reconnectAttempts++;
146
+ const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
147
+ setTimeout(() => {
148
+ if (!this.isClosing) {
149
+ this.connect();
150
+ }
151
+ }, Math.min(delay, 30000));
152
+ }
153
+ /**
154
+ * Disconnect from Relay
155
+ */
156
+ disconnect() {
157
+ this.isClosing = true;
158
+ this.stopPingInterval();
159
+ if (this.ws) {
160
+ this.ws.close(1000, 'Client closing');
161
+ this.ws = null;
162
+ }
163
+ }
164
+ /**
165
+ * Check if connected
166
+ */
167
+ get isConnected() {
168
+ return this.ws?.readyState === WebSocket.OPEN;
169
+ }
170
+ }
171
+ //# sourceMappingURL=relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/seller/relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ClawMarket Seller CLI
4
+ *
5
+ * 一键启动卖家模式,把闲置 AI 额度卖出去赚钱
6
+ */
7
+ export interface SellerConfigData {
8
+ sourceType: string;
9
+ model: string;
10
+ apiBaseUrl: string;
11
+ apiKey: string;
12
+ pricing: {
13
+ inputPer1m: number;
14
+ outputPer1m: number;
15
+ };
16
+ dailyLimitUsd: number;
17
+ maxConcurrent: number;
18
+ region: string;
19
+ createdAt: string;
20
+ updatedAt: string;
21
+ }
22
+ /**
23
+ * 卖家 CLI 主入口
24
+ */
25
+ export declare function sellerMain(subcommand?: string): Promise<void>;
26
+ //# sourceMappingURL=seller-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-cli.d.ts","sourceRoot":"","sources":["../src/seller-cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAoCH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAkQD;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,iBAqEnD"}
@@ -0,0 +1,354 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ClawMarket Seller CLI
4
+ *
5
+ * 一键启动卖家模式,把闲置 AI 额度卖出去赚钱
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ import * as readline from 'readline';
11
+ import { spawn } from 'child_process';
12
+ import { DEFAULT_CONFIG } from './config.js';
13
+ const CLAWMARKET_DIR = path.join(os.homedir(), '.clawmarket');
14
+ const SELLER_CONFIG_PATH = path.join(CLAWMARKET_DIR, 'seller.json');
15
+ const SELLER_PID_PATH = path.join(CLAWMARKET_DIR, 'seller.pid');
16
+ const SELLER_STATS_PATH = path.join(CLAWMARKET_DIR, 'seller-stats.json');
17
+ // 默认市场价格
18
+ const DEFAULT_PRICES = {
19
+ 'claude-opus-4-5': { input: 1, output: 5 },
20
+ 'claude-sonnet-4': { input: 0.5, output: 2.5 },
21
+ 'gpt-4o': { input: 0.5, output: 2 },
22
+ 'gpt-4o-mini': { input: 0.05, output: 0.2 },
23
+ };
24
+ // 每日上限档位
25
+ const DAILY_LIMITS = [
26
+ { name: '轻度 / Light', usd: 5, desc: '适合偶尔用 AI 的人 / For casual users' },
27
+ { name: '中度 / Medium', usd: 20, desc: '适合中度使用者 / For moderate users' },
28
+ { name: '重度 / Heavy', usd: 50, desc: '适合有多个订阅的人 / For power users' },
29
+ ];
30
+ // 模型来源
31
+ const SOURCE_TYPES = [
32
+ { name: 'Claude Pro/Max (包月 / Subscription)', key: 'claude-sub', defaultModel: 'claude-opus-4-5' },
33
+ { name: 'OpenAI Plus/Pro (包月 / Subscription)', key: 'openai-sub', defaultModel: 'gpt-4o' },
34
+ { name: 'API Key (中转站 / Relay)', key: 'api-key', defaultModel: 'claude-opus-4-5' },
35
+ ];
36
+ function rl() {
37
+ return readline.createInterface({ input: process.stdin, output: process.stdout });
38
+ }
39
+ function ask(r, question) {
40
+ return new Promise(resolve => r.question(question, resolve));
41
+ }
42
+ function loadSellerConfig() {
43
+ if (fs.existsSync(SELLER_CONFIG_PATH)) {
44
+ return JSON.parse(fs.readFileSync(SELLER_CONFIG_PATH, 'utf-8'));
45
+ }
46
+ return null;
47
+ }
48
+ function saveSellerConfig(config) {
49
+ if (!fs.existsSync(CLAWMARKET_DIR))
50
+ fs.mkdirSync(CLAWMARKET_DIR, { recursive: true });
51
+ fs.writeFileSync(SELLER_CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
52
+ }
53
+ function isSellerRunning() {
54
+ if (!fs.existsSync(SELLER_PID_PATH))
55
+ return false;
56
+ const pid = parseInt(fs.readFileSync(SELLER_PID_PATH, 'utf-8').trim());
57
+ try {
58
+ process.kill(pid, 0);
59
+ return true;
60
+ }
61
+ catch {
62
+ fs.unlinkSync(SELLER_PID_PATH);
63
+ return false;
64
+ }
65
+ }
66
+ /**
67
+ * 交互式配置卖家
68
+ */
69
+ async function setupSeller() {
70
+ const r = rl();
71
+ console.log('');
72
+ console.log('🛒 卖家配置 / Seller Setup');
73
+ console.log('─'.repeat(50));
74
+ // 选模型来源
75
+ console.log('');
76
+ console.log('选择你的 AI 来源 / Choose your AI source:');
77
+ SOURCE_TYPES.forEach((s, i) => console.log(` ${i + 1}. ${s.name}`));
78
+ const sourceIdx = parseInt(await ask(r, '\n选择 (1-3): ')) - 1;
79
+ const source = SOURCE_TYPES[Math.max(0, Math.min(sourceIdx, 2))];
80
+ // API 地址
81
+ console.log('');
82
+ const defaultUrl = source.key === 'openai-sub'
83
+ ? 'https://api.openai.com'
84
+ : 'https://api.anthropic.com';
85
+ const apiBaseUrl = (await ask(r, `API 地址 (默认 ${defaultUrl}): `)).trim() || defaultUrl;
86
+ // API Key
87
+ const apiKey = (await ask(r, 'API Key: ')).trim();
88
+ if (!apiKey) {
89
+ console.log('❌ API Key 不能为空');
90
+ r.close();
91
+ process.exit(1);
92
+ }
93
+ // 模型
94
+ const defaultModel = source.defaultModel;
95
+ const model = (await ask(r, `模型名称 (默认 ${defaultModel}): `)).trim() || defaultModel;
96
+ // 定价
97
+ const defaultPrice = DEFAULT_PRICES[model] || { input: 1, output: 5 };
98
+ console.log('');
99
+ console.log(`当前市场推荐价 / Market price: $${defaultPrice.input}/M 输入, $${defaultPrice.output}/M 输出`);
100
+ const useDefault = (await ask(r, '使用推荐价格?(Y/n): ')).trim().toLowerCase();
101
+ let pricing = { inputPer1m: defaultPrice.input, outputPer1m: defaultPrice.output };
102
+ if (useDefault === 'n') {
103
+ const inp = parseFloat(await ask(r, `输入价格 $/M (默认 ${defaultPrice.input}): `)) || defaultPrice.input;
104
+ const out = parseFloat(await ask(r, `输出价格 $/M (默认 ${defaultPrice.output}): `)) || defaultPrice.output;
105
+ pricing = { inputPer1m: inp, outputPer1m: out };
106
+ }
107
+ // 并发限制
108
+ console.log('');
109
+ console.log('并发限制 / Concurrency limit:');
110
+ console.log(' 同时处理的最大请求数,超过的会被拒绝(让买家找别的卖家)');
111
+ console.log(' Max simultaneous requests. Excess requests will be rejected.');
112
+ const maxConcurrentStr = await ask(r, '最大并发数 (默认 3): ');
113
+ const maxConcurrent = parseInt(maxConcurrentStr) || 3;
114
+ // 每日上限
115
+ console.log('');
116
+ console.log('每日成本上限 / Daily cost limit:');
117
+ console.log(' ⚠️ 这是你愿意花费的 API 成本上限,不是收入!');
118
+ console.log(' ⚠️ This is YOUR cost limit, not revenue!');
119
+ console.log('');
120
+ DAILY_LIMITS.forEach((l, i) => console.log(` ${i + 1}. ${l.name} — $${l.usd}/天 (${l.desc})`));
121
+ const limitIdx = parseInt(await ask(r, '\n选择 (1-3): ')) - 1;
122
+ const dailyLimitUsd = DAILY_LIMITS[Math.max(0, Math.min(limitIdx, 2))].usd;
123
+ r.close();
124
+ const config = {
125
+ sourceType: source.key,
126
+ model,
127
+ apiBaseUrl,
128
+ apiKey,
129
+ pricing,
130
+ dailyLimitUsd,
131
+ maxConcurrent,
132
+ region: 'auto',
133
+ createdAt: new Date().toISOString(),
134
+ updatedAt: new Date().toISOString(),
135
+ };
136
+ saveSellerConfig(config);
137
+ return config;
138
+ }
139
+ /**
140
+ * 注册到 Registry
141
+ */
142
+ async function registerSeller(config) {
143
+ const crypto = await import('crypto');
144
+ const publicKey = crypto.randomBytes(32).toString('hex');
145
+ const payload = {
146
+ public_key: publicKey,
147
+ endpoint: DEFAULT_CONFIG.relayWs,
148
+ models: [{
149
+ model: config.model,
150
+ input_per_1m: config.pricing.inputPer1m,
151
+ output_per_1m: config.pricing.outputPer1m,
152
+ daily_quota_usd: config.dailyLimitUsd,
153
+ }],
154
+ region: config.region,
155
+ };
156
+ const res = await fetch(`${DEFAULT_CONFIG.registryUrl}/v1/sellers/register`, {
157
+ method: 'POST',
158
+ headers: { 'Content-Type': 'application/json' },
159
+ body: JSON.stringify(payload),
160
+ });
161
+ if (!res.ok)
162
+ throw new Error(`注册失败: ${res.status} ${await res.text()}`);
163
+ const data = await res.json();
164
+ return data.id;
165
+ }
166
+ /**
167
+ * 启动卖家节点(后台)
168
+ */
169
+ function startSellerDaemon() {
170
+ if (isSellerRunning()) {
171
+ console.log('[卖家] 已在运行中');
172
+ return true;
173
+ }
174
+ const sellerScript = path.join(path.dirname(new URL(import.meta.url).pathname), 'seller-daemon.js');
175
+ const child = spawn('node', [sellerScript], {
176
+ detached: true,
177
+ stdio: 'ignore',
178
+ cwd: CLAWMARKET_DIR,
179
+ });
180
+ child.unref();
181
+ if (child.pid) {
182
+ fs.writeFileSync(SELLER_PID_PATH, child.pid.toString());
183
+ return true;
184
+ }
185
+ return false;
186
+ }
187
+ /**
188
+ * 停止卖家
189
+ */
190
+ function stopSeller() {
191
+ if (!fs.existsSync(SELLER_PID_PATH)) {
192
+ console.log('[卖家] 未在运行');
193
+ return true;
194
+ }
195
+ const pid = parseInt(fs.readFileSync(SELLER_PID_PATH, 'utf-8').trim());
196
+ try {
197
+ process.kill(pid, 'SIGTERM');
198
+ fs.unlinkSync(SELLER_PID_PATH);
199
+ return true;
200
+ }
201
+ catch {
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * 查看卖家状态
207
+ */
208
+ function showSellerStatus() {
209
+ const config = loadSellerConfig();
210
+ const running = isSellerRunning();
211
+ console.log('');
212
+ console.log('🛒 卖家状态 / Seller Status');
213
+ console.log('─'.repeat(50));
214
+ if (!config) {
215
+ console.log('未配置。运行 clawmarket sell 开始。');
216
+ console.log('Not configured. Run clawmarket sell to start.');
217
+ return;
218
+ }
219
+ console.log(`模型: ${config.model}`);
220
+ console.log(`来源: ${config.sourceType}`);
221
+ console.log(`API: ${config.apiBaseUrl}`);
222
+ console.log(`定价: $${config.pricing.inputPer1m}/M 输入, $${config.pricing.outputPer1m}/M 输出`);
223
+ console.log(`并发上限: ${config.maxConcurrent || 3}`);
224
+ console.log(`每日上限: $${config.dailyLimitUsd}`);
225
+ console.log(`状态: ${running ? '✅ 运行中 / Running' : '❌ 未运行 / Stopped'}`);
226
+ // 读取今日统计
227
+ if (fs.existsSync(SELLER_STATS_PATH)) {
228
+ try {
229
+ const stats = JSON.parse(fs.readFileSync(SELLER_STATS_PATH, 'utf-8'));
230
+ const today = new Date().toISOString().slice(0, 10);
231
+ if (stats.date === today) {
232
+ console.log(`今日接单: ${stats.requests || 0} 次`);
233
+ console.log(`今日收入: $${(stats.earned || 0).toFixed(4)}`);
234
+ console.log(`今日已售: $${(stats.sold || 0).toFixed(4)} / $${config.dailyLimitUsd}`);
235
+ }
236
+ }
237
+ catch { }
238
+ }
239
+ console.log('─'.repeat(50));
240
+ console.log('');
241
+ }
242
+ /**
243
+ * 修改价格
244
+ */
245
+ async function updatePrice() {
246
+ const config = loadSellerConfig();
247
+ if (!config) {
248
+ console.log('未配置。运行 clawmarket sell 开始。');
249
+ return;
250
+ }
251
+ const args = process.argv.slice(2);
252
+ let inputPrice;
253
+ let outputPrice;
254
+ // 解析 --input 和 --output 参数
255
+ for (let i = 0; i < args.length; i++) {
256
+ if (args[i] === '--input' && args[i + 1])
257
+ inputPrice = parseFloat(args[i + 1]);
258
+ if (args[i] === '--output' && args[i + 1])
259
+ outputPrice = parseFloat(args[i + 1]);
260
+ }
261
+ if (inputPrice === undefined && outputPrice === undefined) {
262
+ // 交互模式
263
+ const r = rl();
264
+ console.log('');
265
+ console.log(`当前价格: $${config.pricing.inputPer1m}/M 输入, $${config.pricing.outputPer1m}/M 输出`);
266
+ inputPrice = parseFloat(await ask(r, `新输入价格 $/M (回车保持 ${config.pricing.inputPer1m}): `)) || config.pricing.inputPer1m;
267
+ outputPrice = parseFloat(await ask(r, `新输出价格 $/M (回车保持 ${config.pricing.outputPer1m}): `)) || config.pricing.outputPer1m;
268
+ r.close();
269
+ }
270
+ config.pricing.inputPer1m = inputPrice || config.pricing.inputPer1m;
271
+ config.pricing.outputPer1m = outputPrice || config.pricing.outputPer1m;
272
+ config.updatedAt = new Date().toISOString();
273
+ saveSellerConfig(config);
274
+ // 重新注册到 Registry 更新价格
275
+ try {
276
+ await registerSeller(config);
277
+ console.log(`✅ 价格已更新: $${config.pricing.inputPer1m}/M 输入, $${config.pricing.outputPer1m}/M 输出`);
278
+ }
279
+ catch (e) {
280
+ console.log(`⚠️ 本地已更新,但 Registry 同步失败: ${e.message}`);
281
+ console.log(' 下次启动时会自动同步。');
282
+ }
283
+ }
284
+ /**
285
+ * 卖家 CLI 主入口
286
+ */
287
+ export async function sellerMain(subcommand) {
288
+ console.log('');
289
+ console.log('╔═══════════════════════════════════════════════════════════╗');
290
+ console.log('║ ClawMarket Seller — 卖闲置额度,赚 USDC ║');
291
+ console.log('╚═══════════════════════════════════════════════════════════╝');
292
+ if (subcommand === 'status') {
293
+ showSellerStatus();
294
+ return;
295
+ }
296
+ if (subcommand === 'stop') {
297
+ if (stopSeller())
298
+ console.log('[卖家] ✅ 已停止');
299
+ else
300
+ console.log('[卖家] ❌ 停止失败');
301
+ return;
302
+ }
303
+ if (subcommand === 'price') {
304
+ await updatePrice();
305
+ return;
306
+ }
307
+ // 默认:配置 + 启动
308
+ let config = loadSellerConfig();
309
+ if (!config) {
310
+ // 首次,交互式配置
311
+ config = await setupSeller();
312
+ console.log('');
313
+ console.log('[配置] ✅ 已保存到 ~/.clawmarket/seller.json');
314
+ }
315
+ else {
316
+ console.log('');
317
+ console.log(`[配置] 已有配置: ${config.model} @ $${config.pricing.inputPer1m}/$${config.pricing.outputPer1m}`);
318
+ console.log('[配置] 如需修改,运行 clawmarket sell price');
319
+ }
320
+ // 注册到 Registry
321
+ console.log('[注册] 连接 Registry...');
322
+ try {
323
+ const sellerId = await registerSeller(config);
324
+ console.log(`[注册] ✅ 卖家 ID: ${sellerId}`);
325
+ }
326
+ catch (e) {
327
+ console.log(`[注册] ⚠️ ${e.message}`);
328
+ console.log('[注册] 将在后台重试...');
329
+ }
330
+ // 启动后台卖家进程
331
+ console.log('[启动] 启动卖家节点...');
332
+ if (startSellerDaemon()) {
333
+ console.log('[启动] ✅ 已在后台运行');
334
+ }
335
+ else {
336
+ console.log('[启动] ❌ 启动失败');
337
+ return;
338
+ }
339
+ console.log('');
340
+ console.log('═══════════════════════════════════════════════════════════');
341
+ console.log('');
342
+ console.log(' ✅ 卖家已上线!等待买家请求...');
343
+ console.log('');
344
+ console.log(' 常用命令:');
345
+ console.log(' clawmarket sell status — 查看状态和收入');
346
+ console.log(' clawmarket sell price — 修改价格');
347
+ console.log(' clawmarket sell stop — 停止卖家');
348
+ console.log('');
349
+ console.log(' Dashboard: http://192.210.193.110:9082/');
350
+ console.log('');
351
+ console.log('═══════════════════════════════════════════════════════════');
352
+ console.log('');
353
+ }
354
+ //# sourceMappingURL=seller-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-cli.js","sourceRoot":"","sources":["../src/seller-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ClawMarket Seller Daemon
4
+ * 读取 ~/.clawmarket/seller.json 配置,启动卖家节点
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=seller-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-daemon.d.ts","sourceRoot":"","sources":["../src/seller-daemon.ts"],"names":[],"mappings":";AACA;;;GAGG"}