ccman 0.0.1
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/.editorconfig +15 -0
- package/.eslintrc.js +28 -0
- package/.github/workflows/release.yml +213 -0
- package/.prettierrc +10 -0
- package/CLAUDE.md +215 -0
- package/README.md +361 -0
- package/README_zh.md +361 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +476 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +67 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +226 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/config/EnvironmentManager.d.ts +83 -0
- package/dist/config/EnvironmentManager.d.ts.map +1 -0
- package/dist/config/EnvironmentManager.js +280 -0
- package/dist/config/EnvironmentManager.js.map +1 -0
- package/dist/config/constants.d.ts +40 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +97 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/shell/ShellManager.d.ts +73 -0
- package/dist/shell/ShellManager.d.ts.map +1 -0
- package/dist/shell/ShellManager.js +391 -0
- package/dist/shell/ShellManager.js.map +1 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/version.d.ts +67 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +199 -0
- package/dist/utils/version.js.map +1 -0
- package/docs/npm-publish-guide.md +71 -0
- package/docs/release-guide.md +86 -0
- package/docs/version-management.md +64 -0
- package/jest.config.js +22 -0
- package/package.json +57 -0
- package/release-temp/README.md +361 -0
- package/release-temp/package.json +57 -0
- package/scripts/publish-local.sh +91 -0
- package/scripts/quick-release.sh +100 -0
- package/scripts/release.sh +430 -0
- package/src/cli.ts +510 -0
- package/src/config/ConfigManager.ts +227 -0
- package/src/config/EnvironmentManager.ts +327 -0
- package/src/config/constants.ts +64 -0
- package/src/index.ts +5 -0
- package/src/shell/ShellManager.ts +416 -0
- package/src/types/index.ts +60 -0
- package/src/utils/version.ts +189 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ConfigManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const constants_1 = require("./constants");
|
|
39
|
+
class ConfigManager {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.configDir = (0, constants_1.getConfigDir)();
|
|
42
|
+
this.configFile = (0, constants_1.getConfigFile)();
|
|
43
|
+
this.ensureConfigDir();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 确保配置目录存在
|
|
47
|
+
*/
|
|
48
|
+
ensureConfigDir() {
|
|
49
|
+
if (!fs.existsSync(this.configDir)) {
|
|
50
|
+
fs.mkdirSync(this.configDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 获取配置
|
|
55
|
+
*/
|
|
56
|
+
getConfig() {
|
|
57
|
+
if (!fs.existsSync(this.configFile)) {
|
|
58
|
+
const defaultConfig = {
|
|
59
|
+
current: null,
|
|
60
|
+
environments: {},
|
|
61
|
+
settings: {
|
|
62
|
+
autoWriteShell: true,
|
|
63
|
+
preferredShell: 'auto'
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
this.saveConfig(defaultConfig);
|
|
67
|
+
return defaultConfig;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const content = fs.readFileSync(this.configFile, 'utf8');
|
|
71
|
+
return JSON.parse(content);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new Error(`Failed to read config: ${error}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 保存配置
|
|
79
|
+
*/
|
|
80
|
+
saveConfig(config) {
|
|
81
|
+
try {
|
|
82
|
+
fs.writeFileSync(this.configFile, JSON.stringify(config, null, 2));
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`Failed to save config: ${error}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 添加环境
|
|
90
|
+
*/
|
|
91
|
+
addEnvironment(options) {
|
|
92
|
+
const config = this.getConfig();
|
|
93
|
+
if (config.environments[options.name]) {
|
|
94
|
+
throw new Error(`Environment "${options.name}" already exists`);
|
|
95
|
+
}
|
|
96
|
+
const newEnv = {
|
|
97
|
+
name: options.name,
|
|
98
|
+
baseUrl: options.baseUrl,
|
|
99
|
+
apiKey: options.apiKey,
|
|
100
|
+
createdAt: new Date().toISOString()
|
|
101
|
+
};
|
|
102
|
+
config.environments[options.name] = newEnv;
|
|
103
|
+
// 如果是第一个环境,设为当前环境
|
|
104
|
+
if (!config.current) {
|
|
105
|
+
config.current = options.name;
|
|
106
|
+
}
|
|
107
|
+
this.saveConfig(config);
|
|
108
|
+
return newEnv;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 删除环境
|
|
112
|
+
*/
|
|
113
|
+
removeEnvironment(name) {
|
|
114
|
+
const config = this.getConfig();
|
|
115
|
+
if (!config.environments[name]) {
|
|
116
|
+
throw new Error(`Environment "${name}" not found`);
|
|
117
|
+
}
|
|
118
|
+
delete config.environments[name];
|
|
119
|
+
// 如果删除的是当前环境,清空当前环境或切换到第一个可用环境
|
|
120
|
+
if (config.current === name) {
|
|
121
|
+
const remainingEnvs = Object.keys(config.environments);
|
|
122
|
+
config.current = remainingEnvs.length > 0 ? remainingEnvs[0] : null;
|
|
123
|
+
}
|
|
124
|
+
this.saveConfig(config);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 设置当前环境
|
|
128
|
+
*/
|
|
129
|
+
setCurrentEnvironment(name) {
|
|
130
|
+
const config = this.getConfig();
|
|
131
|
+
if (!config.environments[name]) {
|
|
132
|
+
throw new Error(`Environment "${name}" not found`);
|
|
133
|
+
}
|
|
134
|
+
config.current = name;
|
|
135
|
+
config.environments[name].lastUsed = new Date().toISOString();
|
|
136
|
+
this.saveConfig(config);
|
|
137
|
+
return config.environments[name];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 获取当前环境
|
|
141
|
+
*/
|
|
142
|
+
getCurrentEnvironment() {
|
|
143
|
+
const config = this.getConfig();
|
|
144
|
+
if (!config.current || !config.environments[config.current]) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return config.environments[config.current];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 获取所有环境列表
|
|
151
|
+
*/
|
|
152
|
+
listEnvironments() {
|
|
153
|
+
const config = this.getConfig();
|
|
154
|
+
return Object.values(config.environments).map(env => ({
|
|
155
|
+
...env,
|
|
156
|
+
isCurrent: env.name === config.current
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 获取指定环境
|
|
161
|
+
*/
|
|
162
|
+
getEnvironment(name) {
|
|
163
|
+
const config = this.getConfig();
|
|
164
|
+
return config.environments[name] || null;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 更新环境
|
|
168
|
+
*/
|
|
169
|
+
updateEnvironment(name, updates) {
|
|
170
|
+
const config = this.getConfig();
|
|
171
|
+
if (!config.environments[name]) {
|
|
172
|
+
throw new Error(`Environment "${name}" not found`);
|
|
173
|
+
}
|
|
174
|
+
config.environments[name] = {
|
|
175
|
+
...config.environments[name],
|
|
176
|
+
...updates
|
|
177
|
+
};
|
|
178
|
+
this.saveConfig(config);
|
|
179
|
+
return config.environments[name];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 更新全局设置
|
|
183
|
+
*/
|
|
184
|
+
updateSettings(settings) {
|
|
185
|
+
const config = this.getConfig();
|
|
186
|
+
config.settings = {
|
|
187
|
+
...config.settings,
|
|
188
|
+
...settings
|
|
189
|
+
};
|
|
190
|
+
this.saveConfig(config);
|
|
191
|
+
return config.settings;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 获取全局设置
|
|
195
|
+
*/
|
|
196
|
+
getSettings() {
|
|
197
|
+
return this.getConfig().settings;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 检查环境是否存在
|
|
201
|
+
*/
|
|
202
|
+
hasEnvironment(name) {
|
|
203
|
+
const config = this.getConfig();
|
|
204
|
+
return !!config.environments[name];
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 获取环境数量
|
|
208
|
+
*/
|
|
209
|
+
getEnvironmentCount() {
|
|
210
|
+
const config = this.getConfig();
|
|
211
|
+
return Object.keys(config.environments).length;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* 清除所有环境和重置配置
|
|
215
|
+
*/
|
|
216
|
+
clearAll() {
|
|
217
|
+
const config = this.getConfig();
|
|
218
|
+
// 重置配置到初始状态
|
|
219
|
+
config.current = null;
|
|
220
|
+
config.environments = {};
|
|
221
|
+
// 保存重置后的配置
|
|
222
|
+
this.saveConfig(config);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.ConfigManager = ConfigManager;
|
|
226
|
+
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ShellManager } from '../shell/ShellManager';
|
|
2
|
+
import { ClaudeEnv, AddEnvOptions, EnvironmentListItem } from '../types';
|
|
3
|
+
export declare class EnvironmentManager {
|
|
4
|
+
private configManager;
|
|
5
|
+
private shellManager;
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* 添加环境变量组
|
|
9
|
+
*/
|
|
10
|
+
addEnvironment(options: AddEnvOptions): Promise<ClaudeEnv>;
|
|
11
|
+
/**
|
|
12
|
+
* 删除环境变量组
|
|
13
|
+
*/
|
|
14
|
+
removeEnvironment(name: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* 设置使用的环境变量组
|
|
17
|
+
*/
|
|
18
|
+
useEnvironment(name: string, options?: {
|
|
19
|
+
autoWriteShell?: boolean;
|
|
20
|
+
autoSource?: boolean;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
env: ClaudeEnv;
|
|
23
|
+
shellWriteResult?: any;
|
|
24
|
+
sourceResult?: any;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* 获取所有环境变量组
|
|
28
|
+
*/
|
|
29
|
+
listEnvironments(): EnvironmentListItem[];
|
|
30
|
+
/**
|
|
31
|
+
* 获取当前使用的环境变量组
|
|
32
|
+
*/
|
|
33
|
+
getCurrentEnvironment(): ClaudeEnv | null;
|
|
34
|
+
/**
|
|
35
|
+
* 获取指定环境
|
|
36
|
+
*/
|
|
37
|
+
getEnvironment(name: string): ClaudeEnv | null;
|
|
38
|
+
/**
|
|
39
|
+
* 更新环境
|
|
40
|
+
*/
|
|
41
|
+
updateEnvironment(name: string, updates: {
|
|
42
|
+
baseUrl?: string;
|
|
43
|
+
apiKey?: string;
|
|
44
|
+
}, autoWriteShell?: boolean): Promise<ClaudeEnv>;
|
|
45
|
+
/**
|
|
46
|
+
* 生成环境变量脚本
|
|
47
|
+
*/
|
|
48
|
+
generateEnvScript(): string;
|
|
49
|
+
/**
|
|
50
|
+
* 测试环境连接
|
|
51
|
+
*/
|
|
52
|
+
testEnvironment(name?: string): Promise<{
|
|
53
|
+
success: boolean;
|
|
54
|
+
message: string;
|
|
55
|
+
error?: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* 获取环境统计信息
|
|
59
|
+
*/
|
|
60
|
+
getStats(): {
|
|
61
|
+
totalEnvironments: number;
|
|
62
|
+
currentEnvironment: string | null;
|
|
63
|
+
hasShellIntegration: boolean;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* 将 ClaudeEnv 转换为 shell 环境变量格式
|
|
67
|
+
*/
|
|
68
|
+
private getEnvVars;
|
|
69
|
+
/**
|
|
70
|
+
* 获取 Shell Manager 实例(用于高级操作)
|
|
71
|
+
*/
|
|
72
|
+
getShellManager(): ShellManager;
|
|
73
|
+
/**
|
|
74
|
+
* 清除所有环境和配置
|
|
75
|
+
*/
|
|
76
|
+
clearAll(): Promise<{
|
|
77
|
+
success: boolean;
|
|
78
|
+
message: string;
|
|
79
|
+
details: string[];
|
|
80
|
+
}>;
|
|
81
|
+
private validateEnvironmentInput;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=EnvironmentManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/config/EnvironmentManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAgB,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGvF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;;IAOnC;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAqBhE;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QACxG,GAAG,EAAE,SAAS,CAAC;QACf,gBAAgB,CAAC,EAAE,GAAG,CAAC;QACvB,YAAY,CAAC,EAAE,GAAG,CAAC;KACpB,CAAC;IA+BF;;OAEG;IACH,gBAAgB,IAAI,mBAAmB,EAAE;IAIzC;;OAEG;IACH,qBAAqB,IAAI,SAAS,GAAG,IAAI;IAIzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI9C;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9C,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,SAAS,CAAC;IAsBrB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IA8B3B;;OAEG;IACG,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkCpG;;OAEG;IACH,QAAQ,IAAI;QACV,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,mBAAmB,EAAE,OAAO,CAAC;KAC9B;IAWD;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA8CnF,OAAO,CAAC,wBAAwB;CAyBjC"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnvironmentManager = void 0;
|
|
4
|
+
const ConfigManager_1 = require("../config/ConfigManager");
|
|
5
|
+
const ShellManager_1 = require("../shell/ShellManager");
|
|
6
|
+
const constants_1 = require("./constants");
|
|
7
|
+
class EnvironmentManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.configManager = new ConfigManager_1.ConfigManager();
|
|
10
|
+
this.shellManager = new ShellManager_1.ShellManager();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 添加环境变量组
|
|
14
|
+
*/
|
|
15
|
+
async addEnvironment(options) {
|
|
16
|
+
// 验证输入
|
|
17
|
+
this.validateEnvironmentInput(options);
|
|
18
|
+
// 添加环境到配置
|
|
19
|
+
const newEnv = this.configManager.addEnvironment(options);
|
|
20
|
+
// 如果启用自动写入 shell,则写入
|
|
21
|
+
const settings = this.configManager.getSettings();
|
|
22
|
+
if (options.autoWriteShell ?? settings.autoWriteShell) {
|
|
23
|
+
try {
|
|
24
|
+
await this.shellManager.writeToShell(this.getEnvVars(newEnv), newEnv.name);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
// 写入失败不应该影响添加环境,只记录错误
|
|
28
|
+
console.warn(`Warning: Failed to write to shell config: ${error}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return newEnv;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 删除环境变量组
|
|
35
|
+
*/
|
|
36
|
+
async removeEnvironment(name) {
|
|
37
|
+
if (!this.configManager.hasEnvironment(name)) {
|
|
38
|
+
throw new Error(`Environment "${name}" not found`);
|
|
39
|
+
}
|
|
40
|
+
this.configManager.removeEnvironment(name);
|
|
41
|
+
// 如果删除的是当前环境,尝试清理 shell 配置
|
|
42
|
+
const currentEnv = this.configManager.getCurrentEnvironment();
|
|
43
|
+
if (!currentEnv) {
|
|
44
|
+
try {
|
|
45
|
+
await this.shellManager.clearFromShell();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.warn(`Warning: Failed to clear shell config: ${error}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 设置使用的环境变量组
|
|
54
|
+
*/
|
|
55
|
+
async useEnvironment(name, options) {
|
|
56
|
+
const env = this.configManager.setCurrentEnvironment(name);
|
|
57
|
+
// 根据参数或全局设置决定是否写入 shell
|
|
58
|
+
const settings = this.configManager.getSettings();
|
|
59
|
+
const shouldWriteShell = options?.autoWriteShell ?? settings.autoWriteShell;
|
|
60
|
+
let shellWriteResult;
|
|
61
|
+
let sourceResult;
|
|
62
|
+
if (shouldWriteShell) {
|
|
63
|
+
try {
|
|
64
|
+
const envVars = this.getEnvVars(env);
|
|
65
|
+
shellWriteResult = await this.shellManager.writeToShell(envVars, env.name);
|
|
66
|
+
// 如果指定了自动 source,则执行自动 source
|
|
67
|
+
if (options?.autoSource) {
|
|
68
|
+
sourceResult = await this.shellManager.autoSourceShell();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error(`Failed to write environment variables to shell: ${error}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
env,
|
|
77
|
+
shellWriteResult,
|
|
78
|
+
sourceResult
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 获取所有环境变量组
|
|
83
|
+
*/
|
|
84
|
+
listEnvironments() {
|
|
85
|
+
return this.configManager.listEnvironments();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 获取当前使用的环境变量组
|
|
89
|
+
*/
|
|
90
|
+
getCurrentEnvironment() {
|
|
91
|
+
return this.configManager.getCurrentEnvironment();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 获取指定环境
|
|
95
|
+
*/
|
|
96
|
+
getEnvironment(name) {
|
|
97
|
+
return this.configManager.getEnvironment(name);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 更新环境
|
|
101
|
+
*/
|
|
102
|
+
async updateEnvironment(name, updates, autoWriteShell) {
|
|
103
|
+
const updatedEnv = this.configManager.updateEnvironment(name, updates);
|
|
104
|
+
// 如果更新的是当前环境,且启用自动写入,则更新 shell 配置
|
|
105
|
+
const currentEnv = this.configManager.getCurrentEnvironment();
|
|
106
|
+
if (currentEnv?.name === name) {
|
|
107
|
+
const settings = this.configManager.getSettings();
|
|
108
|
+
const shouldWriteShell = autoWriteShell ?? settings.autoWriteShell;
|
|
109
|
+
if (shouldWriteShell) {
|
|
110
|
+
try {
|
|
111
|
+
const envVars = this.getEnvVars(updatedEnv);
|
|
112
|
+
await this.shellManager.writeToShell(envVars, updatedEnv.name);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.warn(`Warning: Failed to update shell config: ${error}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return updatedEnv;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 生成环境变量脚本
|
|
123
|
+
*/
|
|
124
|
+
generateEnvScript() {
|
|
125
|
+
const currentEnv = this.configManager.getCurrentEnvironment();
|
|
126
|
+
if (!currentEnv) {
|
|
127
|
+
throw new Error('No environment is currently active');
|
|
128
|
+
}
|
|
129
|
+
const envVars = this.getEnvVars(currentEnv);
|
|
130
|
+
const now = new Date();
|
|
131
|
+
const timestamp = now.getFullYear() + '-' +
|
|
132
|
+
String(now.getMonth() + 1).padStart(2, '0') + '-' +
|
|
133
|
+
String(now.getDate()).padStart(2, '0') + ' ' +
|
|
134
|
+
String(now.getHours()).padStart(2, '0') + ':' +
|
|
135
|
+
String(now.getMinutes()).padStart(2, '0') + ':' +
|
|
136
|
+
String(now.getSeconds()).padStart(2, '0');
|
|
137
|
+
const script = `#!/bin/bash
|
|
138
|
+
# CCM Environment Variables for: ${currentEnv.name}
|
|
139
|
+
# Generated at: ${timestamp}
|
|
140
|
+
|
|
141
|
+
export ${constants_1.CONFIG.ENV_VARS.BASE_URL}="${envVars.ANTHROPIC_BASE_URL}"
|
|
142
|
+
export ${constants_1.CONFIG.ENV_VARS.AUTH_TOKEN}="${envVars.ANTHROPIC_AUTH_TOKEN}"
|
|
143
|
+
|
|
144
|
+
echo "Environment variables set for: ${currentEnv.name}"
|
|
145
|
+
`;
|
|
146
|
+
return script;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 测试环境连接
|
|
150
|
+
*/
|
|
151
|
+
async testEnvironment(name) {
|
|
152
|
+
const env = name ? this.getEnvironment(name) : this.getCurrentEnvironment();
|
|
153
|
+
if (!env) {
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
message: `Environment ${name ? `"${name}"` : 'current'} not found`
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// 简单验证 URL 格式和 API Key 存在
|
|
160
|
+
try {
|
|
161
|
+
new URL(env.baseUrl);
|
|
162
|
+
if (!env.apiKey || env.apiKey.trim().length === 0) {
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
message: `Environment "${env.name}" has empty API key`
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
message: `Environment "${env.name}" configuration is valid`
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
message: `Environment "${env.name}" has invalid base URL`,
|
|
177
|
+
error: String(error)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 获取环境统计信息
|
|
183
|
+
*/
|
|
184
|
+
getStats() {
|
|
185
|
+
const currentEnv = this.configManager.getCurrentEnvironment();
|
|
186
|
+
const settings = this.configManager.getSettings();
|
|
187
|
+
return {
|
|
188
|
+
totalEnvironments: this.configManager.getEnvironmentCount(),
|
|
189
|
+
currentEnvironment: currentEnv?.name || null,
|
|
190
|
+
hasShellIntegration: settings.autoWriteShell
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 将 ClaudeEnv 转换为 shell 环境变量格式
|
|
195
|
+
*/
|
|
196
|
+
getEnvVars(env) {
|
|
197
|
+
return {
|
|
198
|
+
[constants_1.CONFIG.ENV_VARS.BASE_URL]: env.baseUrl,
|
|
199
|
+
[constants_1.CONFIG.ENV_VARS.AUTH_TOKEN]: env.apiKey
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 获取 Shell Manager 实例(用于高级操作)
|
|
204
|
+
*/
|
|
205
|
+
getShellManager() {
|
|
206
|
+
return this.shellManager;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 清除所有环境和配置
|
|
210
|
+
*/
|
|
211
|
+
async clearAll() {
|
|
212
|
+
const details = [];
|
|
213
|
+
let hasErrors = false;
|
|
214
|
+
try {
|
|
215
|
+
// 1. 清除 shell 配置
|
|
216
|
+
try {
|
|
217
|
+
const shellResult = await this.shellManager.clearFromShell();
|
|
218
|
+
if (shellResult.success) {
|
|
219
|
+
details.push('✓ Shell configuration cleared');
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
details.push(`⚠ Shell cleanup warning: ${shellResult.message}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
details.push(`✗ Shell cleanup failed: ${error}`);
|
|
227
|
+
hasErrors = true;
|
|
228
|
+
}
|
|
229
|
+
// 2. 清除所有环境配置
|
|
230
|
+
try {
|
|
231
|
+
this.configManager.clearAll();
|
|
232
|
+
details.push('✓ All environments removed');
|
|
233
|
+
details.push('✓ Configuration reset');
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
details.push(`✗ Configuration cleanup failed: ${error}`);
|
|
237
|
+
hasErrors = true;
|
|
238
|
+
}
|
|
239
|
+
const message = hasErrors
|
|
240
|
+
? 'CCM cleared with some warnings (see details)'
|
|
241
|
+
: 'CCM completely cleared - all environments and shell integration removed';
|
|
242
|
+
return {
|
|
243
|
+
success: !hasErrors,
|
|
244
|
+
message,
|
|
245
|
+
details
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
message: `Failed to clear CCM: ${error}`,
|
|
252
|
+
details: ['✗ Unexpected error during cleanup']
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
validateEnvironmentInput(options) {
|
|
257
|
+
if (!options.name || options.name.trim().length === 0) {
|
|
258
|
+
throw new Error('Environment name is required');
|
|
259
|
+
}
|
|
260
|
+
if (!options.baseUrl || options.baseUrl.trim().length === 0) {
|
|
261
|
+
throw new Error('Base URL is required');
|
|
262
|
+
}
|
|
263
|
+
if (!options.apiKey || options.apiKey.trim().length === 0) {
|
|
264
|
+
throw new Error('API key is required');
|
|
265
|
+
}
|
|
266
|
+
// 验证 URL 格式
|
|
267
|
+
try {
|
|
268
|
+
new URL(options.baseUrl);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
throw new Error('Invalid base URL format');
|
|
272
|
+
}
|
|
273
|
+
// 验证环境名称格式(只允许字母、数字、下划线、连字符)
|
|
274
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(options.name)) {
|
|
275
|
+
throw new Error('Environment name can only contain letters, numbers, underscores, and hyphens');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.EnvironmentManager = EnvironmentManager;
|
|
280
|
+
//# sourceMappingURL=EnvironmentManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentManager.js","sourceRoot":"","sources":["../../src/config/EnvironmentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCMan (Claude Code Manager) 配置常量
|
|
3
|
+
* 简化版本 - 只保留实际需要的常量
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 应用配置常量
|
|
7
|
+
*/
|
|
8
|
+
export declare const CONFIG: {
|
|
9
|
+
/**
|
|
10
|
+
* 路径配置
|
|
11
|
+
*/
|
|
12
|
+
readonly PATHS: {
|
|
13
|
+
readonly DIR: ".ccman";
|
|
14
|
+
readonly CONFIG_FILE: "config.json";
|
|
15
|
+
readonly SHELL_RC: ".ccmanrc";
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* 环境变量名称
|
|
19
|
+
*/
|
|
20
|
+
readonly ENV_VARS: {
|
|
21
|
+
readonly BASE_URL: "ANTHROPIC_BASE_URL";
|
|
22
|
+
readonly AUTH_TOKEN: "ANTHROPIC_AUTH_TOKEN";
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 应用元信息
|
|
26
|
+
*/
|
|
27
|
+
readonly APP_NAME: "CCMan";
|
|
28
|
+
readonly APP_FULL_NAME: "Claude Code Manager";
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* 获取完整路径的辅助函数
|
|
32
|
+
*/
|
|
33
|
+
export declare function getConfigDir(): string;
|
|
34
|
+
export declare function getConfigFile(): string;
|
|
35
|
+
export declare function getShellRCFile(): string;
|
|
36
|
+
/**
|
|
37
|
+
* 获取显示用的路径字符串
|
|
38
|
+
*/
|
|
39
|
+
export declare function getDisplayPath(type: 'config' | 'shellrc'): string;
|
|
40
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;;;;;;IAOH;;OAEG;;;;;IAMH;;OAEG;;;CAGK,CAAC;AAEX;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CASjE"}
|