@vibeapi/api-helper 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.js +119 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +130 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +105 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.js +5 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/lang.d.ts +1 -0
- package/dist/commands/lang.js +28 -0
- package/dist/commands/lang.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-validator.d.ts +12 -0
- package/dist/lib/api-validator.js +79 -0
- package/dist/lib/api-validator.js.map +1 -0
- package/dist/lib/claude-code-manager.d.ts +86 -0
- package/dist/lib/claude-code-manager.js +233 -0
- package/dist/lib/claude-code-manager.js.map +1 -0
- package/dist/lib/command.d.ts +10 -0
- package/dist/lib/command.js +168 -0
- package/dist/lib/command.js.map +1 -0
- package/dist/lib/config.d.ts +64 -0
- package/dist/lib/config.js +226 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/i18n.d.ts +20 -0
- package/dist/lib/i18n.js +149 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/opencode-manager.d.ts +55 -0
- package/dist/lib/opencode-manager.js +134 -0
- package/dist/lib/opencode-manager.js.map +1 -0
- package/dist/lib/tool-manager.d.ts +25 -0
- package/dist/lib/tool-manager.js +280 -0
- package/dist/lib/tool-manager.js.map +1 -0
- package/dist/lib/wizard.d.ts +23 -0
- package/dist/lib/wizard.js +360 -0
- package/dist/lib/wizard.js.map +1 -0
- package/dist/locales/en_US.json +146 -0
- package/dist/locales/zh_CN.json +146 -0
- package/dist/utils/logger.d.ts +55 -0
- package/dist/utils/logger.js +202 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/string-width.d.ts +38 -0
- package/dist/utils/string-width.js +131 -0
- package/dist/utils/string-width.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { DEFAULT_MODELS } from './config.js';
|
|
2
|
+
export interface ClaudeCodeSettingsConfig {
|
|
3
|
+
env?: {
|
|
4
|
+
ANTHROPIC_AUTH_TOKEN?: string;
|
|
5
|
+
ANTHROPIC_BASE_URL?: string;
|
|
6
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL?: string;
|
|
7
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL?: string;
|
|
8
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL?: string;
|
|
9
|
+
ANTHROPIC_MODEL?: string;
|
|
10
|
+
ANTHROPIC_REASONING_MODEL?: string;
|
|
11
|
+
API_TIMEOUT_MS?: string;
|
|
12
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC?: number;
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
};
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
export interface ClaudeCodeMCPServerConfig {
|
|
18
|
+
type: 'stdio' | 'sse' | 'http';
|
|
19
|
+
command?: string;
|
|
20
|
+
args?: string[];
|
|
21
|
+
env?: Record<string, string>;
|
|
22
|
+
url?: string;
|
|
23
|
+
headers?: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
export interface ClaudeCodeMCPConfig {
|
|
26
|
+
mcpServers?: Record<string, ClaudeCodeMCPServerConfig>;
|
|
27
|
+
hasOpusPlanDefault?: boolean;
|
|
28
|
+
lastReleaseNotesSeen?: string;
|
|
29
|
+
hasCompletedOnboarding?: boolean;
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
}
|
|
32
|
+
export declare class ClaudeCodeManager {
|
|
33
|
+
private static instance;
|
|
34
|
+
private settingsPath;
|
|
35
|
+
private mcpConfigPath;
|
|
36
|
+
private constructor();
|
|
37
|
+
static getInstance(): ClaudeCodeManager;
|
|
38
|
+
/**
|
|
39
|
+
* 确保配置目录存在
|
|
40
|
+
*/
|
|
41
|
+
private ensureConfigDir;
|
|
42
|
+
/**
|
|
43
|
+
* 读取 settings.json 配置
|
|
44
|
+
*/
|
|
45
|
+
getSettings(): ClaudeCodeSettingsConfig;
|
|
46
|
+
/**
|
|
47
|
+
* 保存 settings.json 配置
|
|
48
|
+
*/
|
|
49
|
+
saveSettings(config: ClaudeCodeSettingsConfig): void;
|
|
50
|
+
/**
|
|
51
|
+
* 读取 MCP 配置 (~/.claude.json)
|
|
52
|
+
*/
|
|
53
|
+
getMCPConfig(): ClaudeCodeMCPConfig;
|
|
54
|
+
/**
|
|
55
|
+
* 保存 MCP 配置 (~/.claude.json)
|
|
56
|
+
*/
|
|
57
|
+
saveMCPConfig(config: ClaudeCodeMCPConfig): void;
|
|
58
|
+
/**
|
|
59
|
+
* 加载私有 NewAPI 配置到 Claude Code
|
|
60
|
+
*/
|
|
61
|
+
loadPrivateConfig(apiKey: string, models: typeof DEFAULT_MODELS): void;
|
|
62
|
+
/**
|
|
63
|
+
* 确保 .claude.json 中有 hasCompletedOnboarding: true
|
|
64
|
+
*/
|
|
65
|
+
private ensureOnboardingCompleted;
|
|
66
|
+
/**
|
|
67
|
+
* 清理 shell rc 文件中的 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL 环境变量
|
|
68
|
+
*/
|
|
69
|
+
private cleanupShellEnvVars;
|
|
70
|
+
/**
|
|
71
|
+
* 获取当前 shell 的 rc 文件路径
|
|
72
|
+
*/
|
|
73
|
+
private getShellRcFilePath;
|
|
74
|
+
/**
|
|
75
|
+
* 卸载私有配置从 Claude Code
|
|
76
|
+
*/
|
|
77
|
+
unloadPrivateConfig(): void;
|
|
78
|
+
/**
|
|
79
|
+
* 检测当前 Claude Code 配置的 API Key
|
|
80
|
+
* @returns 包含 API Key 的对象
|
|
81
|
+
*/
|
|
82
|
+
detectCurrentConfig(): {
|
|
83
|
+
apiKey: string | null;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export declare const claudeCodeManager: ClaudeCodeManager;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { DEFAULT_BASE_URL, DEFAULT_MODELS } from './config.js';
|
|
6
|
+
export class ClaudeCodeManager {
|
|
7
|
+
static instance;
|
|
8
|
+
settingsPath;
|
|
9
|
+
mcpConfigPath;
|
|
10
|
+
constructor() {
|
|
11
|
+
// Claude Code 配置文件路径(跨平台支持)
|
|
12
|
+
// - macOS/Linux: ~/.claude/settings.json 和 ~/.claude.json
|
|
13
|
+
// - Windows: %USERPROFILE%\.claude\settings.json 和 %USERPROFILE%\.claude.json
|
|
14
|
+
// (例如: C:\Users\username\.claude\settings.json)
|
|
15
|
+
this.settingsPath = join(homedir(), '.claude', 'settings.json');
|
|
16
|
+
this.mcpConfigPath = join(homedir(), '.claude.json');
|
|
17
|
+
}
|
|
18
|
+
static getInstance() {
|
|
19
|
+
if (!ClaudeCodeManager.instance) {
|
|
20
|
+
ClaudeCodeManager.instance = new ClaudeCodeManager();
|
|
21
|
+
}
|
|
22
|
+
return ClaudeCodeManager.instance;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 确保配置目录存在
|
|
26
|
+
*/
|
|
27
|
+
ensureConfigDir(filePath) {
|
|
28
|
+
const dir = dirname(filePath);
|
|
29
|
+
if (!existsSync(dir)) {
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 读取 settings.json 配置
|
|
35
|
+
*/
|
|
36
|
+
getSettings() {
|
|
37
|
+
try {
|
|
38
|
+
if (existsSync(this.settingsPath)) {
|
|
39
|
+
const content = readFileSync(this.settingsPath, 'utf-8');
|
|
40
|
+
return JSON.parse(content);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.warn('Failed to read Claude Code settings:', error);
|
|
45
|
+
logger.logError('ClaudeCodeManager.getSettings', error);
|
|
46
|
+
}
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 保存 settings.json 配置
|
|
51
|
+
*/
|
|
52
|
+
saveSettings(config) {
|
|
53
|
+
try {
|
|
54
|
+
this.ensureConfigDir(this.settingsPath);
|
|
55
|
+
writeFileSync(this.settingsPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw new Error(`Failed to save Claude Code settings: ${error}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 读取 MCP 配置 (~/.claude.json)
|
|
63
|
+
*/
|
|
64
|
+
getMCPConfig() {
|
|
65
|
+
try {
|
|
66
|
+
if (existsSync(this.mcpConfigPath)) {
|
|
67
|
+
const content = readFileSync(this.mcpConfigPath, 'utf-8');
|
|
68
|
+
return JSON.parse(content);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.warn('Failed to read Claude Code MCP config:', error);
|
|
73
|
+
logger.logError('ClaudeCodeManager.getMCPConfig', error);
|
|
74
|
+
}
|
|
75
|
+
return {};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 保存 MCP 配置 (~/.claude.json)
|
|
79
|
+
*/
|
|
80
|
+
saveMCPConfig(config) {
|
|
81
|
+
try {
|
|
82
|
+
this.ensureConfigDir(this.mcpConfigPath);
|
|
83
|
+
writeFileSync(this.mcpConfigPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw new Error(`Failed to save Claude Code MCP config: ${error}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 加载私有 NewAPI 配置到 Claude Code
|
|
91
|
+
*/
|
|
92
|
+
loadPrivateConfig(apiKey, models) {
|
|
93
|
+
// 1. 确保 .claude.json 中有 hasCompletedOnboarding: true
|
|
94
|
+
this.ensureOnboardingCompleted();
|
|
95
|
+
// 2. 清理 shell rc 文件中的 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL
|
|
96
|
+
this.cleanupShellEnvVars();
|
|
97
|
+
// 3. 加载配置到 settings.json
|
|
98
|
+
const currentSettings = this.getSettings();
|
|
99
|
+
// 从 env 中移除 ANTHROPIC_API_KEY(如果存在),统一使用 ANTHROPIC_AUTH_TOKEN
|
|
100
|
+
const currentEnv = currentSettings.env || {};
|
|
101
|
+
const { ANTHROPIC_API_KEY: _, ...cleanedEnv } = currentEnv;
|
|
102
|
+
const privateConfig = {
|
|
103
|
+
...currentSettings,
|
|
104
|
+
env: {
|
|
105
|
+
...cleanedEnv,
|
|
106
|
+
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
107
|
+
ANTHROPIC_BASE_URL: DEFAULT_BASE_URL,
|
|
108
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haiku || DEFAULT_MODELS.haiku,
|
|
109
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnet || DEFAULT_MODELS.sonnet,
|
|
110
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opus || DEFAULT_MODELS.opus,
|
|
111
|
+
ANTHROPIC_MODEL: models.opus || DEFAULT_MODELS.opus,
|
|
112
|
+
ANTHROPIC_REASONING_MODEL: models.reasoning || DEFAULT_MODELS.reasoning,
|
|
113
|
+
API_TIMEOUT_MS: '3000000',
|
|
114
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
this.saveSettings(privateConfig);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 确保 .claude.json 中有 hasCompletedOnboarding: true
|
|
121
|
+
*/
|
|
122
|
+
ensureOnboardingCompleted() {
|
|
123
|
+
try {
|
|
124
|
+
const mcpConfig = this.getMCPConfig();
|
|
125
|
+
if (!mcpConfig.hasCompletedOnboarding) {
|
|
126
|
+
this.saveMCPConfig({ ...mcpConfig, hasCompletedOnboarding: true });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.warn('Failed to ensure onboarding completed:', error);
|
|
131
|
+
logger.logError('ClaudeCodeManager.ensureOnboardingCompleted', error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 清理 shell rc 文件中的 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL 环境变量
|
|
136
|
+
*/
|
|
137
|
+
cleanupShellEnvVars() {
|
|
138
|
+
// 检查当前环境变量是否有这些值
|
|
139
|
+
if (!process.env.ANTHROPIC_API_KEY && !process.env.ANTHROPIC_BASE_URL) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
// 根据操作系统和 shell 类型确定 rc 文件路径
|
|
144
|
+
const rcFile = this.getShellRcFilePath();
|
|
145
|
+
if (!rcFile || !existsSync(rcFile)) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let content = readFileSync(rcFile, 'utf-8');
|
|
149
|
+
const originalContent = content;
|
|
150
|
+
// 移除 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY 相关行
|
|
151
|
+
const linesToRemove = [
|
|
152
|
+
/^\s*export\s+ANTHROPIC_BASE_URL=.*$/gm,
|
|
153
|
+
/^\s*export\s+ANTHROPIC_API_KEY=.*$/gm,
|
|
154
|
+
/^\s*#\s*Claude Code environment variables\s*$/gm
|
|
155
|
+
];
|
|
156
|
+
for (const pattern of linesToRemove) {
|
|
157
|
+
content = content.replace(pattern, '');
|
|
158
|
+
}
|
|
159
|
+
// 如果内容有变化,写回文件
|
|
160
|
+
if (content !== originalContent) {
|
|
161
|
+
writeFileSync(rcFile, content, 'utf-8');
|
|
162
|
+
console.log(`Cleaned up ANTHROPIC_* environment variables from ${rcFile}`);
|
|
163
|
+
setTimeout(() => { }, 1000);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
console.warn('Failed to cleanup shell environment variables:', error);
|
|
168
|
+
logger.logError('ClaudeCodeManager.cleanupShellEnvVars', error);
|
|
169
|
+
setTimeout(() => { }, 1000);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 获取当前 shell 的 rc 文件路径
|
|
174
|
+
*/
|
|
175
|
+
getShellRcFilePath() {
|
|
176
|
+
const home = homedir();
|
|
177
|
+
// Windows 不使用 rc 文件
|
|
178
|
+
if (process.platform === 'win32') {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
// 获取当前 shell
|
|
182
|
+
const shell = process.env.SHELL || '';
|
|
183
|
+
const shellName = shell.split('/').pop() || '';
|
|
184
|
+
switch (shellName) {
|
|
185
|
+
case 'bash':
|
|
186
|
+
return join(home, '.bashrc');
|
|
187
|
+
case 'zsh':
|
|
188
|
+
return join(home, '.zshrc');
|
|
189
|
+
case 'fish':
|
|
190
|
+
return join(home, '.config', 'fish', 'config.fish');
|
|
191
|
+
default:
|
|
192
|
+
return join(home, '.profile');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 卸载私有配置从 Claude Code
|
|
197
|
+
*/
|
|
198
|
+
unloadPrivateConfig() {
|
|
199
|
+
const currentSettings = this.getSettings();
|
|
200
|
+
if (!currentSettings.env) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// 删除私有配置相关的环境变量
|
|
204
|
+
const { ANTHROPIC_AUTH_TOKEN: _1, ANTHROPIC_BASE_URL: _2, ANTHROPIC_DEFAULT_HAIKU_MODEL: _3, ANTHROPIC_DEFAULT_SONNET_MODEL: _4, ANTHROPIC_DEFAULT_OPUS_MODEL: _5, ANTHROPIC_MODEL: _6, ANTHROPIC_REASONING_MODEL: _7, API_TIMEOUT_MS: _8, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: _9, ...otherEnv } = currentSettings.env;
|
|
205
|
+
const newSettings = {
|
|
206
|
+
...currentSettings,
|
|
207
|
+
env: otherEnv
|
|
208
|
+
};
|
|
209
|
+
// 如果 env 为空对象,则删除 env 字段
|
|
210
|
+
if (newSettings.env && Object.keys(newSettings.env).length === 0) {
|
|
211
|
+
delete newSettings.env;
|
|
212
|
+
}
|
|
213
|
+
this.saveSettings(newSettings);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 检测当前 Claude Code 配置的 API Key
|
|
217
|
+
* @returns 包含 API Key 的对象
|
|
218
|
+
*/
|
|
219
|
+
detectCurrentConfig() {
|
|
220
|
+
try {
|
|
221
|
+
const settings = this.getSettings();
|
|
222
|
+
if (!settings.env || !settings.env.ANTHROPIC_AUTH_TOKEN) {
|
|
223
|
+
return { apiKey: null };
|
|
224
|
+
}
|
|
225
|
+
return { apiKey: settings.env.ANTHROPIC_AUTH_TOKEN };
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return { apiKey: null };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export const claudeCodeManager = ClaudeCodeManager.getInstance();
|
|
233
|
+
//# sourceMappingURL=claude-code-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-manager.js","sourceRoot":"","sources":["../../src/lib/claude-code-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command as Commander } from 'commander';
|
|
2
|
+
export declare class Command {
|
|
3
|
+
private program;
|
|
4
|
+
constructor();
|
|
5
|
+
private getVersion;
|
|
6
|
+
private setupProgram;
|
|
7
|
+
private handleInitCommand;
|
|
8
|
+
execute(args: string[]): Promise<void>;
|
|
9
|
+
getProgram(): Commander;
|
|
10
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { Command as Commander } from 'commander';
|
|
2
|
+
import { i18n } from './i18n.js';
|
|
3
|
+
import { configManager } from './config.js';
|
|
4
|
+
import { wizard } from './wizard.js';
|
|
5
|
+
import { langCommand, authCommand, doctorCommand, configCommand } from '../commands/index.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
export class Command {
|
|
11
|
+
program;
|
|
12
|
+
constructor() {
|
|
13
|
+
const lang = configManager.getLang();
|
|
14
|
+
i18n.loadFromConfig(lang);
|
|
15
|
+
this.program = new Commander();
|
|
16
|
+
this.setupProgram();
|
|
17
|
+
}
|
|
18
|
+
getVersion() {
|
|
19
|
+
try {
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = dirname(__filename);
|
|
22
|
+
const packagePath = join(__dirname, '../../package.json');
|
|
23
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
24
|
+
return packageJson.version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return '1.0.0';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
setupProgram() {
|
|
31
|
+
this.program
|
|
32
|
+
.name('chelper')
|
|
33
|
+
.description(i18n.t('cli.title'))
|
|
34
|
+
.version(this.getVersion(), '-v, --version', i18n.t('commands.version'))
|
|
35
|
+
.helpOption('-h, --help', i18n.t('commands.help'));
|
|
36
|
+
// Init command - interactive wizard
|
|
37
|
+
this.program
|
|
38
|
+
.command('init')
|
|
39
|
+
.description(i18n.t('commands.init'))
|
|
40
|
+
.action(async () => {
|
|
41
|
+
await this.handleInitCommand();
|
|
42
|
+
});
|
|
43
|
+
// Lang command - language management
|
|
44
|
+
const langCmd = this.program
|
|
45
|
+
.command('lang')
|
|
46
|
+
.description(i18n.t('commands.lang'));
|
|
47
|
+
langCmd
|
|
48
|
+
.command('show')
|
|
49
|
+
.description(i18n.t('lang.show_usage'))
|
|
50
|
+
.action(async () => {
|
|
51
|
+
await langCommand(['show']);
|
|
52
|
+
});
|
|
53
|
+
langCmd
|
|
54
|
+
.command('set <locale>')
|
|
55
|
+
.description(i18n.t('lang.set_usage'))
|
|
56
|
+
.action(async (locale) => {
|
|
57
|
+
await langCommand(['set', locale]);
|
|
58
|
+
});
|
|
59
|
+
// Auth command - API key management
|
|
60
|
+
const authCmd = this.program
|
|
61
|
+
.command('auth')
|
|
62
|
+
.description(i18n.t('commands.auth'));
|
|
63
|
+
authCmd
|
|
64
|
+
.argument('[token]', 'API token')
|
|
65
|
+
.action(async (token) => {
|
|
66
|
+
const args = [];
|
|
67
|
+
if (token)
|
|
68
|
+
args.push(token);
|
|
69
|
+
await authCommand(args);
|
|
70
|
+
});
|
|
71
|
+
authCmd
|
|
72
|
+
.command('revoke')
|
|
73
|
+
.description('Revoke saved API key')
|
|
74
|
+
.action(async () => {
|
|
75
|
+
await authCommand(['revoke']);
|
|
76
|
+
});
|
|
77
|
+
authCmd
|
|
78
|
+
.command('reload <tool>')
|
|
79
|
+
.description('Reload plan configuration to the specified tool (e.g., claude)')
|
|
80
|
+
.action(async (tool) => {
|
|
81
|
+
await authCommand(['reload', tool]);
|
|
82
|
+
});
|
|
83
|
+
// Doctor command - health check
|
|
84
|
+
this.program
|
|
85
|
+
.command('doctor')
|
|
86
|
+
.description(i18n.t('commands.doctor'))
|
|
87
|
+
.action(async () => {
|
|
88
|
+
await doctorCommand();
|
|
89
|
+
});
|
|
90
|
+
// Enter command - interactive menu
|
|
91
|
+
const enterCmd = this.program
|
|
92
|
+
.command('enter [option]')
|
|
93
|
+
.description(i18n.t('commands.enter'));
|
|
94
|
+
enterCmd
|
|
95
|
+
.action(async (option) => {
|
|
96
|
+
if (!option) {
|
|
97
|
+
await wizard.showMainMenu();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
switch (option) {
|
|
101
|
+
case 'lang':
|
|
102
|
+
case 'language':
|
|
103
|
+
await wizard.configLanguage();
|
|
104
|
+
break;
|
|
105
|
+
case 'apikey':
|
|
106
|
+
case 'api-key':
|
|
107
|
+
await wizard.configApiKey();
|
|
108
|
+
break;
|
|
109
|
+
case 'models':
|
|
110
|
+
await wizard.configModels();
|
|
111
|
+
break;
|
|
112
|
+
default: {
|
|
113
|
+
const args = [option];
|
|
114
|
+
await configCommand(args);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
this.program.action(async () => {
|
|
120
|
+
if (configManager.isFirstRun()) {
|
|
121
|
+
console.log(chalk.cyan(i18n.t('messages.first_run')));
|
|
122
|
+
await wizard.runFirstTimeSetup();
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
await wizard.showMainMenu();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// Custom help
|
|
129
|
+
this.program.configureHelp({
|
|
130
|
+
sortSubcommands: true,
|
|
131
|
+
subcommandTerm: (cmd) => cmd.name() + ' ' + cmd.usage()
|
|
132
|
+
});
|
|
133
|
+
// Add examples to help
|
|
134
|
+
this.program.addHelpText('after', `
|
|
135
|
+
${chalk.bold(i18n.t('cli.examples'))}:
|
|
136
|
+
${chalk.gray('$ chelper # Interactive main menu')}
|
|
137
|
+
${chalk.gray('$ chelper init # Run first-time setup wizard')}
|
|
138
|
+
${chalk.gray('$ chelper enter # Interactive main menu')}
|
|
139
|
+
${chalk.gray('$ chelper enter lang # Interactive language configuration')}
|
|
140
|
+
${chalk.gray('$ chelper enter apikey # Interactive API key configuration')}
|
|
141
|
+
${chalk.gray('$ chelper enter models # Interactive model configuration')}
|
|
142
|
+
${chalk.gray('$ chelper lang show # Show current language')}
|
|
143
|
+
${chalk.gray('$ chelper lang set zh_CN')}
|
|
144
|
+
${chalk.gray('$ chelper auth # Interactive auth setup')}
|
|
145
|
+
${chalk.gray('$ chelper auth <token> # Set API key')}
|
|
146
|
+
${chalk.gray('$ chelper auth revoke')}
|
|
147
|
+
${chalk.gray('$ chelper doctor # Health check')}
|
|
148
|
+
`);
|
|
149
|
+
}
|
|
150
|
+
async handleInitCommand() {
|
|
151
|
+
await wizard.runFirstTimeSetup();
|
|
152
|
+
}
|
|
153
|
+
async execute(args) {
|
|
154
|
+
try {
|
|
155
|
+
await this.program.parseAsync(args, { from: 'user' });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (error instanceof Error) {
|
|
159
|
+
console.error(chalk.red(i18n.t('cli.error_general')), error.message);
|
|
160
|
+
}
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
getProgram() {
|
|
165
|
+
return this.program;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/lib/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export declare const DEFAULT_BASE_URL = "https://www.vibeapi.cn";
|
|
2
|
+
export declare const DEFAULT_MODELS: {
|
|
3
|
+
haiku: string;
|
|
4
|
+
sonnet: string;
|
|
5
|
+
opus: string;
|
|
6
|
+
reasoning: string;
|
|
7
|
+
};
|
|
8
|
+
export interface ChelperConfig {
|
|
9
|
+
lang: string;
|
|
10
|
+
api_key?: string;
|
|
11
|
+
models?: {
|
|
12
|
+
haiku: string;
|
|
13
|
+
sonnet: string;
|
|
14
|
+
opus: string;
|
|
15
|
+
reasoning: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare class ConfigManager {
|
|
19
|
+
private static instance;
|
|
20
|
+
private configDir;
|
|
21
|
+
private configPath;
|
|
22
|
+
private config;
|
|
23
|
+
private constructor();
|
|
24
|
+
/**
|
|
25
|
+
* 获取配置目录路径,支持环境变量覆盖
|
|
26
|
+
*/
|
|
27
|
+
private getConfigDir;
|
|
28
|
+
static getInstance(): ConfigManager;
|
|
29
|
+
private ensureConfigDir;
|
|
30
|
+
private loadConfig;
|
|
31
|
+
/**
|
|
32
|
+
* 检查配置是否需要迁移
|
|
33
|
+
*/
|
|
34
|
+
private needsMigration;
|
|
35
|
+
/**
|
|
36
|
+
* 迁移旧配置格式
|
|
37
|
+
*/
|
|
38
|
+
private migrateOldConfig;
|
|
39
|
+
/**
|
|
40
|
+
* 原子写入文件
|
|
41
|
+
*/
|
|
42
|
+
private atomicWrite;
|
|
43
|
+
/**
|
|
44
|
+
* 备份当前配置
|
|
45
|
+
*/
|
|
46
|
+
private backupConfig;
|
|
47
|
+
/**
|
|
48
|
+
* 轮转备份文件,保留最近的 N 个
|
|
49
|
+
*/
|
|
50
|
+
private rotateBackups;
|
|
51
|
+
saveConfig(config?: ChelperConfig): void;
|
|
52
|
+
getConfig(): ChelperConfig;
|
|
53
|
+
updateConfig(updates: Partial<ChelperConfig>): void;
|
|
54
|
+
isFirstRun(): boolean;
|
|
55
|
+
getLang(): string;
|
|
56
|
+
setLang(lang: string): void;
|
|
57
|
+
getApiKey(): string | undefined;
|
|
58
|
+
setApiKey(apiKey: string): void;
|
|
59
|
+
revokeApiKey(): void;
|
|
60
|
+
getModels(): typeof DEFAULT_MODELS;
|
|
61
|
+
setModels(models: typeof DEFAULT_MODELS): void;
|
|
62
|
+
updateModels(partial: Partial<typeof DEFAULT_MODELS>): void;
|
|
63
|
+
}
|
|
64
|
+
export declare const configManager: ConfigManager;
|