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,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CCMan (Claude Code Manager) 配置常量
|
|
4
|
+
* 简化版本 - 只保留实际需要的常量
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.CONFIG = void 0;
|
|
41
|
+
exports.getConfigDir = getConfigDir;
|
|
42
|
+
exports.getConfigFile = getConfigFile;
|
|
43
|
+
exports.getShellRCFile = getShellRCFile;
|
|
44
|
+
exports.getDisplayPath = getDisplayPath;
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const os = __importStar(require("os"));
|
|
47
|
+
/**
|
|
48
|
+
* 应用配置常量
|
|
49
|
+
*/
|
|
50
|
+
exports.CONFIG = {
|
|
51
|
+
/**
|
|
52
|
+
* 路径配置
|
|
53
|
+
*/
|
|
54
|
+
PATHS: {
|
|
55
|
+
DIR: '.ccman',
|
|
56
|
+
CONFIG_FILE: 'config.json',
|
|
57
|
+
SHELL_RC: '.ccmanrc'
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* 环境变量名称
|
|
61
|
+
*/
|
|
62
|
+
ENV_VARS: {
|
|
63
|
+
BASE_URL: 'ANTHROPIC_BASE_URL',
|
|
64
|
+
AUTH_TOKEN: 'ANTHROPIC_AUTH_TOKEN'
|
|
65
|
+
},
|
|
66
|
+
/**
|
|
67
|
+
* 应用元信息
|
|
68
|
+
*/
|
|
69
|
+
APP_NAME: 'CCMan',
|
|
70
|
+
APP_FULL_NAME: 'Claude Code Manager'
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* 获取完整路径的辅助函数
|
|
74
|
+
*/
|
|
75
|
+
function getConfigDir() {
|
|
76
|
+
return path.join(os.homedir(), exports.CONFIG.PATHS.DIR);
|
|
77
|
+
}
|
|
78
|
+
function getConfigFile() {
|
|
79
|
+
return path.join(getConfigDir(), exports.CONFIG.PATHS.CONFIG_FILE);
|
|
80
|
+
}
|
|
81
|
+
function getShellRCFile() {
|
|
82
|
+
return path.join(getConfigDir(), exports.CONFIG.PATHS.SHELL_RC);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 获取显示用的路径字符串
|
|
86
|
+
*/
|
|
87
|
+
function getDisplayPath(type) {
|
|
88
|
+
switch (type) {
|
|
89
|
+
case 'config':
|
|
90
|
+
return `~/${exports.CONFIG.PATHS.DIR}/${exports.CONFIG.PATHS.CONFIG_FILE}`;
|
|
91
|
+
case 'shellrc':
|
|
92
|
+
return `~/${exports.CONFIG.PATHS.DIR}/${exports.CONFIG.PATHS.SHELL_RC}`;
|
|
93
|
+
default:
|
|
94
|
+
return `~/${exports.CONFIG.PATHS.DIR}`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCH,oCAEC;AAED,sCAEC;AAED,wCAEC;AAKD,wCASC;AA1DD,2CAA6B;AAC7B,uCAAyB;AAEzB;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,KAAK,EAAE;QACL,GAAG,EAAE,QAAQ;QACb,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,UAAU;KACrB;IAED;;OAEG;IACH,QAAQ,EAAE;QACR,QAAQ,EAAE,oBAAoB;QAC9B,UAAU,EAAE,sBAAsB;KACnC;IAED;;OAEG;IACH,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,qBAAqB;CAC5B,CAAC;AAEX;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,IAA0B;IACvD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAK,cAAM,CAAC,KAAK,CAAC,GAAG,IAAI,cAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7D,KAAK,SAAS;YACZ,OAAO,KAAK,cAAM,CAAC,KAAK,CAAC,GAAG,IAAI,cAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1D;YACE,OAAO,KAAK,cAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ShellManager = exports.EnvironmentManager = exports.ConfigManager = void 0;
|
|
18
|
+
// 导出所有主要模块
|
|
19
|
+
var ConfigManager_1 = require("./config/ConfigManager");
|
|
20
|
+
Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return ConfigManager_1.ConfigManager; } });
|
|
21
|
+
var EnvironmentManager_1 = require("./config/EnvironmentManager");
|
|
22
|
+
Object.defineProperty(exports, "EnvironmentManager", { enumerable: true, get: function () { return EnvironmentManager_1.EnvironmentManager; } });
|
|
23
|
+
var ShellManager_1 = require("./shell/ShellManager");
|
|
24
|
+
Object.defineProperty(exports, "ShellManager", { enumerable: true, get: function () { return ShellManager_1.ShellManager; } });
|
|
25
|
+
__exportStar(require("./types"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,WAAW;AACX,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,kEAAiE;AAAxD,wHAAA,kBAAkB,OAAA;AAC3B,qDAAoD;AAA3C,4GAAA,YAAY,OAAA;AACrB,0CAAwB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ShellEnvVars, ShellWriteResult, ShellType } from '../types';
|
|
2
|
+
export declare class ShellManager {
|
|
3
|
+
private readonly homeDir;
|
|
4
|
+
private readonly ccmanDir;
|
|
5
|
+
private readonly ccmanrcPath;
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* 写入环境变量到 CCMan 配置文件并更新 shell 引用
|
|
9
|
+
*/
|
|
10
|
+
writeToShell(envVars: ShellEnvVars, envName?: string): Promise<ShellWriteResult>;
|
|
11
|
+
/**
|
|
12
|
+
* 写入 ccmanrc 文件
|
|
13
|
+
*/
|
|
14
|
+
private writeCCMANRC;
|
|
15
|
+
/**
|
|
16
|
+
* 确保 shell 配置文件中有对 ccmanrc 的引用
|
|
17
|
+
*/
|
|
18
|
+
private ensureShellReference;
|
|
19
|
+
/**
|
|
20
|
+
* 添加 shell 引用到配置文件
|
|
21
|
+
*/
|
|
22
|
+
private addShellReference;
|
|
23
|
+
/**
|
|
24
|
+
* 生成 shell 引用代码
|
|
25
|
+
*/
|
|
26
|
+
private generateShellReference;
|
|
27
|
+
/**
|
|
28
|
+
* 检查是否已经有 shell 引用
|
|
29
|
+
*/
|
|
30
|
+
private hasShellReference;
|
|
31
|
+
/**
|
|
32
|
+
* 从 shell 配置文件中清除 ccmanrc 引用和 ccmanrc 文件
|
|
33
|
+
*/
|
|
34
|
+
clearFromShell(): Promise<ShellWriteResult>;
|
|
35
|
+
/**
|
|
36
|
+
* 从配置文件中移除 shell 引用
|
|
37
|
+
*/
|
|
38
|
+
private removeShellReference;
|
|
39
|
+
/**
|
|
40
|
+
* 从内容中移除 shell 引用部分
|
|
41
|
+
*/
|
|
42
|
+
private removeShellReferenceFromContent;
|
|
43
|
+
/**
|
|
44
|
+
* 检测当前使用的 shell 类型
|
|
45
|
+
*/
|
|
46
|
+
detectShell(): ShellType;
|
|
47
|
+
/**
|
|
48
|
+
* 获取 shell 配置文件路径列表
|
|
49
|
+
*/
|
|
50
|
+
getShellConfigFiles(shellType: ShellType): string[];
|
|
51
|
+
/**
|
|
52
|
+
* 生成环境变量导出语句
|
|
53
|
+
*/
|
|
54
|
+
generateExportStatements(envVars: ShellEnvVars, envName?: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* 检查是否已经写入了环境变量
|
|
57
|
+
*/
|
|
58
|
+
hasEnvVarsInShell(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* 自动 source shell 配置文件
|
|
61
|
+
*/
|
|
62
|
+
autoSourceShell(): Promise<ShellWriteResult>;
|
|
63
|
+
/**
|
|
64
|
+
* 获取当前 shell 信息
|
|
65
|
+
*/
|
|
66
|
+
getShellInfo(): {
|
|
67
|
+
shellType: ShellType;
|
|
68
|
+
shellPath: string;
|
|
69
|
+
configFiles: string[];
|
|
70
|
+
activeConfigFile?: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=ShellManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellManager.d.ts","sourceRoot":"","sources":["../../src/shell/ShellManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrE,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;;IAQrC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuBtF;;OAEG;YACW,YAAY;IAU1B;;OAEG;YACW,oBAAoB;IAyClC;;OAEG;YACW,iBAAiB;IAmB/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA6CjD;;OAEG;YACW,oBAAoB;IAWlC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IA2BvC;;OAEG;IACH,WAAW,IAAI,SAAS;IAcxB;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;IAkCnD;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAmBzE;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAsB5B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAuDlD;;OAEG;IACH,YAAY,IAAI;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;CAcF"}
|
|
@@ -0,0 +1,391 @@
|
|
|
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.ShellManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const constants_1 = require("../config/constants");
|
|
41
|
+
class ShellManager {
|
|
42
|
+
constructor() {
|
|
43
|
+
this.homeDir = os.homedir();
|
|
44
|
+
this.ccmanDir = (0, constants_1.getConfigDir)();
|
|
45
|
+
this.ccmanrcPath = (0, constants_1.getShellRCFile)();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 写入环境变量到 CCMan 配置文件并更新 shell 引用
|
|
49
|
+
*/
|
|
50
|
+
async writeToShell(envVars, envName) {
|
|
51
|
+
try {
|
|
52
|
+
// 1. 写入环境变量到独立的 ccmanrc 文件
|
|
53
|
+
await this.writeCCMANRC(envVars, envName);
|
|
54
|
+
// 2. 确保 shell 配置文件中有对 ccmanrc 的引用
|
|
55
|
+
const shellUpdateResult = await this.ensureShellReference();
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
filePath: this.ccmanrcPath,
|
|
59
|
+
message: `Environment variables written to ${this.ccmanrcPath}${shellUpdateResult.updated ? ` and shell reference ${shellUpdateResult.action}` : ''}`
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
success: false,
|
|
65
|
+
filePath: this.ccmanrcPath,
|
|
66
|
+
message: 'Failed to write environment variables',
|
|
67
|
+
error: String(error)
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 写入 ccmanrc 文件
|
|
73
|
+
*/
|
|
74
|
+
async writeCCMANRC(envVars, envName) {
|
|
75
|
+
// 确保 .ccman 目录存在
|
|
76
|
+
if (!fs.existsSync(this.ccmanDir)) {
|
|
77
|
+
fs.mkdirSync(this.ccmanDir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
const content = this.generateExportStatements(envVars, envName);
|
|
80
|
+
fs.writeFileSync(this.ccmanrcPath, content);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 确保 shell 配置文件中有对 ccmanrc 的引用
|
|
84
|
+
*/
|
|
85
|
+
async ensureShellReference() {
|
|
86
|
+
const shellType = this.detectShell();
|
|
87
|
+
const configFiles = this.getShellConfigFiles(shellType);
|
|
88
|
+
// 检查是否已经有引用
|
|
89
|
+
for (const configFile of configFiles) {
|
|
90
|
+
if (fs.existsSync(configFile)) {
|
|
91
|
+
const content = fs.readFileSync(configFile, 'utf8');
|
|
92
|
+
if (this.hasShellReference(content)) {
|
|
93
|
+
return { updated: false, action: 'already exists' };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 添加引用到主配置文件
|
|
98
|
+
const primaryConfigFile = configFiles[0];
|
|
99
|
+
try {
|
|
100
|
+
await this.addShellReference(primaryConfigFile);
|
|
101
|
+
return {
|
|
102
|
+
updated: true,
|
|
103
|
+
action: 'added',
|
|
104
|
+
filePath: primaryConfigFile
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
// 尝试其他配置文件
|
|
109
|
+
for (let i = 1; i < configFiles.length; i++) {
|
|
110
|
+
try {
|
|
111
|
+
await this.addShellReference(configFiles[i]);
|
|
112
|
+
return {
|
|
113
|
+
updated: true,
|
|
114
|
+
action: 'added (fallback)',
|
|
115
|
+
filePath: configFiles[i]
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (fallbackError) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
throw new Error('Failed to add shell reference to any configuration file');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 添加 shell 引用到配置文件
|
|
127
|
+
*/
|
|
128
|
+
async addShellReference(configFilePath) {
|
|
129
|
+
// 确保目录存在
|
|
130
|
+
const dir = path.dirname(configFilePath);
|
|
131
|
+
if (!fs.existsSync(dir)) {
|
|
132
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
let content = '';
|
|
135
|
+
if (fs.existsSync(configFilePath)) {
|
|
136
|
+
content = fs.readFileSync(configFilePath, 'utf8');
|
|
137
|
+
}
|
|
138
|
+
// 添加对 ccmanrc 的引用
|
|
139
|
+
const reference = this.generateShellReference();
|
|
140
|
+
content += reference;
|
|
141
|
+
fs.writeFileSync(configFilePath, content);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 生成 shell 引用代码
|
|
145
|
+
*/
|
|
146
|
+
generateShellReference() {
|
|
147
|
+
return `
|
|
148
|
+
# ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference
|
|
149
|
+
# This line sources ${constants_1.CONFIG.APP_NAME} environment variables from ${this.ccmanrcPath}
|
|
150
|
+
[ -f "${this.ccmanrcPath}" ] && source "${this.ccmanrcPath}"
|
|
151
|
+
# End ${constants_1.CONFIG.APP_NAME} Reference
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 检查是否已经有 shell 引用
|
|
156
|
+
*/
|
|
157
|
+
hasShellReference(content) {
|
|
158
|
+
return content.includes(`# ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference`) ||
|
|
159
|
+
content.includes(this.ccmanrcPath);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 从 shell 配置文件中清除 ccmanrc 引用和 ccmanrc 文件
|
|
163
|
+
*/
|
|
164
|
+
async clearFromShell() {
|
|
165
|
+
let clearedAny = false;
|
|
166
|
+
let lastError;
|
|
167
|
+
// 1. 删除 ccmanrc 文件
|
|
168
|
+
if (fs.existsSync(this.ccmanrcPath)) {
|
|
169
|
+
try {
|
|
170
|
+
fs.unlinkSync(this.ccmanrcPath);
|
|
171
|
+
clearedAny = true;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
lastError = String(error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// 2. 从 shell 配置文件中移除引用
|
|
178
|
+
const shellType = this.detectShell();
|
|
179
|
+
const configFiles = this.getShellConfigFiles(shellType);
|
|
180
|
+
for (const configFile of configFiles) {
|
|
181
|
+
try {
|
|
182
|
+
if (fs.existsSync(configFile)) {
|
|
183
|
+
await this.removeShellReference(configFile);
|
|
184
|
+
clearedAny = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
lastError = String(error);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (clearedAny) {
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
filePath: this.ccmanrcPath,
|
|
195
|
+
message: 'Environment variables and shell references cleared'
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
return {
|
|
200
|
+
success: false,
|
|
201
|
+
filePath: this.ccmanrcPath,
|
|
202
|
+
message: 'Failed to clear environment variables',
|
|
203
|
+
error: lastError
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 从配置文件中移除 shell 引用
|
|
209
|
+
*/
|
|
210
|
+
async removeShellReference(filePath) {
|
|
211
|
+
if (!fs.existsSync(filePath)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
215
|
+
const cleanedContent = this.removeShellReferenceFromContent(content);
|
|
216
|
+
fs.writeFileSync(filePath, cleanedContent);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* 从内容中移除 shell 引用部分
|
|
220
|
+
*/
|
|
221
|
+
removeShellReferenceFromContent(content) {
|
|
222
|
+
const startMarker = `# ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference`;
|
|
223
|
+
const endMarker = `# End ${constants_1.CONFIG.APP_NAME} Reference`;
|
|
224
|
+
const lines = content.split('\n');
|
|
225
|
+
const filteredLines = [];
|
|
226
|
+
let inCCMSection = false;
|
|
227
|
+
for (const line of lines) {
|
|
228
|
+
if (line.includes(startMarker)) {
|
|
229
|
+
inCCMSection = true;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (line.includes(endMarker)) {
|
|
233
|
+
inCCMSection = false;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (!inCCMSection) {
|
|
237
|
+
filteredLines.push(line);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return filteredLines.join('\n').replace(/\n{3,}/g, '\n\n');
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* 检测当前使用的 shell 类型
|
|
244
|
+
*/
|
|
245
|
+
detectShell() {
|
|
246
|
+
const shell = process.env.SHELL || '';
|
|
247
|
+
if (shell.includes('zsh')) {
|
|
248
|
+
return 'zsh';
|
|
249
|
+
}
|
|
250
|
+
else if (shell.includes('bash')) {
|
|
251
|
+
return 'bash';
|
|
252
|
+
}
|
|
253
|
+
else if (shell.includes('fish')) {
|
|
254
|
+
return 'fish';
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
return 'unknown';
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 获取 shell 配置文件路径列表
|
|
262
|
+
*/
|
|
263
|
+
getShellConfigFiles(shellType) {
|
|
264
|
+
const configFiles = [];
|
|
265
|
+
switch (shellType) {
|
|
266
|
+
case 'zsh':
|
|
267
|
+
configFiles.push(path.join(this.homeDir, '.zshrc'), path.join(this.homeDir, '.zprofile'));
|
|
268
|
+
break;
|
|
269
|
+
case 'bash':
|
|
270
|
+
configFiles.push(path.join(this.homeDir, '.bashrc'), path.join(this.homeDir, '.bash_profile'), path.join(this.homeDir, '.profile'));
|
|
271
|
+
break;
|
|
272
|
+
case 'fish':
|
|
273
|
+
configFiles.push(path.join(this.homeDir, '.config/fish/config.fish'));
|
|
274
|
+
break;
|
|
275
|
+
default:
|
|
276
|
+
// 默认尝试常见的配置文件
|
|
277
|
+
configFiles.push(path.join(this.homeDir, '.zshrc'), path.join(this.homeDir, '.bashrc'), path.join(this.homeDir, '.profile'));
|
|
278
|
+
}
|
|
279
|
+
return configFiles;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* 生成环境变量导出语句
|
|
283
|
+
*/
|
|
284
|
+
generateExportStatements(envVars, envName) {
|
|
285
|
+
const now = new Date();
|
|
286
|
+
const timestamp = now.getFullYear() + '-' +
|
|
287
|
+
String(now.getMonth() + 1).padStart(2, '0') + '-' +
|
|
288
|
+
String(now.getDate()).padStart(2, '0') + ' ' +
|
|
289
|
+
String(now.getHours()).padStart(2, '0') + ':' +
|
|
290
|
+
String(now.getMinutes()).padStart(2, '0') + ':' +
|
|
291
|
+
String(now.getSeconds()).padStart(2, '0');
|
|
292
|
+
const nameComment = envName ? `# Environment: ${envName}` : '';
|
|
293
|
+
return `
|
|
294
|
+
# ${constants_1.CONFIG.APP_FULL_NAME} Environment Variables - Auto Generated
|
|
295
|
+
# Generated at: ${timestamp}${nameComment ? '\n' + nameComment : ''}
|
|
296
|
+
export ${constants_1.CONFIG.ENV_VARS.BASE_URL}="${envVars.ANTHROPIC_BASE_URL}"
|
|
297
|
+
export ${constants_1.CONFIG.ENV_VARS.AUTH_TOKEN}="${envVars.ANTHROPIC_AUTH_TOKEN}"
|
|
298
|
+
# End ${constants_1.CONFIG.APP_NAME} Environment Variables
|
|
299
|
+
`;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* 检查是否已经写入了环境变量
|
|
303
|
+
*/
|
|
304
|
+
hasEnvVarsInShell() {
|
|
305
|
+
// 检查 ccmanrc 文件是否存在
|
|
306
|
+
if (fs.existsSync(this.ccmanrcPath)) {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
// 检查 shell 配置文件中是否有引用
|
|
310
|
+
const shellType = this.detectShell();
|
|
311
|
+
const configFiles = this.getShellConfigFiles(shellType);
|
|
312
|
+
for (const configFile of configFiles) {
|
|
313
|
+
if (fs.existsSync(configFile)) {
|
|
314
|
+
const content = fs.readFileSync(configFile, 'utf8');
|
|
315
|
+
if (this.hasShellReference(content)) {
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* 自动 source shell 配置文件
|
|
324
|
+
*/
|
|
325
|
+
async autoSourceShell() {
|
|
326
|
+
const shellType = this.detectShell();
|
|
327
|
+
const configFiles = this.getShellConfigFiles(shellType);
|
|
328
|
+
// 找到第一个存在的配置文件
|
|
329
|
+
const activeConfigFile = configFiles.find(file => fs.existsSync(file));
|
|
330
|
+
if (!activeConfigFile) {
|
|
331
|
+
return {
|
|
332
|
+
success: false,
|
|
333
|
+
filePath: configFiles.join(', '),
|
|
334
|
+
message: 'No shell configuration file found to source',
|
|
335
|
+
error: 'Configuration file not found'
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
try {
|
|
339
|
+
// 使用子进程执行 source 命令
|
|
340
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
341
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
|
|
342
|
+
const execAsync = promisify(exec);
|
|
343
|
+
// 根据不同 shell 类型使用不同的 source 命令
|
|
344
|
+
let sourceCommand;
|
|
345
|
+
switch (shellType) {
|
|
346
|
+
case 'zsh':
|
|
347
|
+
sourceCommand = `zsh -c "source ${activeConfigFile}"`;
|
|
348
|
+
break;
|
|
349
|
+
case 'bash':
|
|
350
|
+
sourceCommand = `bash -c "source ${activeConfigFile}"`;
|
|
351
|
+
break;
|
|
352
|
+
case 'fish':
|
|
353
|
+
sourceCommand = `fish -c "source ${activeConfigFile}"`;
|
|
354
|
+
break;
|
|
355
|
+
default:
|
|
356
|
+
sourceCommand = `bash -c "source ${activeConfigFile}"`;
|
|
357
|
+
}
|
|
358
|
+
await execAsync(sourceCommand);
|
|
359
|
+
return {
|
|
360
|
+
success: true,
|
|
361
|
+
filePath: activeConfigFile,
|
|
362
|
+
message: `Successfully sourced ${activeConfigFile}`
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
return {
|
|
367
|
+
success: false,
|
|
368
|
+
filePath: activeConfigFile,
|
|
369
|
+
message: 'Failed to source shell configuration file',
|
|
370
|
+
error: String(error)
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* 获取当前 shell 信息
|
|
376
|
+
*/
|
|
377
|
+
getShellInfo() {
|
|
378
|
+
const shellType = this.detectShell();
|
|
379
|
+
const configFiles = this.getShellConfigFiles(shellType);
|
|
380
|
+
// 找到第一个存在的配置文件作为活动配置文件
|
|
381
|
+
const activeConfigFile = configFiles.find(file => fs.existsSync(file));
|
|
382
|
+
return {
|
|
383
|
+
shellType,
|
|
384
|
+
shellPath: process.env.SHELL || 'unknown',
|
|
385
|
+
configFiles,
|
|
386
|
+
activeConfigFile
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
exports.ShellManager = ShellManager;
|
|
391
|
+
//# sourceMappingURL=ShellManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellManager.js","sourceRoot":"","sources":["../../src/shell/ShellManager.ts"],"names":[],"mappings":"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"}
|