@vibeapi/api-helper 0.0.26 → 0.0.28
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/README.md +17 -17
- package/dist/__tests__/claude-code-manager.test.js +1 -1
- package/dist/__tests__/claude-code-manager.test.js.map +1 -1
- package/dist/__tests__/command.test.js +1 -1
- package/dist/__tests__/command.test.js.map +1 -1
- package/dist/__tests__/commands.test.js +1 -1
- package/dist/__tests__/config-profiles.test.js +1 -1
- package/dist/__tests__/config.test.js +1 -1
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/env-cleanup.test.d.ts +1 -0
- package/dist/__tests__/env-cleanup.test.js +1 -0
- package/dist/__tests__/env-cleanup.test.js.map +1 -0
- package/dist/__tests__/extra-commands.test.js +1 -1
- package/dist/__tests__/i18n.test.js +1 -1
- package/dist/__tests__/i18n.test.js.map +1 -1
- package/dist/__tests__/model-registry.test.js +1 -1
- package/dist/__tests__/model-registry.test.js.map +1 -1
- package/dist/__tests__/opencode-manager.test.js +1 -1
- package/dist/__tests__/runtime-options.test.js +1 -1
- package/dist/__tests__/secret-store.test.js +1 -1
- package/dist/__tests__/tool-adapters.test.js +1 -1
- package/dist/__tests__/tool-adapters.test.js.map +1 -1
- package/dist/__tests__/tool-manager.test.js +1 -1
- package/dist/__tests__/tool-manager.test.js.map +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/lib/claude-code-manager.d.ts +0 -8
- package/dist/lib/claude-code-manager.js +1 -1
- package/dist/lib/claude-code-manager.js.map +1 -1
- package/dist/lib/command.d.ts +5 -0
- package/dist/lib/command.js +1 -1
- package/dist/lib/command.js.map +1 -1
- package/dist/lib/config.d.ts +27 -19
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/env-cleanup.d.ts +23 -0
- package/dist/lib/env-cleanup.js +1 -0
- package/dist/lib/env-cleanup.js.map +1 -0
- package/dist/lib/i18n.d.ts +6 -0
- package/dist/lib/i18n.js +1 -1
- package/dist/lib/i18n.js.map +1 -1
- package/dist/lib/secret-store.js +1 -1
- package/dist/lib/tool-manager.d.ts +2 -2
- package/dist/lib/tools/opencode.js +1 -1
- package/dist/lib/tools/opencode.js.map +1 -1
- package/dist/lib/tools/types.d.ts +5 -5
- package/dist/lib/tools/types.js +1 -1
- package/dist/lib/wizard.d.ts +5 -0
- package/dist/lib/wizard.js +1 -1
- package/dist/lib/wizard.js.map +1 -1
- package/dist/locales/en_US.json +23 -19
- package/dist/locales/zh_CN.json +23 -19
- package/dist/models.json +2 -2
- package/dist/utils/logger.js +1 -1
- package/models.json +2 -2
- package/package.json +3 -3
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const DEFAULT_BASE_URL = "https://www.vibeapi.cn";
|
|
2
2
|
export declare const DEFAULT_MODELS: import("./model-registry.js").Models;
|
|
3
3
|
export declare const DEFAULT_PROFILE_NAME = "default";
|
|
4
|
-
export interface
|
|
4
|
+
export interface VibecliModels {
|
|
5
5
|
haiku: string;
|
|
6
6
|
sonnet: string;
|
|
7
7
|
opus: string;
|
|
@@ -9,15 +9,15 @@ export interface ChelperModels {
|
|
|
9
9
|
/** Additional custom slots (e.g. a "vision" or "fast" slot) are preserved as-is. */
|
|
10
10
|
[slot: string]: string;
|
|
11
11
|
}
|
|
12
|
-
export interface
|
|
12
|
+
export interface VibecliProfile {
|
|
13
13
|
api_key?: string;
|
|
14
14
|
base_url?: string;
|
|
15
|
-
models?:
|
|
15
|
+
models?: VibecliModels;
|
|
16
16
|
/** Per-tool model overrides, merged over `models` when configuring that tool. */
|
|
17
|
-
tool_models?: Record<string, Partial<
|
|
17
|
+
tool_models?: Record<string, Partial<VibecliModels>>;
|
|
18
18
|
}
|
|
19
|
-
export interface
|
|
20
|
-
models:
|
|
19
|
+
export interface VibecliPreset {
|
|
20
|
+
models: VibecliModels;
|
|
21
21
|
updated_at: string;
|
|
22
22
|
}
|
|
23
23
|
export interface ConfigBackupInfo {
|
|
@@ -25,14 +25,14 @@ export interface ConfigBackupInfo {
|
|
|
25
25
|
path: string;
|
|
26
26
|
mtimeMs: number;
|
|
27
27
|
}
|
|
28
|
-
export interface
|
|
28
|
+
export interface VibecliConfig {
|
|
29
29
|
lang: string;
|
|
30
30
|
active_profile?: string;
|
|
31
|
-
profiles?: Record<string,
|
|
32
|
-
presets?: Record<string,
|
|
31
|
+
profiles?: Record<string, VibecliProfile>;
|
|
32
|
+
presets?: Record<string, VibecliPreset>;
|
|
33
33
|
api_key?: string;
|
|
34
34
|
base_url?: string;
|
|
35
|
-
models?:
|
|
35
|
+
models?: VibecliModels;
|
|
36
36
|
}
|
|
37
37
|
export declare class ConfigManager {
|
|
38
38
|
private static instance;
|
|
@@ -41,6 +41,14 @@ export declare class ConfigManager {
|
|
|
41
41
|
private config;
|
|
42
42
|
private runtimeBaseUrl?;
|
|
43
43
|
private constructor();
|
|
44
|
+
/**
|
|
45
|
+
* CLI 由 chelper 更名为 vibecli:老用户的数据目录 ~/.chelper(config.yaml、
|
|
46
|
+
* secrets.enc、备份)整体迁移为 ~/.vibecli。
|
|
47
|
+
* 注意:logger 等模块可能在本构造器之前就把新目录建成空壳(写日志时
|
|
48
|
+
* mkdir),所以不能只看目录存不存在——以「新目录是否已有真实配置」为准;
|
|
49
|
+
* 新目录是空壳时逐项搬运。失败不阻塞启动(下次启动会重试)。
|
|
50
|
+
*/
|
|
51
|
+
private migrateLegacyConfigDir;
|
|
44
52
|
private resolveConfigDir;
|
|
45
53
|
private createDefaultConfig;
|
|
46
54
|
private normalizeModels;
|
|
@@ -65,20 +73,20 @@ export declare class ConfigManager {
|
|
|
65
73
|
private atomicWrite;
|
|
66
74
|
private backupConfig;
|
|
67
75
|
private rotateBackups;
|
|
68
|
-
saveConfig(config?:
|
|
76
|
+
saveConfig(config?: VibecliConfig): void;
|
|
69
77
|
private extractSecretsForPersistence;
|
|
70
78
|
private hydrateSecretsFromStore;
|
|
71
|
-
getConfig():
|
|
72
|
-
updateConfig(updates: Partial<
|
|
79
|
+
getConfig(): VibecliConfig;
|
|
80
|
+
updateConfig(updates: Partial<VibecliConfig>): void;
|
|
73
81
|
isFirstRun(): boolean;
|
|
74
82
|
getLang(): string;
|
|
75
83
|
setLang(lang: string): void;
|
|
76
84
|
getActiveProfileName(): string;
|
|
77
85
|
listProfiles(): string[];
|
|
78
|
-
getProfile(name?: string):
|
|
86
|
+
getProfile(name?: string): VibecliProfile;
|
|
79
87
|
createProfile(name: string, sourceProfileName?: string): void;
|
|
80
88
|
setActiveProfile(name: string): void;
|
|
81
|
-
updateProfile(name: string, updates: Partial<
|
|
89
|
+
updateProfile(name: string, updates: Partial<VibecliProfile>): void;
|
|
82
90
|
deleteProfile(name: string): void;
|
|
83
91
|
getApiKey(): string | undefined;
|
|
84
92
|
setApiKey(apiKey: string): void;
|
|
@@ -86,15 +94,15 @@ export declare class ConfigManager {
|
|
|
86
94
|
getApiKeyFingerprint(): string;
|
|
87
95
|
getModels(): typeof DEFAULT_MODELS;
|
|
88
96
|
setModels(models: typeof DEFAULT_MODELS): void;
|
|
89
|
-
updateModels(partial: Partial<
|
|
97
|
+
updateModels(partial: Partial<VibecliModels>): void;
|
|
90
98
|
/**
|
|
91
99
|
* Resolve the effective models for a specific tool: the profile's base models
|
|
92
100
|
* with any per-tool override merged on top.
|
|
93
101
|
*/
|
|
94
|
-
getModelsForTool(toolName: string):
|
|
102
|
+
getModelsForTool(toolName: string): VibecliModels;
|
|
95
103
|
/** Set (or clear) a per-tool model override on the active profile. */
|
|
96
|
-
setToolModel(toolName: string, override: Partial<
|
|
97
|
-
getCustomPresets(): Record<string,
|
|
104
|
+
setToolModel(toolName: string, override: Partial<VibecliModels> | null): void;
|
|
105
|
+
getCustomPresets(): Record<string, VibecliPreset>;
|
|
98
106
|
saveCustomPreset(name: string, models: typeof DEFAULT_MODELS): void;
|
|
99
107
|
deleteCustomPreset(name: string): void;
|
|
100
108
|
listBackups(): ConfigBackupInfo[];
|
package/dist/lib/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as e,mkdirSync as t,readFileSync as i,writeFileSync as s,renameSync as o,unlinkSync as r,readdirSync as n,statSync as a,copyFileSync as c}from"fs";import{join as l}from"path";import{homedir as f}from"os";import*as g from"js-yaml";import{logger as h}from"../utils/logger.js";import{getDefaultModels as p}from"./model-registry.js";import{secretStore as m}from"./secret-store.js";import{i18n as u}from"./i18n.js";export const DEFAULT_BASE_URL="https://www.vibeapi.cn";export const DEFAULT_MODELS=p();export const DEFAULT_PROFILE_NAME="default";export class ConfigManager{static instance;configDir;configPath;config;runtimeBaseUrl;constructor(){this.configDir=this.resolveConfigDir(),this.configPath=l(this.configDir,"config.yaml"),this.config=this.loadConfig()}resolveConfigDir(){const e=process.env.CHELPER_CONFIG_DIR;if(e&&e.trim())return e.trim();const t=process.env.CHELPER_TEST_HOME;return t&&t.trim()?l(t.trim(),".chelper"):l(f(),".chelper")}createDefaultConfig(){return this.syncLegacyFields({lang:"en_US",active_profile:"default",profiles:{[DEFAULT_PROFILE_NAME]:{}},presets:{}})}normalizeModels(e){const t={haiku:e?.haiku?.trim()||DEFAULT_MODELS.haiku,sonnet:e?.sonnet?.trim()||DEFAULT_MODELS.sonnet,opus:e?.opus?.trim()||DEFAULT_MODELS.opus,reasoning:e?.reasoning?.trim()||DEFAULT_MODELS.reasoning};if(e&&"object"==typeof e)for(const[i,s]of Object.entries(e))i in t||"string"==typeof s&&s.trim()&&(t[i]=s.trim());return t}normalizeToolModels(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>{if(!e||"string"!=typeof e||!t||"object"!=typeof t)return[];const i={};for(const[e,s]of Object.entries(t))"string"==typeof s&&s.trim()&&(i[e]=s.trim());return Object.keys(i).length>0?[[e,i]]:[]});return Object.fromEntries(t)}normalizeProfile(e){if(!e)return{};const t=this.normalizeToolModels(e.tool_models);return{..."string"==typeof e.api_key&&e.api_key?{api_key:e.api_key}:{},..."string"==typeof e.base_url&&e.base_url?{base_url:e.base_url}:{},...e.models?{models:this.normalizeModels(e.models)}:{},...Object.keys(t).length>0?{tool_models:t}:{}}}normalizeProfiles(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>e&&"string"==typeof e&&t&&"object"==typeof t?[[e,this.normalizeProfile(t)]]:[]);return Object.fromEntries(t)}normalizePresets(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>{if(!e||"string"!=typeof e||!t||"object"!=typeof t)return[];const i=t;return i.models?[[e,{models:this.normalizeModels(i.models),updated_at:i.updated_at||new Date(0).toISOString()}]]:[]});return Object.fromEntries(t)}getResolvedActiveProfile(e){const t=e.active_profile||"default";return e.profiles?.[t]||{}}syncLegacyFields(e){const t=this.normalizeProfiles(e.profiles),i=e.active_profile?.trim()||Object.keys(t)[0]||"default",s=t[i]?t:{...t,[i]:{}},o=this.getResolvedActiveProfile({...e,profiles:s,active_profile:i});return{...e,lang:e.lang||"en_US",active_profile:i,profiles:s,presets:this.normalizePresets(e.presets),api_key:o.api_key,base_url:o.base_url,models:o.models?this.normalizeModels(o.models):DEFAULT_MODELS}}sanitizeBackupLabel(e){return(e||"").trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)}getBackupDir(){return l(this.configDir,"backups")}getSecretsPath(){return l(this.configDir,"secrets.enc")}getSecretsBackupPath(e){return e.replace(/\.yaml$/,".secrets.enc")}snapshotSecrets(t){const i=this.getSecretsPath();if(e(i))try{c(i,this.getSecretsBackupPath(t))}catch(e){h.logError("ConfigManager.snapshotSecrets",e)}}restoreSecretsSnapshot(t){const i=this.getSecretsBackupPath(t);if(e(i))try{c(i,this.getSecretsPath())}catch(e){h.logError("ConfigManager.restoreSecretsSnapshot",e)}}static getInstance(){return ConfigManager.instance||(ConfigManager.instance=new ConfigManager),ConfigManager.instance}ensureConfigDir(){e(this.configDir)||t(this.configDir,{recursive:!0})}loadConfig(){try{if(e(this.configPath)){const e=i(this.configPath,"utf-8"),t=g.load(e),s=this.migrateOldConfig(t||{lang:"en_US"}),o=this.hydrateSecretsFromStore(s);return(this.needsMigration(t)||this.hasInlineSecrets(t))&&(this.backupConfig(),this.atomicWrite(this.configPath,g.dump(this.extractSecretsForPersistence(o)))),o}}catch(e){h.warn("Failed to load config, using defaults:",e),h.logError("ConfigManager.loadConfig",e)}return this.createDefaultConfig()}hasInlineSecrets(e){if(!e||"object"!=typeof e)return!1;const t=e;if("string"==typeof t.api_key&&t.api_key)return!0;if(t.profiles&&"object"==typeof t.profiles)for(const e of Object.values(t.profiles))if(e&&"object"==typeof e&&"string"==typeof e.api_key&&e.api_key)return!0;return!1}needsMigration(e){return!(!e||"object"!=typeof e)&&("plan"in e||!("profiles"in e)||!("active_profile"in e)||!("presets"in e))}migrateOldConfig(e){if(!e||"object"!=typeof e)return this.createDefaultConfig();const t=e,{plan:i,...s}=t,o=this.normalizeProfiles(s.profiles),r=this.normalizeProfile({api_key:"string"==typeof s.api_key?s.api_key:void 0,base_url:"string"==typeof s.base_url?s.base_url:void 0,models:s.models}),n=Object.keys(o).length>0?o:{[DEFAULT_PROFILE_NAME]:r},a="string"==typeof s.active_profile&&s.active_profile.trim()?s.active_profile.trim():Object.keys(n)[0]||"default";return this.syncLegacyFields({lang:"string"==typeof s.lang&&s.lang?s.lang:"en_US",active_profile:a,profiles:n,presets:this.normalizePresets(s.presets)})}atomicWrite(t,i){const n=`${t}.tmp`;try{s(n,i,"utf-8"),o(n,t)}catch(t){if(e(n))try{r(n)}catch{}throw t}}backupConfig(){if(!e(this.configPath))return;const o=this.getBackupDir();e(o)||t(o,{recursive:!0});const r=(new Date).toISOString().replace(/[:.]/g,"-"),n=l(o,`config-${r}.yaml`);try{const e=i(this.configPath,"utf-8");s(n,e,"utf-8"),this.snapshotSecrets(n),this.rotateBackups(o,10,30)}catch(e){h.logError("ConfigManager.backupConfig",e)}}rotateBackups(t,i,s){try{const o=Date.now()-24*s*60*60*1e3,c=n(t).filter(e=>e.startsWith("config-")&&e.endsWith(".yaml")).map(e=>({name:e,path:l(t,e),mtime:a(l(t,e)).mtime})).sort((e,t)=>t.mtime.getTime()-e.mtime.getTime()),f=new Set;c.slice(i).forEach(e=>f.add(e.path)),c.forEach(e=>{e.mtime.getTime()<o&&f.add(e.path)});for(const t of f){let i=!1;try{r(t),i=!0}catch(e){h.logError("ConfigManager.rotateBackups",e)}if(i){const i=this.getSecretsBackupPath(t);if(e(i))try{r(i)}catch(e){h.logError("ConfigManager.rotateBackups.secrets",e)}}}}catch(e){h.logError("ConfigManager.rotateBackups",e)}}saveConfig(e){try{this.ensureConfigDir(),this.backupConfig();const t=this.syncLegacyFields(this.migrateOldConfig(e||this.config)),i=this.extractSecretsForPersistence(t),s=g.dump(i);this.atomicWrite(this.configPath,s),this.config=t}catch(e){throw h.error("Failed to save config:",e),h.logError("ConfigManager.saveConfig",e),e}}extractSecretsForPersistence(e){const t={...e.profiles||{}},i=[];for(const[e,s]of Object.entries(t))s?.api_key&&(m.setApiKey(e,s.api_key),i.push(e));for(const e of i){const{api_key:i,...s}=t[e];t[e]=s}const s={...e,profiles:t};return delete s.api_key,s}hydrateSecretsFromStore(e){const t={...e.profiles||{}};for(const[e,i]of Object.entries(t)){if(i?.api_key)continue;const s=m.getApiKey(e);s&&(t[e]={...i,api_key:s})}return{...e,profiles:t}}getConfig(){return this.syncLegacyFields({...this.config})}updateConfig(e){this.saveConfig({...this.config,...e})}isFirstRun(){return!e(this.configPath)}getLang(){return this.config.lang||"en_US"}setLang(e){this.updateConfig({lang:e})}getActiveProfileName(){return this.config.active_profile||"default"}listProfiles(){return Object.keys(this.config.profiles||{}).sort()}getProfile(e=this.getActiveProfileName()){const t=this.config.profiles?.[e]||{};return{...t.api_key?{api_key:t.api_key}:{},...t.base_url?{base_url:t.base_url}:{},models:t.models?this.normalizeModels(t.models):DEFAULT_MODELS,...t.tool_models&&Object.keys(t.tool_models).length>0?{tool_models:this.normalizeToolModels(t.tool_models)}:{}}}createProfile(e,t=this.getActiveProfileName()){const i=this.getProfile(t),s={...this.config.profiles||{},[e]:{...i.api_key?{api_key:i.api_key}:{},...i.base_url?{base_url:i.base_url}:{},models:this.normalizeModels(i.models)}};this.saveConfig({...this.config,profiles:s})}setActiveProfile(e){if(!this.config.profiles?.[e])throw new Error(`Profile not found: ${e}`);this.saveConfig({...this.config,active_profile:e})}updateProfile(e,t){const i=this.config.profiles?.[e]||{},s=t.models?this.normalizeModels({...i.models,...t.models}):i.models?this.normalizeModels(i.models):void 0,o={...i,...void 0!==t.api_key?{api_key:t.api_key}:{},...void 0!==t.base_url?{base_url:t.base_url}:{},...s?{models:s}:{}},r={...this.config.profiles||{},[e]:o};this.saveConfig({...this.config,profiles:r})}deleteProfile(e){const t={...this.config.profiles||{}};if(!t[e])return;const i=Object.keys(t).filter(t=>t!==e);if(0===i.length)throw new Error("At least one profile must remain");delete t[e];const s=this.getActiveProfileName()===e?i[0]:this.getActiveProfileName();this.saveConfig({...this.config,profiles:t,active_profile:s})}getApiKey(){return this.config.profiles?.[this.getActiveProfileName()]?.api_key}setApiKey(e){this.updateProfile(this.getActiveProfileName(),{api_key:e})}revokeApiKey(){const e=this.config.profiles?.[this.getActiveProfileName()]||{},{api_key:t,...i}=e,s={...this.config.profiles||{},[this.getActiveProfileName()]:i};try{m.deleteApiKey(this.getActiveProfileName())}catch(e){h.logError("ConfigManager.revokeApiKey",e);try{m.deleteAll()}catch(e){h.logError("ConfigManager.revokeApiKey.deleteAll",e)}}this.saveConfig({...this.config,profiles:s})}getApiKeyFingerprint(){try{return m.fingerprint(this.getActiveProfileName())}catch{return""}}getModels(){const e=this.config.profiles?.[this.getActiveProfileName()]?.models;return e?this.normalizeModels(e):DEFAULT_MODELS}setModels(e){this.updateProfile(this.getActiveProfileName(),{models:this.normalizeModels(e)})}updateModels(e){this.setModels(this.normalizeModels({...this.getModels(),...e}))}getModelsForTool(e){const t=this.getModels(),i=this.config.profiles?.[this.getActiveProfileName()]?.tool_models?.[e];return i?this.normalizeModels({...t,...i}):t}setToolModel(e,t){const i=this.getActiveProfileName(),s=this.config.profiles?.[i]||{},o={...s.tool_models||{}};t&&0!==Object.keys(t).length?o[e]=t:delete o[e];const r={...s};Object.keys(o).length>0?r.tool_models=o:delete r.tool_models;const n={...this.config.profiles||{},[i]:r};this.saveConfig({...this.config,profiles:n})}getCustomPresets(){return{...this.config.presets||{}}}saveCustomPreset(e,t){const i={...this.config.presets||{},[e]:{models:this.normalizeModels(t),updated_at:(new Date).toISOString()}};this.saveConfig({...this.config,presets:i})}deleteCustomPreset(e){const t={...this.config.presets||{}};t[e]&&(delete t[e],this.saveConfig({...this.config,presets:t}))}listBackups(){const t=this.getBackupDir();return e(t)?n(t).filter(e=>e.startsWith("config-")&&e.endsWith(".yaml")).map(e=>{const i=l(t,e);return{name:e,path:i,mtimeMs:a(i).mtimeMs}}).sort((e,t)=>t.mtimeMs-e.mtimeMs):[]}createBackup(o){this.ensureConfigDir();const r=this.getBackupDir();e(r)||t(r,{recursive:!0});const n=(new Date).toISOString().replace(/[:.]/g,"-"),a=this.sanitizeBackupLabel(o),c=l(r,a?`config-${n}-${a}.yaml`:`config-${n}.yaml`),f=e(this.configPath)?i(this.configPath,"utf-8"):g.dump(this.getConfig());return s(c,f,"utf-8"),this.snapshotSecrets(c),this.rotateBackups(r,10,30),c}restoreBackup(t){if(!t||"."===t||".."===t||/[/\\]|\.\./.test(t))throw new Error(`Invalid backup name: ${t}`);const s=this.getBackupDir(),o=l(s,t);if(!e(o))throw new Error(`Backup not found: ${t}`);const r=i(o,"utf-8"),n=g.load(r),a=this.getSecretsBackupPath(o),c=e(a),f=this.hasInlineSecrets(n);if(!c&&!f)throw new Error(u.t("config.backup_companion_missing",{path:a}));c&&this.restoreSecretsSnapshot(o);const h=this.migrateOldConfig(n||this.createDefaultConfig()),p=c?this.hydrateSecretsFromStore(h):h;this.saveConfig(p)}getBaseUrl(){return this.runtimeBaseUrl||this.config.profiles?.[this.getActiveProfileName()]?.base_url||DEFAULT_BASE_URL}setBaseUrl(e,t=!1){this.runtimeBaseUrl=e,t&&this.updateProfile(this.getActiveProfileName(),{base_url:e})}resetBaseUrl(){this.runtimeBaseUrl=void 0;const e=this.config.profiles?.[this.getActiveProfileName()]||{},{base_url:t,...i}=e,s={...this.config.profiles||{},[this.getActiveProfileName()]:i};this.saveConfig({...this.config,profiles:s})}}export const configManager=ConfigManager.getInstance();
|
|
1
|
+
import{existsSync as e,mkdirSync as t,readFileSync as i,writeFileSync as o,renameSync as s,unlinkSync as r,readdirSync as n,rmdirSync as a,statSync as c,copyFileSync as l}from"fs";import{join as f,dirname as g}from"path";import{homedir as h}from"os";import*as p from"js-yaml";import{logger as m}from"../utils/logger.js";import{getDefaultModels as u}from"./model-registry.js";import{secretStore as d}from"./secret-store.js";import{i18n as y}from"./i18n.js";export const DEFAULT_BASE_URL="https://www.vibeapi.cn";export const DEFAULT_MODELS=u();export const DEFAULT_PROFILE_NAME="default";export class ConfigManager{static instance;configDir;configPath;config;runtimeBaseUrl;constructor(){this.configDir=this.resolveConfigDir(),this.migrateLegacyConfigDir(),this.configPath=f(this.configDir,"config.yaml"),this.config=this.loadConfig()}migrateLegacyConfigDir(){try{const t=f(g(this.configDir),".chelper");if(t===this.configDir||!e(t))return;if(["config.yaml","secrets.enc"].some(t=>e(f(this.configDir,t))))return;if(e(this.configDir)){for(const i of n(t)){const o=f(this.configDir,i);e(o)||s(f(t,i),o)}0===n(t).length&&a(t)}else s(t,this.configDir);m.info(`Migrated config dir: ${t} -> ${this.configDir}`)}catch(e){m.warn("Failed to migrate legacy .chelper config dir:",e)}}resolveConfigDir(){const e=process.env.VIBECLI_CONFIG_DIR;if(e&&e.trim())return e.trim();const t=process.env.VIBECLI_TEST_HOME;return t&&t.trim()?f(t.trim(),".vibecli"):f(h(),".vibecli")}createDefaultConfig(){return this.syncLegacyFields({lang:"en_US",active_profile:"default",profiles:{[DEFAULT_PROFILE_NAME]:{}},presets:{}})}normalizeModels(e){const t={haiku:e?.haiku?.trim()||DEFAULT_MODELS.haiku,sonnet:e?.sonnet?.trim()||DEFAULT_MODELS.sonnet,opus:e?.opus?.trim()||DEFAULT_MODELS.opus,reasoning:e?.reasoning?.trim()||DEFAULT_MODELS.reasoning};if(e&&"object"==typeof e)for(const[i,o]of Object.entries(e))i in t||"string"==typeof o&&o.trim()&&(t[i]=o.trim());return t}normalizeToolModels(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>{if(!e||"string"!=typeof e||!t||"object"!=typeof t)return[];const i={};for(const[e,o]of Object.entries(t))"string"==typeof o&&o.trim()&&(i[e]=o.trim());return Object.keys(i).length>0?[[e,i]]:[]});return Object.fromEntries(t)}normalizeProfile(e){if(!e)return{};const t=this.normalizeToolModels(e.tool_models);return{..."string"==typeof e.api_key&&e.api_key?{api_key:e.api_key}:{},..."string"==typeof e.base_url&&e.base_url?{base_url:e.base_url}:{},...e.models?{models:this.normalizeModels(e.models)}:{},...Object.keys(t).length>0?{tool_models:t}:{}}}normalizeProfiles(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>e&&"string"==typeof e&&t&&"object"==typeof t?[[e,this.normalizeProfile(t)]]:[]);return Object.fromEntries(t)}normalizePresets(e){if(!e||"object"!=typeof e)return{};const t=Object.entries(e).flatMap(([e,t])=>{if(!e||"string"!=typeof e||!t||"object"!=typeof t)return[];const i=t;return i.models?[[e,{models:this.normalizeModels(i.models),updated_at:i.updated_at||new Date(0).toISOString()}]]:[]});return Object.fromEntries(t)}getResolvedActiveProfile(e){const t=e.active_profile||"default";return e.profiles?.[t]||{}}syncLegacyFields(e){const t=this.normalizeProfiles(e.profiles),i=e.active_profile?.trim()||Object.keys(t)[0]||"default",o=t[i]?t:{...t,[i]:{}},s=this.getResolvedActiveProfile({...e,profiles:o,active_profile:i});return{...e,lang:e.lang||"en_US",active_profile:i,profiles:o,presets:this.normalizePresets(e.presets),api_key:s.api_key,base_url:s.base_url,models:s.models?this.normalizeModels(s.models):DEFAULT_MODELS}}sanitizeBackupLabel(e){return(e||"").trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)}getBackupDir(){return f(this.configDir,"backups")}getSecretsPath(){return f(this.configDir,"secrets.enc")}getSecretsBackupPath(e){return e.replace(/\.yaml$/,".secrets.enc")}snapshotSecrets(t){const i=this.getSecretsPath();if(e(i))try{l(i,this.getSecretsBackupPath(t))}catch(e){m.logError("ConfigManager.snapshotSecrets",e)}}restoreSecretsSnapshot(t){const i=this.getSecretsBackupPath(t);if(e(i))try{l(i,this.getSecretsPath())}catch(e){m.logError("ConfigManager.restoreSecretsSnapshot",e)}}static getInstance(){return ConfigManager.instance||(ConfigManager.instance=new ConfigManager),ConfigManager.instance}ensureConfigDir(){e(this.configDir)||t(this.configDir,{recursive:!0})}loadConfig(){try{if(e(this.configPath)){const e=i(this.configPath,"utf-8"),t=p.load(e),o=this.migrateOldConfig(t||{lang:"en_US"}),s=this.hydrateSecretsFromStore(o);return(this.needsMigration(t)||this.hasInlineSecrets(t))&&(this.backupConfig(),this.atomicWrite(this.configPath,p.dump(this.extractSecretsForPersistence(s)))),s}}catch(e){m.warn("Failed to load config, using defaults:",e),m.logError("ConfigManager.loadConfig",e)}return this.createDefaultConfig()}hasInlineSecrets(e){if(!e||"object"!=typeof e)return!1;const t=e;if("string"==typeof t.api_key&&t.api_key)return!0;if(t.profiles&&"object"==typeof t.profiles)for(const e of Object.values(t.profiles))if(e&&"object"==typeof e&&"string"==typeof e.api_key&&e.api_key)return!0;return!1}needsMigration(e){return!(!e||"object"!=typeof e)&&("plan"in e||!("profiles"in e)||!("active_profile"in e)||!("presets"in e))}migrateOldConfig(e){if(!e||"object"!=typeof e)return this.createDefaultConfig();const t=e,{plan:i,...o}=t,s=this.normalizeProfiles(o.profiles),r=this.normalizeProfile({api_key:"string"==typeof o.api_key?o.api_key:void 0,base_url:"string"==typeof o.base_url?o.base_url:void 0,models:o.models}),n=Object.keys(s).length>0?s:{[DEFAULT_PROFILE_NAME]:r},a="string"==typeof o.active_profile&&o.active_profile.trim()?o.active_profile.trim():Object.keys(n)[0]||"default";return this.syncLegacyFields({lang:"string"==typeof o.lang&&o.lang?o.lang:"en_US",active_profile:a,profiles:n,presets:this.normalizePresets(o.presets)})}atomicWrite(t,i){const n=`${t}.tmp`;try{o(n,i,"utf-8"),s(n,t)}catch(t){if(e(n))try{r(n)}catch{}throw t}}backupConfig(){if(!e(this.configPath))return;const s=this.getBackupDir();e(s)||t(s,{recursive:!0});const r=(new Date).toISOString().replace(/[:.]/g,"-"),n=f(s,`config-${r}.yaml`);try{const e=i(this.configPath,"utf-8");o(n,e,"utf-8"),this.snapshotSecrets(n),this.rotateBackups(s,10,30)}catch(e){m.logError("ConfigManager.backupConfig",e)}}rotateBackups(t,i,o){try{const s=Date.now()-24*o*60*60*1e3,a=n(t).filter(e=>e.startsWith("config-")&&e.endsWith(".yaml")).map(e=>({name:e,path:f(t,e),mtime:c(f(t,e)).mtime})).sort((e,t)=>t.mtime.getTime()-e.mtime.getTime()),l=new Set;a.slice(i).forEach(e=>l.add(e.path)),a.forEach(e=>{e.mtime.getTime()<s&&l.add(e.path)});for(const t of l){let i=!1;try{r(t),i=!0}catch(e){m.logError("ConfigManager.rotateBackups",e)}if(i){const i=this.getSecretsBackupPath(t);if(e(i))try{r(i)}catch(e){m.logError("ConfigManager.rotateBackups.secrets",e)}}}}catch(e){m.logError("ConfigManager.rotateBackups",e)}}saveConfig(e){try{this.ensureConfigDir(),this.backupConfig();const t=this.syncLegacyFields(this.migrateOldConfig(e||this.config)),i=this.extractSecretsForPersistence(t),o=p.dump(i);this.atomicWrite(this.configPath,o),this.config=t}catch(e){throw m.error("Failed to save config:",e),m.logError("ConfigManager.saveConfig",e),e}}extractSecretsForPersistence(e){const t={...e.profiles||{}},i=[];for(const[e,o]of Object.entries(t))o?.api_key&&(d.setApiKey(e,o.api_key),i.push(e));for(const e of i){const{api_key:i,...o}=t[e];t[e]=o}const o={...e,profiles:t};return delete o.api_key,o}hydrateSecretsFromStore(e){const t={...e.profiles||{}};for(const[e,i]of Object.entries(t)){if(i?.api_key)continue;const o=d.getApiKey(e);o&&(t[e]={...i,api_key:o})}return{...e,profiles:t}}getConfig(){return this.syncLegacyFields({...this.config})}updateConfig(e){this.saveConfig({...this.config,...e})}isFirstRun(){return!e(this.configPath)}getLang(){return this.config.lang||"en_US"}setLang(e){this.updateConfig({lang:e})}getActiveProfileName(){return this.config.active_profile||"default"}listProfiles(){return Object.keys(this.config.profiles||{}).sort()}getProfile(e=this.getActiveProfileName()){const t=this.config.profiles?.[e]||{};return{...t.api_key?{api_key:t.api_key}:{},...t.base_url?{base_url:t.base_url}:{},models:t.models?this.normalizeModels(t.models):DEFAULT_MODELS,...t.tool_models&&Object.keys(t.tool_models).length>0?{tool_models:this.normalizeToolModels(t.tool_models)}:{}}}createProfile(e,t=this.getActiveProfileName()){const i=this.getProfile(t),o={...this.config.profiles||{},[e]:{...i.api_key?{api_key:i.api_key}:{},...i.base_url?{base_url:i.base_url}:{},models:this.normalizeModels(i.models)}};this.saveConfig({...this.config,profiles:o})}setActiveProfile(e){if(!this.config.profiles?.[e])throw new Error(`Profile not found: ${e}`);this.saveConfig({...this.config,active_profile:e})}updateProfile(e,t){const i=this.config.profiles?.[e]||{},o=t.models?this.normalizeModels({...i.models,...t.models}):i.models?this.normalizeModels(i.models):void 0,s={...i,...void 0!==t.api_key?{api_key:t.api_key}:{},...void 0!==t.base_url?{base_url:t.base_url}:{},...o?{models:o}:{}},r={...this.config.profiles||{},[e]:s};this.saveConfig({...this.config,profiles:r})}deleteProfile(e){const t={...this.config.profiles||{}};if(!t[e])return;const i=Object.keys(t).filter(t=>t!==e);if(0===i.length)throw new Error("At least one profile must remain");delete t[e];const o=this.getActiveProfileName()===e?i[0]:this.getActiveProfileName();this.saveConfig({...this.config,profiles:t,active_profile:o})}getApiKey(){return this.config.profiles?.[this.getActiveProfileName()]?.api_key}setApiKey(e){this.updateProfile(this.getActiveProfileName(),{api_key:e})}revokeApiKey(){const e=this.config.profiles?.[this.getActiveProfileName()]||{},{api_key:t,...i}=e,o={...this.config.profiles||{},[this.getActiveProfileName()]:i};try{d.deleteApiKey(this.getActiveProfileName())}catch(e){m.logError("ConfigManager.revokeApiKey",e);try{d.deleteAll()}catch(e){m.logError("ConfigManager.revokeApiKey.deleteAll",e)}}this.saveConfig({...this.config,profiles:o})}getApiKeyFingerprint(){try{return d.fingerprint(this.getActiveProfileName())}catch{return""}}getModels(){const e=this.config.profiles?.[this.getActiveProfileName()]?.models;return e?this.normalizeModels(e):DEFAULT_MODELS}setModels(e){this.updateProfile(this.getActiveProfileName(),{models:this.normalizeModels(e)})}updateModels(e){this.setModels(this.normalizeModels({...this.getModels(),...e}))}getModelsForTool(e){const t=this.getModels(),i=this.config.profiles?.[this.getActiveProfileName()]?.tool_models?.[e];return i?this.normalizeModels({...t,...i}):t}setToolModel(e,t){const i=this.getActiveProfileName(),o=this.config.profiles?.[i]||{},s={...o.tool_models||{}};t&&0!==Object.keys(t).length?s[e]=t:delete s[e];const r={...o};Object.keys(s).length>0?r.tool_models=s:delete r.tool_models;const n={...this.config.profiles||{},[i]:r};this.saveConfig({...this.config,profiles:n})}getCustomPresets(){return{...this.config.presets||{}}}saveCustomPreset(e,t){const i={...this.config.presets||{},[e]:{models:this.normalizeModels(t),updated_at:(new Date).toISOString()}};this.saveConfig({...this.config,presets:i})}deleteCustomPreset(e){const t={...this.config.presets||{}};t[e]&&(delete t[e],this.saveConfig({...this.config,presets:t}))}listBackups(){const t=this.getBackupDir();return e(t)?n(t).filter(e=>e.startsWith("config-")&&e.endsWith(".yaml")).map(e=>{const i=f(t,e);return{name:e,path:i,mtimeMs:c(i).mtimeMs}}).sort((e,t)=>t.mtimeMs-e.mtimeMs):[]}createBackup(s){this.ensureConfigDir();const r=this.getBackupDir();e(r)||t(r,{recursive:!0});const n=(new Date).toISOString().replace(/[:.]/g,"-"),a=this.sanitizeBackupLabel(s),c=f(r,a?`config-${n}-${a}.yaml`:`config-${n}.yaml`),l=e(this.configPath)?i(this.configPath,"utf-8"):p.dump(this.getConfig());return o(c,l,"utf-8"),this.snapshotSecrets(c),this.rotateBackups(r,10,30),c}restoreBackup(t){if(!t||"."===t||".."===t||/[/\\]|\.\./.test(t))throw new Error(`Invalid backup name: ${t}`);const o=this.getBackupDir(),s=f(o,t);if(!e(s))throw new Error(`Backup not found: ${t}`);const r=i(s,"utf-8"),n=p.load(r),a=this.getSecretsBackupPath(s),c=e(a),l=this.hasInlineSecrets(n);if(!c&&!l)throw new Error(y.t("config.backup_companion_missing",{path:a}));c&&this.restoreSecretsSnapshot(s);const g=this.migrateOldConfig(n||this.createDefaultConfig()),h=c?this.hydrateSecretsFromStore(g):g;this.saveConfig(h)}getBaseUrl(){return this.runtimeBaseUrl||this.config.profiles?.[this.getActiveProfileName()]?.base_url||DEFAULT_BASE_URL}setBaseUrl(e,t=!1){this.runtimeBaseUrl=e,t&&this.updateProfile(this.getActiveProfileName(),{base_url:e})}resetBaseUrl(){this.runtimeBaseUrl=void 0;const e=this.config.profiles?.[this.getActiveProfileName()]||{},{base_url:t,...i}=e,o={...this.config.profiles||{},[this.getActiveProfileName()]:i};this.saveConfig({...this.config,profiles:o})}}export const configManager=ConfigManager.getInstance();
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell 环境变量里的 ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL 会覆盖 vibecli 写进
|
|
3
|
+
* settings.json 的凭据,导致"改了配置却不生效"。这里统一负责把它们清掉:
|
|
4
|
+
* CLI 启动时检测一次(见 command.ts),给 Claude Code 写配置前再兜底一次。
|
|
5
|
+
*/
|
|
6
|
+
export declare const ANTHROPIC_ENV_VARS: readonly ["ANTHROPIC_API_KEY", "ANTHROPIC_BASE_URL"];
|
|
7
|
+
/**
|
|
8
|
+
* 获取当前 shell 的 rc 文件路径(Windows 不使用 rc 文件,返回 null)。
|
|
9
|
+
*/
|
|
10
|
+
export declare function getShellRcFilePath(): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* 从当前 shell 的 rc 文件里移除 ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL 的 export 行。
|
|
13
|
+
* 返回 rc 文件是否被修改。
|
|
14
|
+
*/
|
|
15
|
+
export declare function cleanupShellRcEnvVars(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 检测并清除环境中的 ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL:
|
|
18
|
+
* 1. 从当前 shell 的 rc 文件删掉对应的 export 行(持久来源);
|
|
19
|
+
* 2. 从本进程 process.env 删除——vibecli 会以子进程启动各工具,
|
|
20
|
+
* 不清掉的话残留变量仍会盖过刚写好的配置文件。
|
|
21
|
+
* 返回被清除的变量名(未检测到时为空数组)。
|
|
22
|
+
*/
|
|
23
|
+
export declare function cleanupAnthropicEnvVars(): string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{existsSync as e,readFileSync as r,writeFileSync as n}from"fs";import{join as t}from"path";import{logger as o}from"../utils/logger.js";import{toolHome as s}from"./tools/types.js";export const ANTHROPIC_ENV_VARS=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL"];export function getShellRcFilePath(){if("win32"===process.platform)return null;const e=s();switch((process.env.SHELL||"").split("/").pop()||""){case"bash":return t(e,".bashrc");case"zsh":return t(e,".zshrc");case"fish":return t(e,".config","fish","config.fish");default:return t(e,".profile")}}export function cleanupShellRcEnvVars(){if("win32"===process.platform)return!1;try{const t=getShellRcFilePath();if(!t||!e(t))return!1;let s=r(t,"utf-8");const l=s,c=[/^\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 c)s=s.replace(e,"");if(s!==l)return n(t,s,"utf-8"),o.info(`Cleaned up ANTHROPIC_* environment variables from ${t}`),!0}catch(e){o.warn("Failed to cleanup shell environment variables:",e),o.logError("envCleanup.cleanupShellRcEnvVars",e)}return!1}export function cleanupAnthropicEnvVars(){const e=ANTHROPIC_ENV_VARS.filter(e=>!!process.env[e]);if(0===e.length)return[];cleanupShellRcEnvVars();for(const r of e)delete process.env[r];return[...e]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-cleanup.js","sourceRoot":"","sources":["../../src/lib/env-cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/i18n.d.ts
CHANGED
|
@@ -16,5 +16,11 @@ declare class I18n {
|
|
|
16
16
|
private loadSavedLocale;
|
|
17
17
|
loadFromConfig(locale: string): void;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* 探测系统语言:中文系统返回 zh_CN,其余一律 en_US。
|
|
21
|
+
* POSIX 依次看 LC_ALL / LC_MESSAGES / LANG / LANGUAGE;Windows 通常没有
|
|
22
|
+
* 这些环境变量,回退到 Intl(跟随操作系统区域设置)。
|
|
23
|
+
*/
|
|
24
|
+
export declare function detectSystemLang(): 'zh_CN' | 'en_US';
|
|
19
25
|
export { I18n };
|
|
20
26
|
export declare const i18n: I18n;
|
package/dist/lib/i18n.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFileSync as t,existsSync as
|
|
1
|
+
import{readFileSync as t,existsSync as e,readdirSync as s}from"fs";import{join as o,dirname as a}from"path";import{fileURLToPath as r}from"url";import{logger as n}from"../utils/logger.js";class l{static instance;currentLocale="en_US";translations=new Map;fallbackLocale="en_US";localesDir;constructor(){const t=r(import.meta.url),e=a(t);this.localesDir=o(e,"..","locales"),this.loadTranslations(),this.loadSavedLocale()}static getInstance(){return l.instance||(l.instance=new l),l.instance}loadTranslations(){try{if(!e(this.localesDir))return void n.warn(`Locales directory not found at ${this.localesDir}`);const a=s(this.localesDir).filter(t=>t.endsWith(".json"));if(0===a.length)return void n.warn("No locale files found in locales directory");for(const e of a){const s=e.replace(".json",""),a=o(this.localesDir,e);try{const e=t(a,"utf-8"),o=JSON.parse(e);this.translations.set(s,o)}catch(t){n.warn(`Failed to load locale file ${e}:`,t)}}const r=process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES;if(r){const t=r.split(".")[0].replace("_","-");if(this.translations.has(t))this.currentLocale=t;else{const e=t.split("-")[0],s=Array.from(this.translations.keys()).find(t=>t.startsWith(e+"_"));s?this.currentLocale=s:"zh"===e?this.currentLocale="zh_CN":"en"===e&&(this.currentLocale="en_US")}}}catch(t){n.warn("Failed to load translations:",t)}}setLocale(t){this.translations.has(t)?(this.currentLocale=t,this.saveLocale()):n.warn(`Locale '${t}' not supported, falling back to '${this.currentLocale}'`)}getLocale(){return this.currentLocale}getAvailableLocales(){return Array.from(this.translations.keys())}translate(t,e){const s=t.split(".");let o=this.translations.get(this.currentLocale);for(const e of s){if(!o||"object"!=typeof o||!(e in o)){o=this.translations.get(this.fallbackLocale);for(const e of s){if(!o||"object"!=typeof o||!(e in o))return t;o=o[e]}break}o=o[e]}return"string"!=typeof o?t:e?o.replace(/\{\{(\w+)\}\}/g,(t,s)=>e[s]||t):o}t(t,e){return this.translate(t,e)}saveLocale(){}loadSavedLocale(){}loadFromConfig(t){this.translations.has(t)&&(this.currentLocale=t)}}export function detectSystemLang(){const t=process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||process.env.LANGUAGE||"";let e="";try{e=Intl.DateTimeFormat().resolvedOptions().locale||""}catch{}return`${t} ${e}`.toLowerCase().split(/[\s:;,]+/).some(t=>"zh"===t||t.startsWith("zh-")||t.startsWith("zh_"))?"zh_CN":"en_US"}export{l as I18n};export const i18n=l.getInstance();
|
package/dist/lib/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/secret-store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as e,mkdirSync as t,readFileSync as r,writeFileSync as s,renameSync as o,unlinkSync as c,chmodSync as i}from"fs";import{join as n,dirname as a}from"path";import{homedir as p,hostname as h,userInfo as l}from"os";import{createCipheriv as u,createDecipheriv as f,randomBytes as y,scryptSync as d,createHash as S}from"crypto";import{logger as g}from"../utils/logger.js";const m="aes-256-gcm";export class SecretStoreDecryptError extends Error{cause;constructor(e,t){super(e),this.cause=t,this.name="SecretStoreDecryptError"}}function
|
|
1
|
+
import{existsSync as e,mkdirSync as t,readFileSync as r,writeFileSync as s,renameSync as o,unlinkSync as c,chmodSync as i}from"fs";import{join as n,dirname as a}from"path";import{homedir as p,hostname as h,userInfo as l}from"os";import{createCipheriv as u,createDecipheriv as f,randomBytes as y,scryptSync as d,createHash as S}from"crypto";import{logger as g}from"../utils/logger.js";const m="aes-256-gcm";export class SecretStoreDecryptError extends Error{cause;constructor(e,t){super(e),this.cause=t,this.name="SecretStoreDecryptError"}}function v(e,t=32768){const r=`${l().username}:${h()}:vibecli-secret-store`;return d(r,e,32,{N:t,maxmem:67108864})}export class SecretStore{static instance;secretsDir;secretsPath;lastDecryptError=null;constructor(){this.secretsDir=function(){const e=process.env.VIBECLI_CONFIG_DIR;if(e&&e.trim())return e.trim();const t=process.env.VIBECLI_TEST_HOME;return t&&t.trim()?n(t.trim(),".vibecli"):n(p(),".vibecli")}(),this.secretsPath=n(this.secretsDir,"secrets.enc")}static getInstance(){return SecretStore.instance||(SecretStore.instance=new SecretStore),SecretStore.instance}ensureDir(){const r=a(this.secretsPath);e(r)||t(r,{recursive:!0})}writeAtomic(t){const r=`${this.secretsPath}.tmp`;try{s(r,t,{encoding:"utf-8",mode:384}),o(r,this.secretsPath);try{i(this.secretsPath,384)}catch{}}catch(t){if(e(r))try{c(r)}catch{}throw t}}readEnvelope(){if(!e(this.secretsPath))return null;try{const e=r(this.secretsPath,"utf-8"),t=JSON.parse(e);return function(e){if(!e||"object"!=typeof e)return!1;const t=e;return(2===t.version||1===t.version)&&"string"==typeof t.iv&&"string"==typeof t.salt&&"string"==typeof t.auth_tag&&"string"==typeof t.cipher_text}(t)?t:null}catch(e){return g.logError("SecretStore.readEnvelope",e),null}}decrypt(e){const t=Buffer.from(e.salt,"base64"),r=Buffer.from(e.iv,"base64"),s=Buffer.from(e.auth_tag,"base64"),o=Buffer.from(e.cipher_text,"base64"),c=v(t,1===e.version?16384:32768),i=f(m,c,r);i.setAuthTag(s);try{const e=Buffer.concat([i.update(o),i.final()]);return JSON.parse(e.toString("utf-8"))}catch(e){throw new SecretStoreDecryptError("Failed to decrypt secret envelope (host or user identity may have changed)",e)}}encrypt(e){const t=y(16),r=y(12),s=v(t),o=u(m,s,r),c=Buffer.from(JSON.stringify(e),"utf-8"),i=Buffer.concat([o.update(c),o.final()]),n=o.getAuthTag();return{version:2,iv:r.toString("base64"),salt:t.toString("base64"),auth_tag:n.toString("base64"),cipher_text:i.toString("base64")}}loadRecord(){const e=this.readEnvelope();if(!e)return{};try{const t=this.decrypt(e);if(1===e.version&&t.api_keys&&Object.keys(t.api_keys).length>0)try{this.persistRecord(t)}catch(e){g.logError("SecretStore.upgradeEnvelope",e)}return t}catch(e){throw e instanceof SecretStoreDecryptError&&(this.lastDecryptError=e,g.warn("SecretStore decrypt failed - identity drift suspected; refusing to drop existing envelope")),g.logError("SecretStore.loadRecord",e),e}}safeLoadRecord(){try{return this.loadRecord()}catch{return{}}}persistRecord(e){this.ensureDir();const t=this.encrypt(e);this.writeAtomic(JSON.stringify(t,null,2))}isAvailable(){return!0}getLastDecryptError(){return this.lastDecryptError}fingerprint(e){const t=this.getApiKey(e);return t?S("sha256").update(t).digest("hex").slice(0,12):""}getApiKey(e){const t=this.safeLoadRecord();return t.api_keys?.[e]}setApiKey(t,r){const s=this.safeLoadRecord();if(this.lastDecryptError&&e(this.secretsPath))throw new SecretStoreDecryptError("Refusing to overwrite an undecryptable secrets envelope; remove it explicitly via deleteAll() or delete ~/.vibecli/secrets.enc to proceed",this.lastDecryptError);s.api_keys={...s.api_keys||{},[t]:r},this.persistRecord(s),this.lastDecryptError=null}deleteApiKey(t){const r=this.safeLoadRecord();if(this.lastDecryptError&&e(this.secretsPath))throw new SecretStoreDecryptError("Refusing to mutate an undecryptable secrets envelope; remove it explicitly via deleteAll() or delete ~/.vibecli/secrets.enc to proceed",this.lastDecryptError);if(!r.api_keys||!(t in r.api_keys))return;const{[t]:s,...o}=r.api_keys;r.api_keys=o,this.persistRecord(r)}listProfilesWithKeys(){const e=this.safeLoadRecord();return Object.keys(e.api_keys||{}).sort()}deleteAll(){if(e(this.secretsPath))try{c(this.secretsPath)}catch(e){g.logError("SecretStore.deleteAll",e)}}}export const secretStore=SecretStore.getInstance();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type VibecliModels } from './config.js';
|
|
2
2
|
import { type BackupEntry, type RestoreResult } from './tools/backup.js';
|
|
3
3
|
export interface ToolRestoreEntry {
|
|
4
4
|
file: string;
|
|
@@ -29,7 +29,7 @@ export declare class ToolManager {
|
|
|
29
29
|
installTool(toolName: string): Promise<void>;
|
|
30
30
|
getToolConfig(toolName: string): any;
|
|
31
31
|
updateToolConfig(toolName: string, config: any): void;
|
|
32
|
-
loadPrivateConfig(toolName: string, apiKey: string, models:
|
|
32
|
+
loadPrivateConfig(toolName: string, apiKey: string, models: VibecliModels): void;
|
|
33
33
|
unloadPrivateConfig(toolName: string): void;
|
|
34
34
|
detectCurrentConfig(toolName: string): {
|
|
35
35
|
apiKey: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{join as o}from"path";import{homedir as e}from"os";import{openCodeManager as n}from"../opencode-manager.js";import{backupBeforeWrite as
|
|
1
|
+
import{join as o}from"path";import{homedir as e}from"os";import{openCodeManager as n}from"../opencode-manager.js";import{backupBeforeWrite as i}from"./backup.js";import{pickModel as t}from"./types.js";import{getToolDefaultModel as a}from"../model-registry.js";const d=o(e(),".config","opencode","opencode.json");export const opencodeAdapter={name:"opencode",displayName:"OpenCode",command:"opencode",installCommand:"npm install -g opencode-ai",configPath:d,hidden:!0,loadPrivateConfig(o){i(d);const e=t(o.models,a("opencode"));n.loadPrivateConfig(o.apiKey,{...o.models,opus:e,haiku:e})},unloadPrivateConfig(){i(d),n.unloadPrivateConfig()},detectCurrentConfig:()=>n.detectCurrentConfig(),getConfig:()=>n.getConfig(),updateConfig(o){n.saveConfig(o)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/tools/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,SAAS,EAA2C,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAEnF,uDAAuD;AACvD,MAAM,CAAC,MAAM,eAAe,GAAgB;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,UAAU;IACnB,cAAc,EAAE,4BAA4B;IAC5C,UAAU,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/tools/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,SAAS,EAA2C,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAEnF,uDAAuD;AACvD,MAAM,CAAC,MAAM,eAAe,GAAgB;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,UAAU;IACnB,cAAc,EAAE,4BAA4B;IAC5C,UAAU,EAAE,kBAAkB;IAC9B,qDAAqD;IACrD,gBAAgB;IAChB,MAAM,EAAE,IAAI;IAEZ,iBAAiB,CAAC,GAAqB;QACnC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACtC,6EAA6E;QAC7E,mEAAmE;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,mBAAmB;QACf,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACtC,eAAe,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IACD,mBAAmB;QACf,OAAO,eAAe,CAAC,mBAAmB,EAAE,CAAC;IACjD,CAAC;IACD,SAAS;QACL,OAAO,eAAe,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;IACD,YAAY,CAAC,MAAe;QACxB,eAAe,CAAC,UAAU,CAAC,MAA0D,CAAC,CAAC;IAC3F,CAAC;CACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { VibecliModels } from '../config.js';
|
|
2
2
|
/**
|
|
3
|
-
* Home directory the tool adapters write under. Honors `
|
|
3
|
+
* Home directory the tool adapters write under. Honors `VIBECLI_TEST_HOME` (the
|
|
4
4
|
* same override the config layer uses) so tests can redirect ~/.codex, ~/.hermes,
|
|
5
5
|
* etc. into a temp dir instead of the real home directory.
|
|
6
6
|
*/
|
|
@@ -13,7 +13,7 @@ export declare function toolHome(): string;
|
|
|
13
13
|
export interface ToolApplyContext {
|
|
14
14
|
apiKey: string;
|
|
15
15
|
baseUrl: string;
|
|
16
|
-
models:
|
|
16
|
+
models: VibecliModels;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* One self-contained integration for a downstream coding tool.
|
|
@@ -58,14 +58,14 @@ export interface ToolAdapter {
|
|
|
58
58
|
* Pick the single "main" model for tools that only take one model id.
|
|
59
59
|
* Falls back through the canonical slots so a partially-filled map still works.
|
|
60
60
|
*/
|
|
61
|
-
export declare function primaryModel(models:
|
|
61
|
+
export declare function primaryModel(models: VibecliModels): string;
|
|
62
62
|
/**
|
|
63
63
|
* Pick the model for a non-Claude tool. If the user has customized their primary
|
|
64
64
|
* (opus) model away from the built-in Anthropic default, use that; otherwise fall
|
|
65
65
|
* back to `fallback` (the non-Claude default, e.g. gpt-5.5) — since the Anthropic
|
|
66
66
|
* default model name is meaningless to these OpenAI-compatible tools.
|
|
67
67
|
*/
|
|
68
|
-
export declare function pickModel(models:
|
|
68
|
+
export declare function pickModel(models: VibecliModels, fallback: string): string;
|
|
69
69
|
/**
|
|
70
70
|
* Normalize a base URL into an OpenAI-compatible endpoint by ensuring a version
|
|
71
71
|
* suffix. Most non-Anthropic tools here speak the OpenAI/Responses wire format
|
package/dist/lib/tools/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{homedir as o}from"os";import{getDefaultModels as r}from"../model-registry.js";export function toolHome(){const r=process.env.
|
|
1
|
+
import{homedir as o}from"os";import{getDefaultModels as r}from"../model-registry.js";export function toolHome(){const r=process.env.VIBECLI_TEST_HOME;return r&&r.trim()?r.trim():o()}export function primaryModel(o){return o.opus||o.sonnet||o.reasoning||o.haiku}export function pickModel(o,t){const e=primaryModel(o);return e&&e!==r().opus?e:t}export function withV1(o){const r=(o||"").replace(/\/+$/,"");return/\/v\d+$/.test(r)?r:`${r}/v1`}
|
package/dist/lib/wizard.d.ts
CHANGED
|
@@ -9,6 +9,11 @@ export declare class Wizard {
|
|
|
9
9
|
promptWithHints(questions: any[]): Promise<any>;
|
|
10
10
|
printBanner(): void;
|
|
11
11
|
resetScreen(): void;
|
|
12
|
+
/**
|
|
13
|
+
* 结束语按实际已配置的工具生成:列出已灌入 API 配置的工具命令,
|
|
14
|
+
* 一个都没配置时退回通用提示(不再写死 Claude Code)。
|
|
15
|
+
*/
|
|
16
|
+
private printGoodbye;
|
|
12
17
|
runFirstTimeSetup(): Promise<void>;
|
|
13
18
|
configLanguage(): Promise<void>;
|
|
14
19
|
private buildPresetChoices;
|
package/dist/lib/wizard.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"inquirer";import t from"chalk";import a from"ora";import{configManager as o,DEFAULT_MODELS as i}from"./config.js";import{getPresets as n,resolvePreset as r,getToolDefaultModel as s}from"./model-registry.js";import{toolManager as l,SUPPORTED_TOOLS as c}from"./tool-manager.js";import{i18n as d}from"./i18n.js";import{createBorderLine as p,createContentLine as m}from"../utils/string-width.js";import{validateApiKey as u,fetchModels as g}from"./api-validator.js";import{readFileSync as w}from"fs";import{dirname as _,join as f}from"path";import{fileURLToPath as y}from"url";const h=_(y(import.meta.url)),z=t.hex("#FF8700");export class Wizard{static instance;BOX_WIDTH=63;apiKeyValid=!1;constructor(){}static getInstance(){return Wizard.instance||(Wizard.instance=new Wizard),Wizard.instance}createBox(e){console.log(z.bold("\n"+p("╔","╗","═",this.BOX_WIDTH))),console.log(z.bold(m(e,"║","║",this.BOX_WIDTH,"center"))),console.log(z.bold(p("╚","╝","═",this.BOX_WIDTH))),console.log("")}showOperationHints(){const e=[t.gray(d.t("wizard.hint_navigate")),t.gray(d.t("wizard.hint_confirm"))];console.log(t.gray("💡 ")+e.join(t.gray(" | "))+"\n")}async promptWithHints(t){this.showOperationHints();const a=t.map(e=>"list"!==e.type||e.pageSize?e:{...e,pageSize:20});return e.prompt(a)}printBanner(){const e=65,t=d.t("wizard.banner_subtitle"),a=m(t,"║","║",e,"center"),o=m("","║","║",e,"center"),i=m(`API Helper v${function(){try{return JSON.parse(w(f(h,"..","..","package.json"),"utf-8")).version}catch{return"0.0.0"}}()}`,"║","║",e,"center"),n=[" ▄▀▄ █▀▄ █ █▄█ ██▀ █ █▀▄ ██▀ █▀▄ "," █▀█ █▀ █ █ █ █▄▄ █▄▄ █▀ █▄▄ █▀▄ "].map(t=>m(t,"║","║",e,"center")),r=[p("╔","╗","═",e),o,...n,o,i,a,p("╚","╝","═",e)];console.log(z.bold("\n"+r.join("\n")))}resetScreen(){console.clear(),this.printBanner()}async runFirstTimeSetup(){this.resetScreen(),console.log(z.bold("\n"+d.t("wizard.welcome"))),console.log(t.gray(d.t("wizard.privacy_note")+"\n")),await this.configLanguage(),await this.configApiKey(),o.getApiKey()?await this.selectAndConfigureTool(!0):console.log(t.red("\n"+d.t("wizard.api_key_required")))}async configLanguage(){for(;;){this.resetScreen(),this.createBox(d.t("wizard.select_language"));const a=d.getLocale(),{language:i}=await this.promptWithHints([{type:"list",name:"language",message:"✨ "+d.t("wizard.select_language"),choices:[{name:"[EN] English"+("en_US"===a?t.green(" ✓ ("+d.t("wizard.current_active")+")"):""),value:"en_US"},{name:"[CN] 中文"+("zh_CN"===a?t.green(" ✓ ("+d.t("wizard.current_active")+")"):""),value:"zh_CN"},new e.Separator,{name:"<- "+d.t("wizard.nav_return"),value:"back"},{name:"x "+d.t("wizard.nav_exit"),value:"exit"}],default:"zh_CN"}]);if("exit"===i)console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0);else if("back"===i)return;return o.setLang(i),void d.setLocale(i)}}buildPresetChoices(){const a=n(),o=a.filter(e=>e.recommended),i=a.filter(e=>!e.recommended),r=e=>({name:(d.t(e.name)!==e.name?d.t(e.name):e.name)+(e.models?t.gray(` [H:${e.models.haiku} S:${e.models.sonnet} O:${e.models.opus}]`):""),value:{type:"preset",preset:e}}),s=[];return o.length>0&&(s.push(new e.Separator(t.hex("#FF8700")("── "+d.t("wizard.recommended")+" ──"))),s.push(...o.map(r))),i.length>0&&(s.push(new e.Separator(t.gray("── "+d.t("wizard.other_models")+" ──"))),s.push(...i.map(r))),s}async handleCustomModelInput(){const a=o.getModels(),{customMode:n}=await e.prompt([{type:"list",name:"customMode",message:d.t("wizard.custom_model_mode"),choices:[{name:d.t("wizard.custom_model_single"),value:"single"},{name:d.t("wizard.custom_model_per_role"),value:"per_role"}]}]);if("single"===n){const{customModel:t}=await e.prompt([{type:"input",name:"customModel",message:d.t("wizard.input_custom_model"),default:i.sonnet}]);o.setModels({haiku:t,sonnet:t,opus:t,reasoning:t})}else{const t=await e.prompt([{type:"input",name:"haiku",message:d.t("wizard.model_haiku"),default:a.haiku},{type:"input",name:"sonnet",message:d.t("wizard.model_sonnet"),default:a.sonnet},{type:"input",name:"opus",message:d.t("wizard.model_opus"),default:a.opus},{type:"input",name:"reasoning",message:d.t("wizard.model_reasoning"),default:a.reasoning}]);o.setModels(t)}console.log(t.green("\n✓ "+d.t("wizard.models_saved")))}async configModels(a){if(!o.getApiKey())return console.log(t.red("\n"+d.t("wizard.api_key_required"))),void await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}]);for(;;){this.resetScreen(),this.createBox(d.t("wizard.config_models"));const i=[...this.buildPresetChoices()];i.push(new e.Separator),i.push({name:"✏️ "+d.t("wizard.custom_model_input"),value:{type:"custom_input"}}),i.push(new e.Separator),i.push({name:"<- "+d.t("wizard.nav_return"),value:{type:"back"}}),i.push({name:"x "+d.t("wizard.nav_exit"),value:{type:"exit"}});const{modelChoice:n}=await this.promptWithHints([{type:"list",name:"modelChoice",message:d.t("wizard.select_model_config"),choices:i}]);if("exit"===n.type)console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0);else{if("back"===n.type)return;if("custom_input"===n.type)return await this.handleCustomModelInput(),void(a?.skipLoadPrompt||await this.promptLoadAfterModelConfig());if("preset"===n.type){const e=r(n.preset);return o.setModels(e),console.log(t.green("\n✓ "+d.t("wizard.models_saved"))),void(a?.skipLoadPrompt||await this.promptLoadAfterModelConfig())}}}}async promptLoadAfterModelConfig(){const{shouldLoad:t}=await e.prompt([{type:"list",name:"shouldLoad",message:d.t("wizard.load_config_now"),choices:[{name:d.t("wizard.load_config_yes"),value:!0},{name:d.t("wizard.load_config_later"),value:!1}]}]);t&&await this.selectAndConfigureTool()}async configApiKey(){for(;;){this.resetScreen(),this.createBox(d.t("wizard.input_api_key")),console.log(t.gray("\n💡 "+d.t("wizard.api_key_input_hint"))),console.log(t.gray(" "+d.t("wizard.api_key_get_hint",{url:"https://www.vibeapi.cn/console/token"}))),console.log();const{apiKey:i}=await e.prompt([{type:"password",name:"apiKey",message:d.t("wizard.input_your_api_key"),mask:"*"}]);if(!i||""===i.trim()){const{action:t}=await e.prompt([{type:"list",name:"action",message:d.t("wizard.select_action"),choices:[{name:d.t("wizard.retry_input"),value:"retry"},{name:"<- "+d.t("wizard.nav_return"),value:"back"}]}]);if("back"===t)return;continue}const n=a(d.t("wizard.validating_api_key")).start(),r=await u(i.trim());if(n.stop(),r.valid)return o.setApiKey(i.trim()),this.apiKeyValid=!0,void console.log(t.green("\n✓ "+d.t("wizard.api_key_valid")));{this.apiKeyValid=!1,"invalid_api_key"===r.error?console.log(t.red("\n✗ "+d.t("wizard.api_key_invalid"))):console.log(t.red("\n✗ "+d.t("wizard.api_key_network_error")));const{action:a}=await e.prompt([{type:"list",name:"action",message:d.t("wizard.select_action"),choices:[{name:d.t("wizard.retry_input"),value:"retry"},{name:"<- "+d.t("wizard.nav_return"),value:"back"}]}]);if("back"===a)return}}}async selectAndConfigureTool(a=!1){for(;;){this.resetScreen(),this.createBox(d.t("wizard.select_tool"));const o=l.getSupportedTools().map(e=>({name:e.displayName,value:e.name})),{tool:i}=await this.promptWithHints([{type:"list",name:"tool",message:"🛠️ "+d.t("wizard.select_tool"),choices:[...o,new e.Separator,{name:"<- "+d.t("wizard.nav_return"),value:"back"},{name:"x "+d.t("wizard.nav_exit"),value:"exit"}]}]);if("exit"===i)console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0);else if("back"===i)return;await this.configureTool(i,a)}}async configureTool(a,o=!1){const i=c[a];if(i){if(!l.isToolInstalled(a)){console.log(t.yellow("\n"+d.t("wizard.tool_not_installed",{tool:i.displayName})));const{install:o}=await e.prompt([{type:"confirm",name:"install",message:d.t("wizard.install_tool_confirm"),default:!0}]);if(!o)return;try{await l.installTool(a)}catch{return void console.log(t.red(d.t("wizard.install_failed")))}}o?await this.configureToolModel(a)&&await this.loadConfig(a):await this.showToolMenu(a)}}async showToolMenu(a){for(;;){this.resetScreen();const o=c[a];if(!o)return;this.createBox(o.displayName+" "+d.t("wizard.menu_title"));const{action:i}=await this.promptWithHints([{type:"list",name:"action",message:"⚙️ "+d.t("wizard.select_action"),choices:[{name:"📥 "+d.t("wizard.action_load_config",{tool:o.displayName}),value:"load"},{name:"📤 "+d.t("wizard.action_unload_config",{tool:o.displayName}),value:"unload"},{name:"↩️ "+d.t("wizard.action_restore_config",{tool:o.displayName}),value:"restore"},new e.Separator,{name:"<- "+d.t("wizard.nav_return"),value:"back"},{name:"x "+d.t("wizard.nav_exit"),value:"exit"}]}]);if("exit"===i)console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0);else{if("back"===i)return;"load"===i?await this.configureToolModel(a)&&await this.loadConfig(a):"unload"===i?await this.unloadConfig(a):"restore"===i&&await this.restoreConfig(a)}}}singleModelOverride(e){const t=e.trim();return/claude/i.test(t)?{opus:t}:{haiku:t,sonnet:t,opus:t,reasoning:t}}async configureToolModel(i){const n=c[i];if(!n)return!1;const l="claude-code"===i,p=s(i),m=l||!p?d.t("wizard.model_builtin_default"):p;this.resetScreen(),this.createBox(n.displayName+" · "+d.t("wizard.config_models"));const u=[{name:"✅ "+d.t("wizard.use_default_model",{model:m}),value:{type:"default"}},{name:"🌐 "+d.t("wizard.fetch_models_from_api"),value:{type:"fetch"}},...this.buildPresetChoices(),new e.Separator,{name:"✏️ "+d.t("wizard.input_custom_model"),value:{type:"custom"}},new e.Separator,{name:"<- "+d.t("wizard.nav_return"),value:{type:"back"}}],{choice:w}=await this.promptWithHints([{type:"list",name:"choice",message:d.t("wizard.select_tool_model",{tool:n.displayName}),choices:u}]);if("back"===w.type)return!1;if("default"===w.type)o.setToolModel(i,null);else if("preset"===w.type)o.setToolModel(i,r(w.preset));else if("custom"===w.type){const{model:t}=await e.prompt([{type:"input",name:"model",message:d.t("wizard.input_custom_model"),default:!l&&p?p:void 0}]),a=(t||"").trim();o.setToolModel(i,a?this.singleModelOverride(a):null)}else if("fetch"===w.type){const n=o.getApiKey();if(!n)return console.log(t.red("\n"+d.t("wizard.api_key_required"))),!1;const r=a(d.t("wizard.fetching_models")).start(),s=await g(n);let c;if(r.stop(),s.ok&&s.models.length>0){const{model:t}=await e.prompt([{type:"list",name:"model",message:d.t("wizard.select_fetched_model"),pageSize:20,choices:[...s.models,new e.Separator,{name:"<- "+d.t("wizard.nav_return"),value:"__back__"}]}]);if("__back__"===t)return!1;c=t}else{console.log(t.yellow("\n"+d.t("wizard.fetch_models_failed")));const{model:a}=await e.prompt([{type:"input",name:"model",message:d.t("wizard.input_custom_model"),default:!l&&p?p:void 0}]);c=(a||"").trim()}o.setToolModel(i,c?this.singleModelOverride(c):null)}return console.log(t.green("\n✓ "+d.t("wizard.models_saved"))),l&&console.log(t.gray("💡 "+d.t("wizard.claude_model_hint"))),!0}async loadConfig(i){const n=o.getApiKey(),r=o.getModelsForTool(i);if(!n)return console.log(t.red("\n"+d.t("wizard.api_key_required"))),console.log(t.yellow(d.t("wizard.please_config_api_key_first"))),void await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}]);if(!this.apiKeyValid){const o=a(d.t("wizard.validating_api_key")).start();if(!(await u(n)).valid)return o.fail(d.t("wizard.api_key_invalid")),console.log(t.red("\n"+d.t("wizard.please_reconfig_api_key"))),void await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}]);this.apiKeyValid=!0,o.stop()}const s=a(d.t("wizard.loading_config")).start();try{l.loadPrivateConfig(i,n,r),s.succeed(d.t("wizard.config_loaded",{tool:c[i]?.displayName||i}));const a=c[i]?.command;a&&console.log(t.green("\n"+d.t("wizard.run_tool_hint",{command:a})));const{nextAction:o}=await e.prompt([{type:"list",name:"nextAction",message:d.t("wizard.what_next"),choices:[{name:d.t("wizard.exit_and_start"),value:"exit"},{name:d.t("wizard.continue_config"),value:"continue"}]}]);"exit"===o&&(console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0))}catch(a){s.fail(d.t("wizard.config_failed")),console.log(t.red(a instanceof Error?a.message:String(a))),await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}])}}async unloadConfig(o){const{confirm:i}=await e.prompt([{type:"confirm",name:"confirm",message:d.t("wizard.confirm_unload_config",{tool:c[o]?.displayName||o}),default:!1}]);if(!i)return;const n=a(d.t("wizard.unloading_config")).start();try{l.unloadPrivateConfig(o),n.succeed(d.t("wizard.config_unloaded"));const{nextAction:a}=await e.prompt([{type:"list",name:"nextAction",message:d.t("wizard.what_next"),choices:[{name:d.t("wizard.exit_and_start"),value:"exit"},{name:d.t("wizard.continue_config"),value:"continue"}]}]);"exit"===a&&(console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0))}catch(a){n.fail(d.t("wizard.config_unload_failed")),console.log(t.red(a instanceof Error?a.message:String(a))),await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}])}}async restoreConfig(o){const i=c[o]?.displayName||o,{confirm:n}=await e.prompt([{type:"confirm",name:"confirm",message:d.t("wizard.confirm_restore_config",{tool:i}),default:!1}]);if(!n)return;const r=a(d.t("wizard.restoring_config")).start();try{const e=l.restorePrivateConfig(o).filter(e=>e.result.restored);0===e.length?r.warn(d.t("wizard.restore_no_backup")):(r.succeed(d.t("wizard.config_restored",{tool:i})),e.forEach(e=>console.log(t.gray(` ${e.file} ← ${e.result.from}`))))}catch(e){r.fail(d.t("wizard.config_restore_failed")),console.log(t.red(e instanceof Error?e.message:String(e)))}await e.prompt([{type:"input",name:"continue",message:d.t("wizard.press_enter")}])}async run(){const e=o.getConfig();if(e.api_key){const t=await u(e.api_key);this.apiKeyValid=t.valid}else this.apiKeyValid=!1;e.api_key&&this.apiKeyValid?await this.showMainMenu():await this.runFirstTimeSetup()}async showMainMenu(){for(;;){this.resetScreen();const a=o.getApiKey()||"",i=a.length>4?"sk-****"+a.slice(-4):"****";console.log(t.gray(` 🔑 API Key: ${i}`)+t.green(" ✓")),console.log("");const n=l.getSupportedTools().map(e=>({name:"🛠️ "+e.displayName,value:{type:"tool",tool:e.name}})),r=[new e.Separator(z("── "+d.t("wizard.select_tool")+" ──")),...n,new e.Separator(t.gray("── "+d.t("wizard.settings")+" ──")),{name:"🔑 "+d.t("wizard.menu_change_api_key"),value:{type:"apikey"}},{name:"🌐 "+d.t("wizard.menu_config_language"),value:{type:"language"}},new e.Separator,{name:"x "+d.t("wizard.nav_exit"),value:{type:"exit"}}],{action:s}=await this.promptWithHints([{type:"list",name:"action",message:"🛠️ "+d.t("wizard.select_tool"),choices:r}]);if("exit"===s.type)console.log(t.green("\n👋 "+d.t("wizard.goodbye_message"))),process.exit(0);else if("tool"===s.type)await this.configureTool(s.tool);else if("apikey"===s.type){await this.configApiKey();const e=o.getApiKey();if(e){const t=await u(e);this.apiKeyValid=t.valid}else this.apiKeyValid=!1}else"language"===s.type&&await this.configLanguage()}}}export const wizard=Wizard.getInstance();
|
|
1
|
+
import e from"inquirer";import t from"chalk";import a from"ora";import{configManager as i,DEFAULT_MODELS as o}from"./config.js";import{getPresets as n,resolvePreset as r,getToolDefaultModel as s}from"./model-registry.js";import{toolManager as l,SUPPORTED_TOOLS as d}from"./tool-manager.js";import{i18n as c,detectSystemLang as p}from"./i18n.js";import{createBorderLine as m,createContentLine as u}from"../utils/string-width.js";import{validateApiKey as g,fetchModels as w}from"./api-validator.js";import{readFileSync as _}from"fs";import{dirname as f,join as y}from"path";import{fileURLToPath as h}from"url";const z=f(h(import.meta.url)),v=t.hex("#FF8700");export class Wizard{static instance;BOX_WIDTH=63;apiKeyValid=!1;constructor(){}static getInstance(){return Wizard.instance||(Wizard.instance=new Wizard),Wizard.instance}createBox(e){console.log(v.bold("\n"+m("╔","╗","═",this.BOX_WIDTH))),console.log(v.bold(u(e,"║","║",this.BOX_WIDTH,"center"))),console.log(v.bold(m("╚","╝","═",this.BOX_WIDTH))),console.log("")}showOperationHints(){const e=[t.gray(c.t("wizard.hint_navigate")),t.gray(c.t("wizard.hint_confirm"))];console.log(t.gray("💡 ")+e.join(t.gray(" | "))+"\n")}async promptWithHints(t){this.showOperationHints();const a=t.map(e=>"list"!==e.type||e.pageSize?e:{...e,pageSize:20});return e.prompt(a)}printBanner(){const e=65,t=c.t("wizard.banner_subtitle"),a=u(t,"║","║",e,"center"),i=u("","║","║",e,"center"),o=u(`API Helper v${function(){try{return JSON.parse(_(y(z,"..","..","package.json"),"utf-8")).version}catch{return"0.0.0"}}()}`,"║","║",e,"center"),n=[" ▄▀▄ █▀▄ █ █▄█ ██▀ █ █▀▄ ██▀ █▀▄ "," █▀█ █▀ █ █ █ █▄▄ █▄▄ █▀ █▄▄ █▀▄ "].map(t=>u(t,"║","║",e,"center")),r=[m("╔","╗","═",e),i,...n,i,o,a,m("╚","╝","═",e)];console.log(v.bold("\n"+r.join("\n")))}resetScreen(){console.clear(),this.printBanner()}printGoodbye(){const e=l.getSupportedTools().filter(e=>{try{return Boolean(l.detectCurrentConfig(e.name).apiKey)}catch{return!1}});let a;if(e.length>0){const t=e.map(e=>e.command).join(" / ");a=c.t("wizard.goodbye_message_tools",{commands:t}),e.some(e=>"claude-code"===e.name)&&(a+=" "+c.t("wizard.goodbye_claude_hint"))}else a=c.t("wizard.goodbye_message");console.log(t.green("\n👋 "+a))}async runFirstTimeSetup(){const e="zh_CN"===p();e&&(i.setLang("zh_CN"),c.setLocale("zh_CN")),this.resetScreen(),console.log(v.bold("\n"+c.t("wizard.welcome"))),console.log(t.gray(c.t("wizard.privacy_note")+"\n")),e?console.log(t.gray(c.t("wizard.lang_auto_zh")+"\n")):await this.configLanguage(),await this.configApiKey(),i.getApiKey()?await this.selectAndConfigureTool(!0):console.log(t.red("\n"+c.t("wizard.api_key_required")))}async configLanguage(){for(;;){this.resetScreen(),this.createBox(c.t("wizard.select_language"));const a=c.getLocale(),{language:o}=await this.promptWithHints([{type:"list",name:"language",message:"✨ "+c.t("wizard.select_language"),choices:[{name:"[EN] English"+("en_US"===a?t.green(" ✓ ("+c.t("wizard.current_active")+")"):""),value:"en_US"},{name:"[CN] 中文"+("zh_CN"===a?t.green(" ✓ ("+c.t("wizard.current_active")+")"):""),value:"zh_CN"},new e.Separator,{name:"<- "+c.t("wizard.nav_return"),value:"back"},{name:"x "+c.t("wizard.nav_exit"),value:"exit"}],default:"zh_CN"}]);if("exit"===o)this.printGoodbye(),process.exit(0);else if("back"===o)return;return i.setLang(o),void c.setLocale(o)}}buildPresetChoices(){const a=n(),i=a.filter(e=>e.recommended),o=a.filter(e=>!e.recommended),r=e=>({name:(c.t(e.name)!==e.name?c.t(e.name):e.name)+(e.models?t.gray(` [H:${e.models.haiku} S:${e.models.sonnet} O:${e.models.opus}]`):""),value:{type:"preset",preset:e}}),s=[];return i.length>0&&(s.push(new e.Separator(t.hex("#FF8700")("── "+c.t("wizard.recommended")+" ──"))),s.push(...i.map(r))),o.length>0&&(s.push(new e.Separator(t.gray("── "+c.t("wizard.other_models")+" ──"))),s.push(...o.map(r))),s}async handleCustomModelInput(){const a=i.getModels(),{customMode:n}=await e.prompt([{type:"list",name:"customMode",message:c.t("wizard.custom_model_mode"),choices:[{name:c.t("wizard.custom_model_single"),value:"single"},{name:c.t("wizard.custom_model_per_role"),value:"per_role"}]}]);if("single"===n){const{customModel:t}=await e.prompt([{type:"input",name:"customModel",message:c.t("wizard.input_custom_model"),default:o.sonnet}]);i.setModels({haiku:t,sonnet:t,opus:t,reasoning:t})}else{const t=await e.prompt([{type:"input",name:"haiku",message:c.t("wizard.model_haiku"),default:a.haiku},{type:"input",name:"sonnet",message:c.t("wizard.model_sonnet"),default:a.sonnet},{type:"input",name:"opus",message:c.t("wizard.model_opus"),default:a.opus},{type:"input",name:"reasoning",message:c.t("wizard.model_reasoning"),default:a.reasoning}]);i.setModels(t)}console.log(t.green("\n✓ "+c.t("wizard.models_saved")))}async configModels(a){if(!i.getApiKey())return console.log(t.red("\n"+c.t("wizard.api_key_required"))),void await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}]);for(;;){this.resetScreen(),this.createBox(c.t("wizard.config_models"));const o=[...this.buildPresetChoices()];o.push(new e.Separator),o.push({name:"✏️ "+c.t("wizard.custom_model_input"),value:{type:"custom_input"}}),o.push(new e.Separator),o.push({name:"<- "+c.t("wizard.nav_return"),value:{type:"back"}}),o.push({name:"x "+c.t("wizard.nav_exit"),value:{type:"exit"}});const{modelChoice:n}=await this.promptWithHints([{type:"list",name:"modelChoice",message:c.t("wizard.select_model_config"),choices:o}]);if("exit"===n.type)this.printGoodbye(),process.exit(0);else{if("back"===n.type)return;if("custom_input"===n.type)return await this.handleCustomModelInput(),void(a?.skipLoadPrompt||await this.promptLoadAfterModelConfig());if("preset"===n.type){const e=r(n.preset);return i.setModels(e),console.log(t.green("\n✓ "+c.t("wizard.models_saved"))),void(a?.skipLoadPrompt||await this.promptLoadAfterModelConfig())}}}}async promptLoadAfterModelConfig(){const{shouldLoad:t}=await e.prompt([{type:"list",name:"shouldLoad",message:c.t("wizard.load_config_now"),choices:[{name:c.t("wizard.load_config_yes"),value:!0},{name:c.t("wizard.load_config_later"),value:!1}]}]);t&&await this.selectAndConfigureTool()}async configApiKey(){for(;;){this.resetScreen(),this.createBox(c.t("wizard.input_api_key")),console.log(t.gray("\n💡 "+c.t("wizard.api_key_input_hint"))),console.log(t.gray(" "+c.t("wizard.api_key_get_hint",{url:"https://www.vibeapi.cn/console/token"}))),console.log();const{apiKey:o}=await e.prompt([{type:"password",name:"apiKey",message:c.t("wizard.input_your_api_key"),mask:"*"}]);if(!o||""===o.trim()){const{action:t}=await e.prompt([{type:"list",name:"action",message:c.t("wizard.select_action"),choices:[{name:c.t("wizard.retry_input"),value:"retry"},{name:"<- "+c.t("wizard.nav_return"),value:"back"}]}]);if("back"===t)return;continue}const n=a(c.t("wizard.validating_api_key")).start(),r=await g(o.trim());if(n.stop(),r.valid)return i.setApiKey(o.trim()),this.apiKeyValid=!0,void console.log(t.green("\n✓ "+c.t("wizard.api_key_valid")));{this.apiKeyValid=!1,"invalid_api_key"===r.error?console.log(t.red("\n✗ "+c.t("wizard.api_key_invalid"))):console.log(t.red("\n✗ "+c.t("wizard.api_key_network_error")));const{action:a}=await e.prompt([{type:"list",name:"action",message:c.t("wizard.select_action"),choices:[{name:c.t("wizard.retry_input"),value:"retry"},{name:"<- "+c.t("wizard.nav_return"),value:"back"}]}]);if("back"===a)return}}}async selectAndConfigureTool(t=!1){for(;;){this.resetScreen(),this.createBox(c.t("wizard.select_tool"));const a=l.getSupportedTools().map(e=>({name:e.displayName,value:e.name})),{tool:i}=await this.promptWithHints([{type:"list",name:"tool",message:"🛠️ "+c.t("wizard.select_tool"),choices:[...a,new e.Separator,{name:"<- "+c.t("wizard.nav_return"),value:"back"},{name:"x "+c.t("wizard.nav_exit"),value:"exit"}]}]);if("exit"===i)this.printGoodbye(),process.exit(0);else if("back"===i)return;await this.configureTool(i,t)}}async configureTool(a,i=!1){const o=d[a];if(o){if(!l.isToolInstalled(a)){console.log(t.yellow("\n"+c.t("wizard.tool_not_installed",{tool:o.displayName})));const{install:i}=await e.prompt([{type:"confirm",name:"install",message:c.t("wizard.install_tool_confirm"),default:!0}]);if(!i)return;try{await l.installTool(a)}catch{return void console.log(t.red(c.t("wizard.install_failed")))}}i?await this.configureToolModel(a)&&await this.loadConfig(a):await this.showToolMenu(a)}}async showToolMenu(t){for(;;){this.resetScreen();const a=d[t];if(!a)return;this.createBox(a.displayName+" "+c.t("wizard.menu_title"));const{action:i}=await this.promptWithHints([{type:"list",name:"action",message:"⚙️ "+c.t("wizard.select_action"),choices:[{name:"📥 "+c.t("wizard.action_load_config",{tool:a.displayName}),value:"load"},{name:"📤 "+c.t("wizard.action_unload_config",{tool:a.displayName}),value:"unload"},{name:"↩️ "+c.t("wizard.action_restore_config",{tool:a.displayName}),value:"restore"},new e.Separator,{name:"<- "+c.t("wizard.nav_return"),value:"back"},{name:"x "+c.t("wizard.nav_exit"),value:"exit"}]}]);if("exit"===i)this.printGoodbye(),process.exit(0);else{if("back"===i)return;"load"===i?await this.configureToolModel(t)&&await this.loadConfig(t):"unload"===i?await this.unloadConfig(t):"restore"===i&&await this.restoreConfig(t)}}}singleModelOverride(e){const t=e.trim();return/claude/i.test(t)?{opus:t}:{haiku:t,sonnet:t,opus:t,reasoning:t}}async configureToolModel(o){const n=d[o];if(!n)return!1;const l="claude-code"===o,p=s(o),m=l||!p?c.t("wizard.model_builtin_default"):p;this.resetScreen(),this.createBox(n.displayName+" · "+c.t("wizard.config_models"));const u=[{name:"✅ "+c.t("wizard.use_default_model",{model:m}),value:{type:"default"}},{name:"🌐 "+c.t("wizard.fetch_models_from_api"),value:{type:"fetch"}},...this.buildPresetChoices(),new e.Separator,{name:"✏️ "+c.t("wizard.input_custom_model"),value:{type:"custom"}},new e.Separator,{name:"<- "+c.t("wizard.nav_return"),value:{type:"back"}}],{choice:g}=await this.promptWithHints([{type:"list",name:"choice",message:c.t("wizard.select_tool_model",{tool:n.displayName}),choices:u}]);if("back"===g.type)return!1;if("default"===g.type)i.setToolModel(o,null);else if("preset"===g.type)i.setToolModel(o,r(g.preset));else if("custom"===g.type){const{model:t}=await e.prompt([{type:"input",name:"model",message:c.t("wizard.input_custom_model"),default:!l&&p?p:void 0}]),a=(t||"").trim();i.setToolModel(o,a?this.singleModelOverride(a):null)}else if("fetch"===g.type){const n=i.getApiKey();if(!n)return console.log(t.red("\n"+c.t("wizard.api_key_required"))),!1;const r=a(c.t("wizard.fetching_models")).start(),s=await w(n);let d;if(r.stop(),s.ok&&s.models.length>0){const{model:t}=await e.prompt([{type:"list",name:"model",message:c.t("wizard.select_fetched_model"),pageSize:20,choices:[...s.models,new e.Separator,{name:"<- "+c.t("wizard.nav_return"),value:"__back__"}]}]);if("__back__"===t)return!1;d=t}else{console.log(t.yellow("\n"+c.t("wizard.fetch_models_failed")));const{model:a}=await e.prompt([{type:"input",name:"model",message:c.t("wizard.input_custom_model"),default:!l&&p?p:void 0}]);d=(a||"").trim()}i.setToolModel(o,d?this.singleModelOverride(d):null)}return console.log(t.green("\n✓ "+c.t("wizard.models_saved"))),l&&console.log(t.gray("💡 "+c.t("wizard.claude_model_hint"))),!0}async loadConfig(o){const n=i.getApiKey(),r=i.getModelsForTool(o);if(!n)return console.log(t.red("\n"+c.t("wizard.api_key_required"))),console.log(t.yellow(c.t("wizard.please_config_api_key_first"))),void await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}]);if(!this.apiKeyValid){const i=a(c.t("wizard.validating_api_key")).start();if(!(await g(n)).valid)return i.fail(c.t("wizard.api_key_invalid")),console.log(t.red("\n"+c.t("wizard.please_reconfig_api_key"))),void await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}]);this.apiKeyValid=!0,i.stop()}const s=a(c.t("wizard.loading_config")).start();try{l.loadPrivateConfig(o,n,r),s.succeed(c.t("wizard.config_loaded",{tool:d[o]?.displayName||o}));const a=d[o]?.command;a&&console.log(t.green("\n"+c.t("wizard.run_tool_hint",{command:a})));const{nextAction:i}=await e.prompt([{type:"list",name:"nextAction",message:c.t("wizard.what_next"),choices:[{name:c.t("wizard.exit_and_start"),value:"exit"},{name:c.t("wizard.continue_config"),value:"continue"}]}]);"exit"===i&&(this.printGoodbye(),process.exit(0))}catch(a){s.fail(c.t("wizard.config_failed")),console.log(t.red(a instanceof Error?a.message:String(a))),await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}])}}async unloadConfig(i){const{confirm:o}=await e.prompt([{type:"confirm",name:"confirm",message:c.t("wizard.confirm_unload_config",{tool:d[i]?.displayName||i}),default:!1}]);if(!o)return;const n=a(c.t("wizard.unloading_config")).start();try{l.unloadPrivateConfig(i),n.succeed(c.t("wizard.config_unloaded"));const{nextAction:t}=await e.prompt([{type:"list",name:"nextAction",message:c.t("wizard.what_next"),choices:[{name:c.t("wizard.exit_and_start"),value:"exit"},{name:c.t("wizard.continue_config"),value:"continue"}]}]);"exit"===t&&(this.printGoodbye(),process.exit(0))}catch(a){n.fail(c.t("wizard.config_unload_failed")),console.log(t.red(a instanceof Error?a.message:String(a))),await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}])}}async restoreConfig(i){const o=d[i]?.displayName||i,{confirm:n}=await e.prompt([{type:"confirm",name:"confirm",message:c.t("wizard.confirm_restore_config",{tool:o}),default:!1}]);if(!n)return;const r=a(c.t("wizard.restoring_config")).start();try{const e=l.restorePrivateConfig(i).filter(e=>e.result.restored);0===e.length?r.warn(c.t("wizard.restore_no_backup")):(r.succeed(c.t("wizard.config_restored",{tool:o})),e.forEach(e=>console.log(t.gray(` ${e.file} ← ${e.result.from}`))))}catch(e){r.fail(c.t("wizard.config_restore_failed")),console.log(t.red(e instanceof Error?e.message:String(e)))}await e.prompt([{type:"input",name:"continue",message:c.t("wizard.press_enter")}])}async run(){const e=i.getConfig();if(e.api_key){const t=await g(e.api_key);this.apiKeyValid=t.valid}else this.apiKeyValid=!1;e.api_key&&this.apiKeyValid?await this.showMainMenu():await this.runFirstTimeSetup()}async showMainMenu(){for(;;){this.resetScreen();const a=i.getApiKey()||"",o=a.length>4?"sk-****"+a.slice(-4):"****";console.log(t.gray(` 🔑 API Key: ${o}`)+t.green(" ✓")),console.log("");const n=l.getSupportedTools().map(e=>({name:"🛠️ "+e.displayName,value:{type:"tool",tool:e.name}})),r=[new e.Separator(v("── "+c.t("wizard.select_tool")+" ──")),...n,new e.Separator(t.gray("── "+c.t("wizard.settings")+" ──")),{name:"🔑 "+c.t("wizard.menu_change_api_key"),value:{type:"apikey"}},{name:"🌐 "+c.t("wizard.menu_config_language"),value:{type:"language"}},new e.Separator,{name:"x "+c.t("wizard.nav_exit"),value:{type:"exit"}}],{action:s}=await this.promptWithHints([{type:"list",name:"action",message:"🛠️ "+c.t("wizard.select_tool"),choices:r}]);if("exit"===s.type)this.printGoodbye(),process.exit(0);else if("tool"===s.type)await this.configureTool(s.tool);else if("apikey"===s.type){await this.configApiKey();const e=i.getApiKey();if(e){const t=await g(e);this.apiKeyValid=t.valid}else this.apiKeyValid=!1}else"language"===s.type&&await this.configLanguage()}}}export const wizard=Wizard.getInstance();
|