@clawmarket.cc/marketcc 0.5.3 → 0.5.5

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.
@@ -1,7 +1,7 @@
1
1
  import { createInterface } from 'readline/promises';
2
2
  import { stdin, stdout } from 'process';
3
3
  import { ApiClient } from '../lib/api.js';
4
- import { loadConfig, saveConfig, getApiUrl } from '../lib/config.js';
4
+ import { loadConfig, saveConfig, getApiUrl, clearConfig } from '../lib/config.js';
5
5
  import { handleApiError } from '../lib/errors.js';
6
6
  export default function registerLogin(program) {
7
7
  program
@@ -10,6 +10,22 @@ export default function registerLogin(program) {
10
10
  .action(async (apiKeyArg) => {
11
11
  const rl = createInterface({ input: stdin, output: stdout });
12
12
  try {
13
+ const config = await loadConfig();
14
+ const existingApiKey = (config.api_key ?? '').trim();
15
+ if (existingApiKey) {
16
+ const answer = (await rl.question('You are already logged in. To use a different account, log out now? (y/N): '))
17
+ .trim()
18
+ .toLowerCase();
19
+ rl.close();
20
+ if (answer !== 'y') {
21
+ console.log('Skipped. You are still logged in.');
22
+ return;
23
+ }
24
+ await clearConfig();
25
+ console.log('Successfully logged out.');
26
+ console.log('Run `marketcc login` again to log in with a different account.');
27
+ return;
28
+ }
13
29
  const provided = (apiKeyArg ?? '').trim();
14
30
  const apiKey = provided || (await rl.question('API key: ')).trim();
15
31
  rl.close();
@@ -17,7 +33,6 @@ export default function registerLogin(program) {
17
33
  console.error('Error: API key is required.');
18
34
  process.exit(1);
19
35
  }
20
- const config = await loadConfig();
21
36
  const apiUrl = getApiUrl(config);
22
37
  const client = new ApiClient(apiUrl, apiKey);
23
38
  const profile = await client.request('GET', '/api/profiles/me');
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnE,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAGjC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAE9B,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAEvD,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAErD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC/B,6EAA6E,CAC9E,CAAC;qBACC,IAAI,EAAE;qBACN,WAAW,EAAE,CAAC;gBACjB,EAAE,CAAC,KAAK,EAAE,CAAC;gBAEX,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;oBACjD,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnE,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAGjC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAE9B,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAEvD,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -11,7 +11,7 @@ export default function registerLs(program) {
11
11
  const data = await client.request('GET', '/api/profiles/me/listings');
12
12
  const listings = Array.isArray(data) ? data : data.items;
13
13
  if (listings.length === 0) {
14
- console.log('No listings found. Use `marketcc upload <file>` to create one.');
14
+ console.log("You haven't listed anything yet. Use `marketcc upload <file>` to create your first listing.");
15
15
  return;
16
16
  }
17
17
  const headers = ['ID', 'Title', 'Price (SOL)', 'Status', 'Created'];
@@ -1 +1 @@
1
- {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiB9C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,KAAK,EACL,2BAA2B,CAC5B,CAAC;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK;gBACP,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnB,CAAC,CAAC,MAAM;gBACR,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;aAC5C,CAAC,CAAC;YAEH,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiB9C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,KAAK,EACL,2BAA2B,CAC5B,CAAC;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;gBAC3G,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK;gBACP,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnB,CAAC,CAAC,MAAM;gBACR,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;aAC5C,CAAC,CAAC;YAEH,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export default function registerSetupKeys(program: Command): void;
@@ -0,0 +1,373 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { unlink } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { exec } from 'node:child_process';
6
+ import { promisify } from 'node:util';
7
+ import { randomBytes } from 'node:crypto';
8
+ import prompts from 'prompts';
9
+ import ora from 'ora';
10
+ import chalk from 'chalk';
11
+ const execAsync = promisify(exec);
12
+ const DEFAULT_BOT_PATH = join(homedir(), '.openclaw');
13
+ const VALIDATORS = {
14
+ 'moonshot': (v) => /^sk-[A-Za-z0-9_-]{20,}$/.test(v),
15
+ 'openai': (v) => /^sk-[A-Za-z0-9_-]{20,}$/.test(v),
16
+ 'anthropic': (v) => /^sk-ant-[A-Za-z0-9_-]{20,}$/.test(v),
17
+ 'xai': (v) => /^xai-[A-Za-z0-9_-]{20,}$/.test(v),
18
+ 'google': (v) => /^AIza[A-Za-z0-9_-]{35}$/.test(v),
19
+ 'brave': (v) => /^BSA[A-Za-z0-9]{20,}$/.test(v),
20
+ 'telegram': (v) => /^[0-9]{8,10}:[A-Za-z0-9_-]{35}$/.test(v),
21
+ 'stripe': (v) => /^sk_live_[A-Za-z0-9]{24,}$/.test(v),
22
+ };
23
+ function setNestedValue(obj, path, value) {
24
+ const parts = path.split('.');
25
+ let current = obj;
26
+ for (let i = 0; i < parts.length - 1; i++) {
27
+ const next = current[parts[i]];
28
+ if (typeof next !== 'object' || next === null)
29
+ return;
30
+ current = next;
31
+ }
32
+ current[parts[parts.length - 1]] = value;
33
+ }
34
+ function replaceKeyInFiles(botPath, placeholder, value, locations) {
35
+ let replaced = 0;
36
+ for (const location of locations) {
37
+ const filePath = join(botPath, location.file);
38
+ if (!existsSync(filePath))
39
+ continue;
40
+ if (filePath.endsWith('.json') && location.json_path) {
41
+ try {
42
+ const raw = readFileSync(filePath, 'utf-8');
43
+ const data = JSON.parse(raw);
44
+ setNestedValue(data, location.json_path, value);
45
+ writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n');
46
+ replaced++;
47
+ }
48
+ catch {
49
+ // Fallback to string replacement
50
+ let content = readFileSync(filePath, 'utf-8');
51
+ if (content.includes(placeholder)) {
52
+ content = content.replaceAll(placeholder, value);
53
+ writeFileSync(filePath, content);
54
+ replaced++;
55
+ }
56
+ }
57
+ }
58
+ else {
59
+ let content = readFileSync(filePath, 'utf-8');
60
+ if (content.includes(placeholder)) {
61
+ content = content.replaceAll(placeholder, value);
62
+ writeFileSync(filePath, content);
63
+ replaced++;
64
+ }
65
+ }
66
+ }
67
+ return replaced;
68
+ }
69
+ export default function registerSetupKeys(program) {
70
+ program
71
+ .command('setup-keys [path]')
72
+ .description('Configure API keys for a downloaded bot')
73
+ .action(async (botPath) => {
74
+ const targetPath = botPath || DEFAULT_BOT_PATH;
75
+ try {
76
+ console.log('');
77
+ console.log(chalk.cyan('Setting up API keys...'));
78
+ console.log('');
79
+ const manifestPath = join(targetPath, 'KEYS_REQUIRED.json');
80
+ const setupMdPath = join(targetPath, 'SETUP.md');
81
+ if (!existsSync(manifestPath)) {
82
+ console.log(chalk.green('+ No keys to configure. Bot is ready!'));
83
+ console.log('');
84
+ return;
85
+ }
86
+ // Hint about manual setup guide
87
+ if (existsSync(setupMdPath)) {
88
+ console.log(chalk.dim('Tip: See SETUP.md for manual setup instructions.'));
89
+ console.log('');
90
+ }
91
+ let manifest;
92
+ try {
93
+ manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
94
+ }
95
+ catch {
96
+ console.error(chalk.red('Error: Could not parse KEYS_REQUIRED.json'));
97
+ process.exit(1);
98
+ }
99
+ if (!manifest.keys || manifest.keys.length === 0) {
100
+ console.log(chalk.green('+ No keys to configure. Bot is ready!'));
101
+ await unlink(manifestPath);
102
+ console.log('');
103
+ return;
104
+ }
105
+ const providers = new Set(manifest.keys.map(k => k.provider.name));
106
+ console.log(chalk.dim(`Found ${manifest.keys.length} key${manifest.keys.length === 1 ? '' : 's'} to configure across ${providers.size} provider${providers.size === 1 ? '' : 's'}.`));
107
+ console.log('');
108
+ // Group keys by category
109
+ const llmKeys = manifest.keys.filter(k => k.type === 'API_KEY' || k.type === 'ENV_VAR');
110
+ const oauthKeys = manifest.keys.filter(k => k.type === 'OAUTH_ACCESS_TOKEN' || k.type === 'OAUTH_REFRESH_TOKEN');
111
+ const serviceKeys = manifest.keys.filter(k => k.type === 'BOT_TOKEN' || k.type === 'AUTH_TOKEN');
112
+ let keyIndex = 0;
113
+ const total = manifest.keys.length;
114
+ const reauthedProviders = new Set();
115
+ // ── LLM Provider Keys ──
116
+ if (llmKeys.length > 0) {
117
+ console.log(chalk.bold('--- LLM Provider Keys ---'));
118
+ console.log('');
119
+ for (const key of llmKeys) {
120
+ keyIndex++;
121
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${key.provider.name.toUpperCase()} -- ${key.type === 'ENV_VAR' ? 'Environment Variable' : 'API Key'}`));
122
+ if (key.provider.baseUrl) {
123
+ console.log(chalk.dim(` Provider: ${key.provider.name} (${key.provider.baseUrl})`));
124
+ }
125
+ else {
126
+ console.log(chalk.dim(` Provider: ${key.provider.name}`));
127
+ }
128
+ if (key.models.length > 0) {
129
+ console.log(chalk.dim(` Models: ${key.models.map(m => m.id).join(', ')}`));
130
+ }
131
+ const files = key.found_in.map(f => f.file).join(', ');
132
+ console.log(chalk.dim(` Used in: ${files}`));
133
+ if (key.description) {
134
+ const hintMatch = key.description.match(/starts with ([^ )]+)/);
135
+ if (hintMatch) {
136
+ console.log(chalk.dim(` Hint: Starts with ${hintMatch[1]}`));
137
+ }
138
+ }
139
+ const response = await prompts({
140
+ type: 'text',
141
+ name: 'value',
142
+ message: 'Enter value',
143
+ });
144
+ if (!response.value) {
145
+ console.log(chalk.yellow(' ! Skipped'));
146
+ console.log('');
147
+ continue;
148
+ }
149
+ // Validate format
150
+ const validator = VALIDATORS[key.provider.name];
151
+ if (validator && !validator(response.value)) {
152
+ const confirmResp = await prompts({
153
+ type: 'confirm',
154
+ name: 'useAnyway',
155
+ message: `Value doesn't match expected format for ${key.provider.name}. Use anyway?`,
156
+ initial: true,
157
+ });
158
+ if (!confirmResp.useAnyway) {
159
+ console.log(chalk.yellow(' ! Skipped'));
160
+ console.log('');
161
+ continue;
162
+ }
163
+ }
164
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
165
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
166
+ console.log('');
167
+ }
168
+ }
169
+ // ── OAuth Tokens ──
170
+ if (oauthKeys.length > 0) {
171
+ console.log(chalk.bold('--- OAuth Tokens ---'));
172
+ console.log('');
173
+ const byProvider = new Map();
174
+ for (const key of oauthKeys) {
175
+ const existing = byProvider.get(key.provider.name) || [];
176
+ existing.push(key);
177
+ byProvider.set(key.provider.name, existing);
178
+ }
179
+ for (const [provider, providerKeys] of byProvider) {
180
+ const accessKey = providerKeys.find(k => k.type === 'OAUTH_ACCESS_TOKEN');
181
+ const refreshKey = providerKeys.find(k => k.type === 'OAUTH_REFRESH_TOKEN');
182
+ if (accessKey) {
183
+ keyIndex++;
184
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Access Token`));
185
+ console.log(chalk.dim(` Provider: ${provider}`));
186
+ if (accessKey.models.length > 0) {
187
+ console.log(chalk.dim(` Models: ${accessKey.models.map(m => m.id).join(', ')}`));
188
+ }
189
+ console.log(chalk.yellow(` ! OAuth tokens expire. Recommended: run 'openclaw auth login ${provider}' instead.`));
190
+ const authResponse = await prompts({
191
+ type: 'confirm',
192
+ name: 'reauth',
193
+ message: 'Re-authenticate now?',
194
+ initial: true,
195
+ });
196
+ if (authResponse.reauth) {
197
+ const spinnerAuth = ora(`Running: openclaw auth login ${provider}...`).start();
198
+ try {
199
+ await execAsync(`openclaw auth login ${provider}`);
200
+ spinnerAuth.succeed('Authenticated successfully');
201
+ reauthedProviders.add(provider);
202
+ }
203
+ catch {
204
+ spinnerAuth.fail('Authentication failed');
205
+ console.log(chalk.dim(' You can try manually later with:'));
206
+ console.log(chalk.dim(` openclaw auth login ${provider}`));
207
+ }
208
+ }
209
+ else {
210
+ const response = await prompts({
211
+ type: 'text',
212
+ name: 'value',
213
+ message: 'Enter access token (or leave empty to skip)',
214
+ });
215
+ if (response.value) {
216
+ const replaced = replaceKeyInFiles(targetPath, accessKey.placeholder, response.value, accessKey.found_in);
217
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
218
+ }
219
+ else {
220
+ console.log(chalk.yellow(' ! Skipped'));
221
+ }
222
+ }
223
+ console.log('');
224
+ }
225
+ if (refreshKey) {
226
+ keyIndex++;
227
+ if (reauthedProviders.has(provider)) {
228
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Refresh Token`));
229
+ console.log(chalk.green(' + Handled by re-authentication above'));
230
+ }
231
+ else {
232
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Refresh Token`));
233
+ const response = await prompts({
234
+ type: 'text',
235
+ name: 'value',
236
+ message: 'Enter refresh token (or leave empty to skip)',
237
+ });
238
+ if (response.value) {
239
+ const replaced = replaceKeyInFiles(targetPath, refreshKey.placeholder, response.value, refreshKey.found_in);
240
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
241
+ }
242
+ else {
243
+ console.log(chalk.yellow(' ! Skipped'));
244
+ }
245
+ }
246
+ console.log('');
247
+ }
248
+ }
249
+ }
250
+ // ── Service Keys ──
251
+ if (serviceKeys.length > 0) {
252
+ console.log(chalk.bold('--- Service Keys ---'));
253
+ console.log('');
254
+ for (const key of serviceKeys) {
255
+ keyIndex++;
256
+ const typeLabel = key.type === 'BOT_TOKEN' ? 'Bot Token' : 'Auth Token';
257
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${key.provider.name.toUpperCase()} -- ${typeLabel}`));
258
+ if (key.provider.service) {
259
+ console.log(chalk.dim(` Service: ${key.provider.service}`));
260
+ }
261
+ const files = key.found_in.map(f => f.file).join(', ');
262
+ console.log(chalk.dim(` Used in: ${files}`));
263
+ // Gateway token: offer auto-generation
264
+ if (key.type === 'AUTH_TOKEN' && key.provider.name === 'openclaw-gateway') {
265
+ console.log(chalk.yellow(' ! Auto-generated on setup. Generate new token?'));
266
+ const genResponse = await prompts({
267
+ type: 'confirm',
268
+ name: 'generate',
269
+ message: 'Generate new token?',
270
+ initial: true,
271
+ });
272
+ if (genResponse.generate) {
273
+ const newToken = randomBytes(32).toString('hex');
274
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, newToken, key.found_in);
275
+ console.log(chalk.green(` + Generated new gateway token (replaced in ${replaced} file${replaced === 1 ? '' : 's'})`));
276
+ }
277
+ else {
278
+ const response = await prompts({
279
+ type: 'text',
280
+ name: 'value',
281
+ message: 'Enter token value',
282
+ });
283
+ if (response.value) {
284
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
285
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
286
+ }
287
+ else {
288
+ console.log(chalk.yellow(' ! Skipped'));
289
+ }
290
+ }
291
+ }
292
+ else {
293
+ const response = await prompts({
294
+ type: 'text',
295
+ name: 'value',
296
+ message: 'Enter value',
297
+ });
298
+ if (!response.value) {
299
+ console.log(chalk.yellow(' ! Skipped'));
300
+ console.log('');
301
+ continue;
302
+ }
303
+ // Validate format
304
+ const validator = VALIDATORS[key.provider.name];
305
+ if (validator && !validator(response.value)) {
306
+ const confirmResp = await prompts({
307
+ type: 'confirm',
308
+ name: 'useAnyway',
309
+ message: `Value doesn't match expected format for ${key.provider.name}. Use anyway?`,
310
+ initial: true,
311
+ });
312
+ if (!confirmResp.useAnyway) {
313
+ console.log(chalk.yellow(' ! Skipped'));
314
+ console.log('');
315
+ continue;
316
+ }
317
+ }
318
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
319
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
320
+ }
321
+ console.log('');
322
+ }
323
+ }
324
+ // Remove manifest files
325
+ console.log(chalk.cyan('Cleaning up manifest files...'));
326
+ await unlink(manifestPath);
327
+ if (existsSync(setupMdPath)) {
328
+ await unlink(setupMdPath);
329
+ }
330
+ console.log('');
331
+ // Restart gateway
332
+ const spinnerRestart = ora('Restarting gateway...').start();
333
+ try {
334
+ await execAsync('systemctl restart openclaw-gateway');
335
+ spinnerRestart.succeed('Gateway restarted');
336
+ }
337
+ catch {
338
+ try {
339
+ await execAsync('pm2 restart openclaw-gateway');
340
+ spinnerRestart.succeed('Gateway restarted');
341
+ }
342
+ catch {
343
+ spinnerRestart.warn('Could not restart gateway automatically. Please restart manually.');
344
+ }
345
+ }
346
+ console.log('');
347
+ console.log(chalk.green('All API keys configured!'));
348
+ if (manifest.model_context) {
349
+ const mc = manifest.model_context;
350
+ console.log('');
351
+ if (mc.primary_model) {
352
+ console.log(chalk.dim(` Primary: ${mc.primary_model}`));
353
+ }
354
+ if (mc.fallback_models.length > 0) {
355
+ const shown = mc.fallback_models.slice(0, 3).join(', ');
356
+ const extra = mc.fallback_models.length > 3 ? `, +${mc.fallback_models.length - 3} more` : '';
357
+ console.log(chalk.dim(` Fallbacks: ${shown}${extra}`));
358
+ }
359
+ }
360
+ console.log('');
361
+ }
362
+ catch (err) {
363
+ if (err instanceof Error) {
364
+ console.error(chalk.red(`\nError: ${err.message}`));
365
+ }
366
+ else {
367
+ console.error(chalk.red('\nAn unexpected error occurred.'));
368
+ }
369
+ process.exit(1);
370
+ }
371
+ });
372
+ }
373
+ //# sourceMappingURL=setup-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-keys.js","sourceRoot":"","sources":["../../src/commands/setup-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export default function registerUpdate(program: Command): void;
@@ -0,0 +1,148 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ const FALLBACK_PACKAGE_NAME = '@clawmarket.cc/marketcc';
6
+ function parseSemver(version) {
7
+ const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-.]+))?(?:\+.*)?$/.exec(version.trim());
8
+ if (!match) {
9
+ return null;
10
+ }
11
+ const prerelease = match[4]
12
+ ? match[4]
13
+ .split('.')
14
+ .filter(Boolean)
15
+ .map((id) => (/^\d+$/.test(id) ? Number(id) : id))
16
+ : [];
17
+ return {
18
+ major: Number(match[1]),
19
+ minor: Number(match[2]),
20
+ patch: Number(match[3]),
21
+ prerelease,
22
+ };
23
+ }
24
+ function compareSemver(a, b) {
25
+ const aParsed = parseSemver(a);
26
+ const bParsed = parseSemver(b);
27
+ if (!aParsed || !bParsed) {
28
+ return a.localeCompare(b);
29
+ }
30
+ if (aParsed.major !== bParsed.major) {
31
+ return aParsed.major - bParsed.major;
32
+ }
33
+ if (aParsed.minor !== bParsed.minor) {
34
+ return aParsed.minor - bParsed.minor;
35
+ }
36
+ if (aParsed.patch !== bParsed.patch) {
37
+ return aParsed.patch - bParsed.patch;
38
+ }
39
+ const aPre = aParsed.prerelease;
40
+ const bPre = bParsed.prerelease;
41
+ if (aPre.length === 0 && bPre.length === 0) {
42
+ return 0;
43
+ }
44
+ if (aPre.length === 0) {
45
+ return 1;
46
+ }
47
+ if (bPre.length === 0) {
48
+ return -1;
49
+ }
50
+ const length = Math.max(aPre.length, bPre.length);
51
+ for (let i = 0; i < length; i += 1) {
52
+ const left = aPre[i];
53
+ const right = bPre[i];
54
+ if (left === undefined) {
55
+ return -1;
56
+ }
57
+ if (right === undefined) {
58
+ return 1;
59
+ }
60
+ if (left === right) {
61
+ continue;
62
+ }
63
+ const leftNum = typeof left === 'number';
64
+ const rightNum = typeof right === 'number';
65
+ if (leftNum && rightNum) {
66
+ return Number(left) - Number(right);
67
+ }
68
+ if (leftNum) {
69
+ return -1;
70
+ }
71
+ if (rightNum) {
72
+ return 1;
73
+ }
74
+ return String(left).localeCompare(String(right));
75
+ }
76
+ return 0;
77
+ }
78
+ function getInstalledPackageMetadata() {
79
+ try {
80
+ const currentDir = dirname(fileURLToPath(import.meta.url));
81
+ const packageJsonPath = join(currentDir, '..', '..', 'package.json');
82
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
83
+ return {
84
+ name: packageJson.name || FALLBACK_PACKAGE_NAME,
85
+ version: packageJson.version || '0.0.0',
86
+ };
87
+ }
88
+ catch {
89
+ return {
90
+ name: FALLBACK_PACKAGE_NAME,
91
+ version: '0.0.0',
92
+ };
93
+ }
94
+ }
95
+ function getPublishedVersions(packageName) {
96
+ const raw = execFileSync('npm', ['view', packageName, 'versions', '--json'], { encoding: 'utf-8' });
97
+ const parsed = JSON.parse(raw);
98
+ if (typeof parsed === 'string') {
99
+ return [parsed];
100
+ }
101
+ if (!Array.isArray(parsed)) {
102
+ throw new Error('Unexpected npm response for published versions.');
103
+ }
104
+ return parsed
105
+ .filter((version) => typeof version === 'string')
106
+ .map((version) => version.trim())
107
+ .filter(Boolean);
108
+ }
109
+ function getNextStableVersion(currentVersion, versions) {
110
+ const stableVersions = versions.filter((version) => {
111
+ const parsed = parseSemver(version);
112
+ return parsed && parsed.prerelease.length === 0;
113
+ });
114
+ const candidates = (stableVersions.length > 0 ? stableVersions : versions)
115
+ .filter((version, index, all) => all.indexOf(version) === index)
116
+ .sort(compareSemver);
117
+ for (const version of candidates) {
118
+ if (compareSemver(version, currentVersion) > 0) {
119
+ return version;
120
+ }
121
+ }
122
+ return null;
123
+ }
124
+ export default function registerUpdate(program) {
125
+ program
126
+ .command('update')
127
+ .description('Update to the next published npm version')
128
+ .action(() => {
129
+ try {
130
+ const metadata = getInstalledPackageMetadata();
131
+ const versions = getPublishedVersions(metadata.name);
132
+ const nextVersion = getNextStableVersion(metadata.version, versions);
133
+ if (!nextVersion) {
134
+ console.log(`Already up to date (installed: ${metadata.version}).`);
135
+ return;
136
+ }
137
+ console.log(`Updating ${metadata.name} from ${metadata.version} to ${nextVersion}...`);
138
+ execFileSync('npm', ['install', '-g', `${metadata.name}@${nextVersion}`], { stdio: 'inherit' });
139
+ console.log(`Update complete. Now running version ${nextVersion}.`);
140
+ }
141
+ catch (err) {
142
+ const message = err instanceof Error ? err.message : 'Unknown error';
143
+ console.error(`Failed to update CLI: ${message}`);
144
+ process.exit(1);
145
+ }
146
+ });
147
+ }
148
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export default function registerUploadBot(program: Command): void;