coding-config 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +194 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +21 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +212 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +197 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/publish.d.ts +5 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +172 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/register.d.ts +5 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +110 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +73 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +70 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +85 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +50 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +166 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/conflict.d.ts +25 -0
- package/dist/utils/conflict.d.ts.map +1 -0
- package/dist/utils/conflict.js +183 -0
- package/dist/utils/conflict.js.map +1 -0
- package/dist/utils/diff.d.ts +8 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +152 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/git.d.ts +73 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +259 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/merge.d.ts +21 -0
- package/dist/utils/merge.d.ts.map +1 -0
- package/dist/utils/merge.js +273 -0
- package/dist/utils/merge.js.map +1 -0
- package/dist/utils/prompt.d.ts +27 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +183 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/sync-record.d.ts +30 -0
- package/dist/utils/sync-record.d.ts.map +1 -0
- package/dist/utils/sync-record.js +151 -0
- package/dist/utils/sync-record.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Coding Config
|
|
2
|
+
|
|
3
|
+
CLI 工具,用于管理和同步编程配置,支持多团队协作。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- 📦 按 commands/hooks/skills/agents 目录组织配置
|
|
8
|
+
- 👥 支持多团队独立管理和发布配置
|
|
9
|
+
- 🔄 智能冲突检测和解决
|
|
10
|
+
- 🎯 个人级和项目级配置支持
|
|
11
|
+
- 🚀 基于 Git + GitHub PR 的轻量级治理
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g coding-config
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 快速开始
|
|
20
|
+
|
|
21
|
+
### 1. 注册团队
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
coding-config register <team-name>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
注册你的团队名称,后续操作将基于此团队。
|
|
28
|
+
|
|
29
|
+
### 2. 安装配置
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 安装已注册团队的配置
|
|
33
|
+
coding-config install
|
|
34
|
+
|
|
35
|
+
# 安装指定团队的配置
|
|
36
|
+
coding-config install team-a
|
|
37
|
+
|
|
38
|
+
# 安装基础配置包
|
|
39
|
+
coding-config install base
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
安装时会交互式选择配置级别:
|
|
43
|
+
- **个人级**: 安装到 `~/.claude/`
|
|
44
|
+
- **项目级**: 安装到当前目录或指定路径的 `.claude/`
|
|
45
|
+
|
|
46
|
+
### 3. 修改配置
|
|
47
|
+
|
|
48
|
+
直接编辑本地配置文件(`~/.claude/` 或 `./claude/`)。
|
|
49
|
+
|
|
50
|
+
### 4. 发布配置
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
coding-config publish
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
发布时会:
|
|
57
|
+
1. 交互式选择发布来源(个人级/项目级)
|
|
58
|
+
2. 自动创建 Pull Request
|
|
59
|
+
3. 等待团队 Review 后合并
|
|
60
|
+
|
|
61
|
+
### 5. 查看状态
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
coding-config status
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
查看当前注册的团队、配置路径等信息。
|
|
68
|
+
|
|
69
|
+
## 配置仓库结构
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
claude-configs/
|
|
73
|
+
├── config-base/ # 基础配置包
|
|
74
|
+
│ ├── commands/
|
|
75
|
+
│ ├── hooks/
|
|
76
|
+
│ ├── skills/
|
|
77
|
+
│ └── agents/
|
|
78
|
+
├── team-a/ # 团队 A 配置
|
|
79
|
+
│ ├── commands/
|
|
80
|
+
│ ├── hooks/
|
|
81
|
+
│ ├── skills/
|
|
82
|
+
│ └── agents/
|
|
83
|
+
└── team-b/ # 团队 B 配置
|
|
84
|
+
└── ...
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 冲突处理
|
|
88
|
+
|
|
89
|
+
安装时如果检测到冲突,工具会交互式提示处理方式:
|
|
90
|
+
|
|
91
|
+
- **远程删除** - 自动删除本地文件
|
|
92
|
+
- **本地和远程都有修改** - 交互式选择保留哪个版本
|
|
93
|
+
- **本地额外文件** - 保留不变
|
|
94
|
+
|
|
95
|
+
## 工作流程
|
|
96
|
+
|
|
97
|
+
### 团队首次使用
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# 1. 注册团队
|
|
101
|
+
claude-config register team-a
|
|
102
|
+
|
|
103
|
+
# 2. 安装基础配置
|
|
104
|
+
coding-config install base
|
|
105
|
+
|
|
106
|
+
# 3. 修改配置
|
|
107
|
+
# 编辑 ~/.claude/ 或 ./claude/ 下的文件
|
|
108
|
+
|
|
109
|
+
# 4. 发布配置
|
|
110
|
+
coding-config publish
|
|
111
|
+
|
|
112
|
+
# 5. Review PR 并合并
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 其他成员使用
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 1. 注册同一团队
|
|
119
|
+
claude-config register team-a
|
|
120
|
+
|
|
121
|
+
# 2. 安装配置
|
|
122
|
+
coding-config install
|
|
123
|
+
|
|
124
|
+
# 3. 开始使用
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 更新配置
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# 1. 修改本地配置
|
|
131
|
+
# 编辑配置文件
|
|
132
|
+
|
|
133
|
+
# 2. 发布更新
|
|
134
|
+
coding-config publish
|
|
135
|
+
|
|
136
|
+
# 3. 其他成员安装更新
|
|
137
|
+
coding-config install
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 配置说明
|
|
141
|
+
|
|
142
|
+
工具配置存储在 `~/.coding-config/config.json`:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"registeredTeam": "team-a",
|
|
147
|
+
"githubToken": "ghp_xxx",
|
|
148
|
+
"repoUrl": "https://github.com/your-org/claude-configs.git"
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
- **registeredTeam**: 已注册的团队名称
|
|
153
|
+
- **githubToken**: GitHub Token(用于创建 PR)
|
|
154
|
+
- **repoUrl**: 配置仓库地址
|
|
155
|
+
|
|
156
|
+
## GitHub Token
|
|
157
|
+
|
|
158
|
+
首次 `publish` 时需要输入 GitHub Token,用于创建 Pull Request。
|
|
159
|
+
|
|
160
|
+
**创建 Token:**
|
|
161
|
+
1. 访问 https://github.com/settings/tokens
|
|
162
|
+
2. 创建 Personal Access Token
|
|
163
|
+
3. 权限选择: `repo`
|
|
164
|
+
|
|
165
|
+
Token 会安全存储在本地配置文件中。
|
|
166
|
+
|
|
167
|
+
## 开发
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# 安装依赖
|
|
171
|
+
npm install
|
|
172
|
+
|
|
173
|
+
# 开发模式
|
|
174
|
+
npm run dev
|
|
175
|
+
|
|
176
|
+
# 编译
|
|
177
|
+
npm run build
|
|
178
|
+
|
|
179
|
+
# 本地测试
|
|
180
|
+
npm link
|
|
181
|
+
coding-config --help
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## 技术栈
|
|
185
|
+
|
|
186
|
+
- TypeScript
|
|
187
|
+
- Commander.js (CLI 框架)
|
|
188
|
+
- Simple-Git (Git 操作)
|
|
189
|
+
- Inquirer (交互式提示)
|
|
190
|
+
- Octokit (GitHub API)
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const register_1 = require("./commands/register");
|
|
10
|
+
const status_1 = require("./commands/status");
|
|
11
|
+
const install_1 = require("./commands/install");
|
|
12
|
+
const publish_1 = require("./commands/publish");
|
|
13
|
+
const config_1 = require("./commands/config");
|
|
14
|
+
const program = new commander_1.Command();
|
|
15
|
+
program
|
|
16
|
+
.name('coding-config')
|
|
17
|
+
.description('CLI tool for managing and syncing coding configurations across teams')
|
|
18
|
+
.version('1.0.0');
|
|
19
|
+
// register 命令
|
|
20
|
+
program
|
|
21
|
+
.command('register <team-name>')
|
|
22
|
+
.description('注册团队配置')
|
|
23
|
+
.action(async (teamName) => {
|
|
24
|
+
await (0, register_1.registerCommand)(teamName);
|
|
25
|
+
});
|
|
26
|
+
// config 命令
|
|
27
|
+
program
|
|
28
|
+
.command('config [action] [value...]')
|
|
29
|
+
.description('配置管理 (repo, card-id, github-token, view)')
|
|
30
|
+
.action(async (action, value) => {
|
|
31
|
+
// 将数组合并为字符串
|
|
32
|
+
const valueStr = value && value.length > 0 ? value.join(' ') : undefined;
|
|
33
|
+
await (0, config_1.configCommand)(action, valueStr);
|
|
34
|
+
});
|
|
35
|
+
// status 命令
|
|
36
|
+
program
|
|
37
|
+
.command('status')
|
|
38
|
+
.description('查看当前配置状态')
|
|
39
|
+
.action(async () => {
|
|
40
|
+
await (0, status_1.statusCommand)();
|
|
41
|
+
});
|
|
42
|
+
// install 命令
|
|
43
|
+
program
|
|
44
|
+
.command('install [team-name]')
|
|
45
|
+
.description('安装配置(不指定团队名称则使用已注册的团队)')
|
|
46
|
+
.action(async (teamName) => {
|
|
47
|
+
await (0, install_1.installCommand)(teamName);
|
|
48
|
+
});
|
|
49
|
+
// publish 命令
|
|
50
|
+
program
|
|
51
|
+
.command('publish')
|
|
52
|
+
.description('发布配置(创建 Code Review)')
|
|
53
|
+
.action(async () => {
|
|
54
|
+
await (0, publish_1.publishCommand)();
|
|
55
|
+
});
|
|
56
|
+
// 错误处理
|
|
57
|
+
program.exitOverride((err) => {
|
|
58
|
+
if (err.code === 'commander.unknownCommand') {
|
|
59
|
+
console.error(chalk_1.default.red(`错误: 未知命令 "${err.message}"`));
|
|
60
|
+
console.log(chalk_1.default.gray('运行 "coding-config --help" 查看可用命令'));
|
|
61
|
+
}
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
// 解析命令行参数
|
|
65
|
+
program.parse(process.argv);
|
|
66
|
+
// 如果没有提供任何命令,显示帮助
|
|
67
|
+
if (!process.argv.slice(2).length) {
|
|
68
|
+
program.outputHelp();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,kDAAsD;AACtD,8CAAkD;AAClD,gDAAoD;AACpD,gDAAoD;AACpD,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,sEAAsE,CAAC;KACnF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,sBAAsB,CAAC;KAC/B,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;IACjC,MAAM,IAAA,0BAAe,EAAC,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,4BAA4B,CAAC;KACrC,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,MAAe,EAAE,KAAgB,EAAE,EAAE;IAClD,YAAY;IACZ,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,IAAA,sBAAa,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEL,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,UAAU,CAAC;KACvB,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,aAAa;AACb,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,EAAE;IAClC,MAAM,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,aAAa;AACb,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,wBAAc,GAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO;AACP,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,UAAU;AACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,kBAAkB;AAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 设置仓库 URL
|
|
3
|
+
*/
|
|
4
|
+
export declare function setRepoUrl(repoUrl?: string): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* 设置 GitHub Token
|
|
7
|
+
*/
|
|
8
|
+
export declare function setToken(token?: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* 设置 CardID
|
|
11
|
+
*/
|
|
12
|
+
export declare function setCardId(cardId?: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* 查看配置
|
|
15
|
+
*/
|
|
16
|
+
export declare function viewConfig(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* 配置命令主入口
|
|
19
|
+
*/
|
|
20
|
+
export declare function configCommand(action?: string, value?: string): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C9D;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAkChD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.setRepoUrl = setRepoUrl;
|
|
7
|
+
exports.setToken = setToken;
|
|
8
|
+
exports.setCardId = setCardId;
|
|
9
|
+
exports.viewConfig = viewConfig;
|
|
10
|
+
exports.configCommand = configCommand;
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
const ora_1 = __importDefault(require("ora"));
|
|
14
|
+
const config_1 = require("../utils/config");
|
|
15
|
+
/**
|
|
16
|
+
* 设置仓库 URL
|
|
17
|
+
*/
|
|
18
|
+
async function setRepoUrl(repoUrl) {
|
|
19
|
+
try {
|
|
20
|
+
let url = repoUrl;
|
|
21
|
+
// 如果没有提供 URL,交互式询问
|
|
22
|
+
if (!url) {
|
|
23
|
+
const answers = await inquirer_1.default.prompt([
|
|
24
|
+
{
|
|
25
|
+
type: 'input',
|
|
26
|
+
name: 'repoUrl',
|
|
27
|
+
message: '请输入 Git 仓库地址:',
|
|
28
|
+
validate: (input) => {
|
|
29
|
+
if (!input || !input.trim()) {
|
|
30
|
+
return '仓库地址不能为空';
|
|
31
|
+
}
|
|
32
|
+
// 简单验证 Git URL 格式
|
|
33
|
+
if (!input.startsWith('http://') &&
|
|
34
|
+
!input.startsWith('https://') &&
|
|
35
|
+
!input.startsWith('git@') &&
|
|
36
|
+
!input.startsWith('ssh://')) {
|
|
37
|
+
return '请输入有效的 Git 仓库地址';
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
url = answers.repoUrl.trim();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
url = url.trim();
|
|
47
|
+
}
|
|
48
|
+
const spinner = (0, ora_1.default)('正在保存配置...').start();
|
|
49
|
+
await (0, config_1.updateConfig)({ repoUrl: url });
|
|
50
|
+
spinner.succeed(chalk_1.default.green(`成功设置仓库地址: ${url}`));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(chalk_1.default.red('设置失败:'), error);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 设置 GitHub Token
|
|
59
|
+
*/
|
|
60
|
+
async function setToken(token) {
|
|
61
|
+
try {
|
|
62
|
+
let githubToken = token;
|
|
63
|
+
// 如果没有提供 Token,交互式询问
|
|
64
|
+
if (!githubToken) {
|
|
65
|
+
const answers = await inquirer_1.default.prompt([
|
|
66
|
+
{
|
|
67
|
+
type: 'password',
|
|
68
|
+
name: 'token',
|
|
69
|
+
message: '请输入 GitHub Token (用于创建 PR):',
|
|
70
|
+
mask: '*',
|
|
71
|
+
validate: (input) => {
|
|
72
|
+
if (!input || !input.trim()) {
|
|
73
|
+
return 'Token 不能为空';
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
githubToken = answers.token.trim();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
githubToken = githubToken.trim();
|
|
83
|
+
}
|
|
84
|
+
const spinner = (0, ora_1.default)('正在保存配置...').start();
|
|
85
|
+
await (0, config_1.updateConfig)({ githubToken });
|
|
86
|
+
const maskedToken = githubToken.substring(0, 4) + '****' + githubToken.substring(githubToken.length - 4);
|
|
87
|
+
spinner.succeed(chalk_1.default.green(`成功设置 GitHub Token: ${maskedToken}`));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(chalk_1.default.red('设置失败:'), error);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 设置 CardID
|
|
96
|
+
*/
|
|
97
|
+
async function setCardId(cardId) {
|
|
98
|
+
try {
|
|
99
|
+
let iCafeCardId = cardId;
|
|
100
|
+
// 如果没有提供 CardID,交互式询问
|
|
101
|
+
if (!iCafeCardId) {
|
|
102
|
+
const answers = await inquirer_1.default.prompt([
|
|
103
|
+
{
|
|
104
|
+
type: 'input',
|
|
105
|
+
name: 'cardId',
|
|
106
|
+
message: '请输入 iCafe CardID (如 icode-5481):',
|
|
107
|
+
validate: (input) => {
|
|
108
|
+
if (!input || !input.trim()) {
|
|
109
|
+
return 'CardID 不能为空';
|
|
110
|
+
}
|
|
111
|
+
// 验证格式: xxx-数字
|
|
112
|
+
if (!/^[a-zA-Z]+-\d+$/.test(input.trim())) {
|
|
113
|
+
return '格式错误,正确格式如: icode-5481';
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
]);
|
|
119
|
+
iCafeCardId = answers.cardId.trim();
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
iCafeCardId = iCafeCardId.trim();
|
|
123
|
+
// 验证格式
|
|
124
|
+
if (!/^[a-zA-Z]+-\d+$/.test(iCafeCardId)) {
|
|
125
|
+
console.error(chalk_1.default.red('格式错误,正确格式如: icode-5481'));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const spinner = (0, ora_1.default)('正在保存配置...').start();
|
|
130
|
+
await (0, config_1.updateConfig)({ cardId: iCafeCardId });
|
|
131
|
+
spinner.succeed(chalk_1.default.green(`成功设置 CardID: ${iCafeCardId}`));
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error(chalk_1.default.red('设置失败:'), error);
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 查看配置
|
|
140
|
+
*/
|
|
141
|
+
async function viewConfig() {
|
|
142
|
+
try {
|
|
143
|
+
const config = await (0, config_1.readConfig)();
|
|
144
|
+
console.log(chalk_1.default.bold('\n⚙️ 配置信息\n'));
|
|
145
|
+
console.log(chalk_1.default.cyan('仓库地址:'), config.repoUrl || chalk_1.default.gray('未设置'));
|
|
146
|
+
if (config.githubToken) {
|
|
147
|
+
const maskedToken = config.githubToken.substring(0, 4) +
|
|
148
|
+
'****' +
|
|
149
|
+
config.githubToken.substring(config.githubToken.length - 4);
|
|
150
|
+
console.log(chalk_1.default.cyan('GitHub Token:'), maskedToken);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.log(chalk_1.default.cyan('GitHub Token:'), chalk_1.default.gray('未设置'));
|
|
154
|
+
}
|
|
155
|
+
if (config.cardId) {
|
|
156
|
+
console.log(chalk_1.default.cyan('iCafe CardID:'), chalk_1.default.bold(config.cardId));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(chalk_1.default.cyan('iCafe CardID:'), chalk_1.default.gray('未设置'));
|
|
160
|
+
}
|
|
161
|
+
if (config.registeredTeam) {
|
|
162
|
+
console.log(chalk_1.default.cyan('已注册团队:'), chalk_1.default.bold(config.registeredTeam));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(chalk_1.default.cyan('已注册团队:'), chalk_1.default.gray('未注册'));
|
|
166
|
+
}
|
|
167
|
+
console.log('');
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error(chalk_1.default.red('读取配置失败:'), error);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* 配置命令主入口
|
|
176
|
+
*/
|
|
177
|
+
async function configCommand(action, value) {
|
|
178
|
+
if (!action) {
|
|
179
|
+
// 如果没有提供操作,显示当前配置
|
|
180
|
+
await viewConfig();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
switch (action.toLowerCase()) {
|
|
184
|
+
case 'repo':
|
|
185
|
+
case 'set-repo':
|
|
186
|
+
await setRepoUrl(value);
|
|
187
|
+
break;
|
|
188
|
+
case 'card-id':
|
|
189
|
+
case 'cardid':
|
|
190
|
+
case 'set-cardid':
|
|
191
|
+
await setCardId(value);
|
|
192
|
+
break;
|
|
193
|
+
case 'github-token':
|
|
194
|
+
case 'token':
|
|
195
|
+
case 'set-token':
|
|
196
|
+
await setToken(value);
|
|
197
|
+
break;
|
|
198
|
+
case 'view':
|
|
199
|
+
case 'show':
|
|
200
|
+
await viewConfig();
|
|
201
|
+
break;
|
|
202
|
+
default:
|
|
203
|
+
console.error(chalk_1.default.red(`未知操作: ${action}`));
|
|
204
|
+
console.log(chalk_1.default.gray('\n可用操作:'));
|
|
205
|
+
console.log(chalk_1.default.gray(' repo - 设置仓库地址'));
|
|
206
|
+
console.log(chalk_1.default.gray(' card-id - 设置 iCafe CardID'));
|
|
207
|
+
console.log(chalk_1.default.gray(' github-token - 设置 GitHub Token'));
|
|
208
|
+
console.log(chalk_1.default.gray(' view - 查看配置'));
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAoCA;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJrE"}
|