@vibeapi/api-helper 0.0.14 → 0.0.16
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/dist/cli.js +1 -17
- package/dist/commands/auth.js +1 -119
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.js +1 -130
- package/dist/commands/doctor.js +1 -105
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index.js +1 -5
- package/dist/commands/lang.js +1 -28
- package/dist/index.js +1 -10
- package/dist/lib/api-validator.js +1 -79
- package/dist/lib/api-validator.js.map +1 -1
- package/dist/lib/claude-code-manager.js +1 -269
- package/dist/lib/claude-code-manager.js.map +1 -1
- package/dist/lib/command.js +1 -168
- package/dist/lib/command.js.map +1 -1
- package/dist/lib/config.d.ts +4 -6
- package/dist/lib/config.js +1 -226
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/i18n.js +1 -149
- package/dist/lib/model-registry.d.ts +20 -0
- package/dist/lib/model-registry.js +1 -0
- package/dist/lib/model-registry.js.map +1 -0
- package/dist/lib/opencode-manager.js +1 -134
- package/dist/lib/opencode-manager.js.map +1 -1
- package/dist/lib/settings-template.d.ts +6 -0
- package/dist/lib/settings-template.js +1 -0
- package/dist/lib/settings-template.js.map +1 -0
- package/dist/lib/tool-manager.js +1 -280
- package/dist/lib/tool-manager.js.map +1 -1
- package/dist/lib/wizard.d.ts +3 -3
- package/dist/lib/wizard.js +1 -625
- package/dist/lib/wizard.js.map +1 -1
- package/dist/locales/en_US.json +9 -7
- package/dist/locales/zh_CN.json +8 -6
- package/dist/models.json +44 -0
- package/dist/settings-template.json +12 -0
- package/dist/utils/logger.js +1 -202
- package/dist/utils/string-width.js +1 -131
- package/models.json +44 -0
- package/package.json +75 -73
- package/settings-template.json +12 -0
|
@@ -1,269 +1 @@
|
|
|
1
|
-
import {
|
|
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
|
-
* Get experimental feature value
|
|
233
|
-
*/
|
|
234
|
-
getExperimentalFeature(key) {
|
|
235
|
-
const settings = this.getSettings();
|
|
236
|
-
return settings.env?.[key];
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Set experimental feature (idempotent)
|
|
240
|
-
*/
|
|
241
|
-
setExperimentalFeature(key, value) {
|
|
242
|
-
const currentSettings = this.getSettings();
|
|
243
|
-
const currentEnv = currentSettings.env || {};
|
|
244
|
-
const newSettings = {
|
|
245
|
-
...currentSettings,
|
|
246
|
-
env: {
|
|
247
|
-
...currentEnv,
|
|
248
|
-
[key]: value
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
this.saveSettings(newSettings);
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Remove experimental feature
|
|
255
|
-
*/
|
|
256
|
-
removeExperimentalFeature(key) {
|
|
257
|
-
const currentSettings = this.getSettings();
|
|
258
|
-
if (!currentSettings.env)
|
|
259
|
-
return;
|
|
260
|
-
const { [key]: _, ...remainingEnv } = currentSettings.env;
|
|
261
|
-
const newSettings = {
|
|
262
|
-
...currentSettings,
|
|
263
|
-
env: remainingEnv
|
|
264
|
-
};
|
|
265
|
-
this.saveSettings(newSettings);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
export const claudeCodeManager = ClaudeCodeManager.getInstance();
|
|
269
|
-
//# sourceMappingURL=claude-code-manager.js.map
|
|
1
|
+
import{existsSync as e,mkdirSync as t,readFileSync as n,writeFileSync as s}from"fs";import{join as r,dirname as a}from"path";import{homedir as o}from"os";import{logger as i}from"../utils/logger.js";import{configManager as g,DEFAULT_MODELS as l}from"./config.js";import{loadSettingsTemplate as C}from"./settings-template.js";export class ClaudeCodeManager{static instance;settingsPath;mcpConfigPath;constructor(){this.settingsPath=r(o(),".claude","settings.json"),this.mcpConfigPath=r(o(),".claude.json")}static getInstance(){return ClaudeCodeManager.instance||(ClaudeCodeManager.instance=new ClaudeCodeManager),ClaudeCodeManager.instance}ensureConfigDir(n){const s=a(n);e(s)||t(s,{recursive:!0})}getSettings(){try{if(e(this.settingsPath)){const e=n(this.settingsPath,"utf-8");return JSON.parse(e)}}catch(e){console.warn("Failed to read Claude Code settings:",e),i.logError("ClaudeCodeManager.getSettings",e)}return{}}saveSettings(e){try{this.ensureConfigDir(this.settingsPath),s(this.settingsPath,JSON.stringify(e,null,2),"utf-8")}catch(e){throw new Error(`Failed to save Claude Code settings: ${e}`)}}getMCPConfig(){try{if(e(this.mcpConfigPath)){const e=n(this.mcpConfigPath,"utf-8");return JSON.parse(e)}}catch(e){console.warn("Failed to read Claude Code MCP config:",e),i.logError("ClaudeCodeManager.getMCPConfig",e)}return{}}saveMCPConfig(e){try{this.ensureConfigDir(this.mcpConfigPath),s(this.mcpConfigPath,JSON.stringify(e,null,2),"utf-8")}catch(e){throw new Error(`Failed to save Claude Code MCP config: ${e}`)}}loadPrivateConfig(e,t){this.ensureOnboardingCompleted(),this.cleanupShellEnvVars();const n=C(),s=n.env||{},{env:r,...a}=n,o=this.getSettings(),i=o.env||{},{ANTHROPIC_API_KEY:c,...u}=i,h={...o,...a,env:{...u,...s,ANTHROPIC_AUTH_TOKEN:e,ANTHROPIC_BASE_URL:g.getBaseUrl(),ANTHROPIC_DEFAULT_HAIKU_MODEL:t.haiku||l.haiku,ANTHROPIC_DEFAULT_SONNET_MODEL:t.sonnet||l.sonnet,ANTHROPIC_DEFAULT_OPUS_MODEL:t.opus||l.opus,ANTHROPIC_MODEL:t.opus||l.opus,ANTHROPIC_REASONING_MODEL:t.reasoning||l.reasoning}};this.saveSettings(h)}ensureOnboardingCompleted(){try{const e=this.getMCPConfig();e.hasCompletedOnboarding||this.saveMCPConfig({...e,hasCompletedOnboarding:!0})}catch(e){console.warn("Failed to ensure onboarding completed:",e),i.logError("ClaudeCodeManager.ensureOnboardingCompleted",e)}}cleanupShellEnvVars(){if(process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_BASE_URL)try{const t=this.getShellRcFilePath();if(!t||!e(t))return;let r=n(t,"utf-8");const a=r,o=[/^\s*export\s+ANTHROPIC_BASE_URL=.*$/gm,/^\s*export\s+ANTHROPIC_API_KEY=.*$/gm,/^\s*#\s*Claude Code environment variables\s*$/gm];for(const e of o)r=r.replace(e,"");r!==a&&(s(t,r,"utf-8"),console.log(`Cleaned up ANTHROPIC_* environment variables from ${t}`))}catch(e){console.warn("Failed to cleanup shell environment variables:",e),i.logError("ClaudeCodeManager.cleanupShellEnvVars",e)}}getShellRcFilePath(){const e=o();if("win32"===process.platform)return null;switch((process.env.SHELL||"").split("/").pop()||""){case"bash":return r(e,".bashrc");case"zsh":return r(e,".zshrc");case"fish":return r(e,".config","fish","config.fish");default:return r(e,".profile")}}unloadPrivateConfig(){const e=this.getSettings();if(!e.env)return;const{ANTHROPIC_AUTH_TOKEN:t,ANTHROPIC_BASE_URL:n,ANTHROPIC_DEFAULT_HAIKU_MODEL:s,ANTHROPIC_DEFAULT_SONNET_MODEL:r,ANTHROPIC_DEFAULT_OPUS_MODEL:a,ANTHROPIC_MODEL:o,ANTHROPIC_REASONING_MODEL:i,API_TIMEOUT_MS:g,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:l,...C}=e.env,c={...e,env:C};c.env&&0===Object.keys(c.env).length&&delete c.env,this.saveSettings(c)}detectCurrentConfig(){try{const e=this.getSettings();return e.env&&e.env.ANTHROPIC_AUTH_TOKEN?{apiKey:e.env.ANTHROPIC_AUTH_TOKEN}:{apiKey:null}}catch{return{apiKey:null}}}getExperimentalFeature(e){const t=this.getSettings();return t.env?.[e]}setExperimentalFeature(e,t){const n=this.getSettings(),s=n.env||{},r={...n,env:{...s,[e]:t}};this.saveSettings(r)}removeExperimentalFeature(e){const t=this.getSettings();if(!t.env)return;const{[e]:n,...s}=t.env,r={...t,env:s};this.saveSettings(r)}}export const claudeCodeManager=ClaudeCodeManager.getInstance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-manager.js","sourceRoot":"","sources":["../../src/lib/claude-code-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-code-manager.js","sourceRoot":"","sources":["../../src/lib/claude-code-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/command.js
CHANGED
|
@@ -1,168 +1 @@
|
|
|
1
|
-
import {
|
|
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
|
|
1
|
+
import{Command as a}from"commander";import{i18n as e}from"./i18n.js";import{configManager as t}from"./config.js";import{wizard as r}from"./wizard.js";import{langCommand as n,authCommand as o,doctorCommand as i,configCommand as s}from"../commands/index.js";import c from"chalk";import{readFileSync as m}from"fs";import{join as p,dirname as g}from"path";import{fileURLToPath as l}from"url";export class Command{program;constructor(){const r=t.getLang();e.loadFromConfig(r),this.program=new a,this.setupProgram()}getVersion(){try{const a=l(import.meta.url),e=g(a),t=p(e,"../../package.json");return JSON.parse(m(t,"utf-8")).version}catch{return"1.0.0"}}setupProgram(){this.program.name("chelper").description(e.t("cli.title")).version(this.getVersion(),"-v, --version",e.t("commands.version")).helpOption("-h, --help",e.t("commands.help")).option("--base <url>","Custom API base URL"),this.program.command("init").description(e.t("commands.init")).action(async()=>{await this.handleInitCommand()});const a=this.program.command("lang").description(e.t("commands.lang"));a.command("show").description(e.t("lang.show_usage")).action(async()=>{await n(["show"])}),a.command("set <locale>").description(e.t("lang.set_usage")).action(async a=>{await n(["set",a])});const m=this.program.command("auth").description(e.t("commands.auth"));m.argument("[token]","API token").action(async a=>{const e=[];a&&e.push(a),await o(e)}),m.command("revoke").description("Revoke saved API key").action(async()=>{await o(["revoke"])}),m.command("reload <tool>").description("Reload plan configuration to the specified tool (e.g., claude)").action(async a=>{await o(["reload",a])}),this.program.command("doctor").description(e.t("commands.doctor")).action(async()=>{await i()}),this.program.command("enter [option]").description(e.t("commands.enter")).action(async a=>{if(a)switch(a){case"lang":case"language":await r.configLanguage();break;case"apikey":case"api-key":await r.configApiKey();break;case"models":await r.configModels();break;default:{const e=[a];await s(e);break}}else await r.showMainMenu()}),this.program.action(async()=>{t.isFirstRun()?(console.log(c.cyan(e.t("messages.first_run"))),await r.runFirstTimeSetup()):await r.showMainMenu()}),this.program.configureHelp({sortSubcommands:!0,subcommandTerm:a=>a.name()+" "+a.usage()}),this.program.addHelpText("after",`\n${c.bold(e.t("cli.examples"))}:\n ${c.gray("$ chelper # Interactive main menu")}\n ${c.gray("$ chelper init # Run first-time setup wizard")}\n ${c.gray("$ chelper enter # Interactive main menu")}\n ${c.gray("$ chelper enter lang # Interactive language configuration")}\n ${c.gray("$ chelper enter apikey # Interactive API key configuration")}\n ${c.gray("$ chelper enter models # Interactive model configuration")}\n ${c.gray("$ chelper lang show # Show current language")}\n ${c.gray("$ chelper lang set zh_CN")}\n ${c.gray("$ chelper auth # Interactive auth setup")}\n ${c.gray("$ chelper auth <token> # Set API key")}\n ${c.gray("$ chelper auth revoke")}\n ${c.gray("$ chelper doctor # Health check")}\n ${c.gray('$ chelper --base "https://custom.api.com" init # Custom base URL')}\n`)}async handleInitCommand(){await r.runFirstTimeSetup()}async execute(a){try{const e=a.indexOf("--base");-1!==e&&a[e+1]&&t.setBaseUrl(a[e+1]),await this.program.parseAsync(a,{from:"user"})}catch(a){a instanceof Error&&console.error(c.red(e.t("cli.error_general")),a.message),process.exit(1)}}getProgram(){return this.program}}
|
package/dist/lib/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/lib/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,OAAO;IACR,OAAO,CAAY;IAE3B;QACI,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEO,UAAU;QACd,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACnE,OAAO,WAAW,CAAC,OAAO,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,OAAO,CAAC;QACnB,CAAC;IACL,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,OAAO;aACP,IAAI,CAAC,SAAS,CAAC;aACf,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;aAChC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;aACvE,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/lib/command.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
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
|
-
};
|
|
2
|
+
export declare const DEFAULT_MODELS: import("./model-registry.js").Models;
|
|
8
3
|
export interface ChelperConfig {
|
|
9
4
|
lang: string;
|
|
10
5
|
api_key?: string;
|
|
@@ -20,6 +15,7 @@ export declare class ConfigManager {
|
|
|
20
15
|
private configDir;
|
|
21
16
|
private configPath;
|
|
22
17
|
private config;
|
|
18
|
+
private runtimeBaseUrl?;
|
|
23
19
|
private constructor();
|
|
24
20
|
/**
|
|
25
21
|
* 获取配置目录路径,支持环境变量覆盖
|
|
@@ -60,5 +56,7 @@ export declare class ConfigManager {
|
|
|
60
56
|
getModels(): typeof DEFAULT_MODELS;
|
|
61
57
|
setModels(models: typeof DEFAULT_MODELS): void;
|
|
62
58
|
updateModels(partial: Partial<typeof DEFAULT_MODELS>): void;
|
|
59
|
+
getBaseUrl(): string;
|
|
60
|
+
setBaseUrl(url: string): void;
|
|
63
61
|
}
|
|
64
62
|
export declare const configManager: ConfigManager;
|