coding-config 1.0.0 → 1.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/README.md +369 -65
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +16 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -2
- package/dist/constants.js.map +1 -1
- package/dist/utils/conflict.d.ts.map +1 -1
- package/dist/utils/conflict.js +4 -0
- package/dist/utils/conflict.js.map +1 -1
- package/dist/utils/script.d.ts +15 -0
- package/dist/utils/script.d.ts.map +1 -0
- package/dist/utils/script.js +144 -0
- package/dist/utils/script.js.map +1 -0
- package/dist/utils/sync-record.d.ts.map +1 -1
- package/dist/utils/sync-record.js +2 -0
- package/dist/utils/sync-record.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
# Coding Config
|
|
2
2
|
|
|
3
|
-
CLI
|
|
3
|
+
CLI 工具,用于管理和同步编程配置(commands/hooks/skills/agents/scripts),支持多团队协作与 Git 工作流。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
|
-
- 📦 按 commands/hooks/skills/agents 目录组织配置
|
|
7
|
+
- 📦 按 commands/hooks/skills/agents/scripts 目录组织配置
|
|
8
8
|
- 👥 支持多团队独立管理和发布配置
|
|
9
|
-
- 🔄
|
|
10
|
-
- 🎯
|
|
11
|
-
- 🚀
|
|
9
|
+
- 🔄 智能冲突检测和交互式解决
|
|
10
|
+
- 🎯 个人级(`~/.claude/`)和项目级(`./.claude/`)配置支持
|
|
11
|
+
- 🚀 双平台支持:GitHub Pull Request 和 Gerrit/iCode Code Review
|
|
12
|
+
- 🔍 自动识别 Git 平台类型并适配工作流
|
|
13
|
+
- 🛠️ 自动安装 shell 脚本为全局命令(符号链接到 `~/.local/bin`)
|
|
12
14
|
|
|
13
15
|
## 安装
|
|
14
16
|
|
|
@@ -18,15 +20,105 @@ npm install -g coding-config
|
|
|
18
20
|
|
|
19
21
|
## 快速开始
|
|
20
22
|
|
|
21
|
-
### 1.
|
|
23
|
+
### 1. 配置仓库
|
|
24
|
+
|
|
25
|
+
首次使用需要配置 Git 仓库地址:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 方式 1: 直接设置(目前代码仓库为:ssh://liumengxin02@icode.baidu.com:8235/baidu/SQC-EE/ai-stack)
|
|
29
|
+
coding-config config repo https://github.com/your-org/coding-configs.git
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# 方式 2: 交互式设置
|
|
33
|
+
coding-config config repo
|
|
34
|
+
|
|
35
|
+
# 查看当前配置
|
|
36
|
+
coding-config config
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**支持的仓库类型:**
|
|
40
|
+
- **GitHub**: 需额外配置 GitHub Token(用于创建 PR)
|
|
41
|
+
- **Gerrit/iCode**: 使用 SSH 认证,需配置 CardID(如 `icode-5481`)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# GitHub 平台配置 Token
|
|
45
|
+
coding-config config github-token ghp_xxx
|
|
46
|
+
|
|
47
|
+
# Gerrit/iCode 平台配置 CardID
|
|
48
|
+
coding-config config card-id icode-5481
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. 安装基础配置
|
|
52
|
+
|
|
53
|
+
仓库中 `base` 目录保存基础配置包:
|
|
22
54
|
|
|
23
55
|
```bash
|
|
56
|
+
coding-config install base
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
安装时会交互式选择配置级别:
|
|
60
|
+
- **个人级**: 安装到 `~/.claude/`
|
|
61
|
+
- **项目级**: 安装到当前目录或指定路径的 `.claude/`
|
|
62
|
+
|
|
63
|
+
### 3. 团队配置管理(可选)
|
|
64
|
+
|
|
65
|
+
如果需要管理团队配置,可以注册团队:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 注册团队
|
|
24
69
|
coding-config register <team-name>
|
|
70
|
+
|
|
71
|
+
# 安装已注册团队的配置
|
|
72
|
+
coding-config install
|
|
73
|
+
|
|
74
|
+
# 或安装指定团队的配置
|
|
75
|
+
coding-config install team-a
|
|
76
|
+
|
|
77
|
+
# 修改本地配置后发布
|
|
78
|
+
# 编辑 ~/.claude/ 或 ./.claude/ 下的文件
|
|
79
|
+
coding-config publish
|
|
80
|
+
|
|
81
|
+
# 查看当前状态
|
|
82
|
+
coding-config status
|
|
25
83
|
```
|
|
26
84
|
|
|
27
|
-
|
|
85
|
+
发布时会根据仓库类型自动创建:
|
|
86
|
+
- **GitHub**: 创建 Pull Request
|
|
87
|
+
- **Gerrit/iCode**: 创建 Code Review
|
|
28
88
|
|
|
29
|
-
|
|
89
|
+
## 命令参考
|
|
90
|
+
|
|
91
|
+
### `config` - 配置管理
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# 查看当前配置
|
|
95
|
+
coding-config config
|
|
96
|
+
|
|
97
|
+
# 设置仓库地址
|
|
98
|
+
coding-config config repo <git-url>
|
|
99
|
+
|
|
100
|
+
# 设置 GitHub Token(GitHub 平台)
|
|
101
|
+
coding-config config github-token <token>
|
|
102
|
+
|
|
103
|
+
# 设置 CardID(Gerrit/iCode 平台)
|
|
104
|
+
coding-config config card-id <card-id>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**支持的子命令:**
|
|
108
|
+
- `repo` / `set-repo` - 设置仓库地址
|
|
109
|
+
- `github-token` / `token` / `set-token` - 设置 GitHub Token
|
|
110
|
+
- `card-id` / `cardid` / `set-cardid` - 设置 iCode/Gerrit CardID
|
|
111
|
+
- `view` / `show` - 查看配置(默认)
|
|
112
|
+
|
|
113
|
+
### `register` - 注册团队
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
coding-config register <team-name>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
注册团队后,`install` 和 `publish` 命令将默认使用该团队。
|
|
120
|
+
|
|
121
|
+
### `install` - 安装配置
|
|
30
122
|
|
|
31
123
|
```bash
|
|
32
124
|
# 安装已注册团队的配置
|
|
@@ -39,15 +131,13 @@ coding-config install team-a
|
|
|
39
131
|
coding-config install base
|
|
40
132
|
```
|
|
41
133
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
134
|
+
安装时会:
|
|
135
|
+
1. 交互式选择配置级别(个人级/项目级)
|
|
136
|
+
2. 检测本地与远程冲突
|
|
137
|
+
3. 提供冲突解决选项(保留本地/使用远程)
|
|
138
|
+
4. 自动安装 `scripts/` 目录下的 `.sh` 脚本为全局命令(创建符号链接到 `~/.local/bin`)
|
|
47
139
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### 4. 发布配置
|
|
140
|
+
### `publish` - 发布配置
|
|
51
141
|
|
|
52
142
|
```bash
|
|
53
143
|
coding-config publish
|
|
@@ -55,77 +145,193 @@ coding-config publish
|
|
|
55
145
|
|
|
56
146
|
发布时会:
|
|
57
147
|
1. 交互式选择发布来源(个人级/项目级)
|
|
58
|
-
2.
|
|
148
|
+
2. 检测仓库类型并自动创建 PR 或 CR
|
|
59
149
|
3. 等待团队 Review 后合并
|
|
60
150
|
|
|
61
|
-
###
|
|
151
|
+
### `status` - 查看状态
|
|
62
152
|
|
|
63
153
|
```bash
|
|
64
154
|
coding-config status
|
|
65
155
|
```
|
|
66
156
|
|
|
67
|
-
|
|
157
|
+
显示当前配置状态:
|
|
158
|
+
- 已注册团队
|
|
159
|
+
- 仓库地址
|
|
160
|
+
- Token/CardID 配置状态
|
|
161
|
+
- 本地配置路径
|
|
68
162
|
|
|
69
163
|
## 配置仓库结构
|
|
70
164
|
|
|
71
165
|
```
|
|
72
166
|
claude-configs/
|
|
73
|
-
├──
|
|
167
|
+
├── base/ # 基础配置包
|
|
74
168
|
│ ├── commands/
|
|
75
169
|
│ ├── hooks/
|
|
76
170
|
│ ├── skills/
|
|
77
|
-
│
|
|
171
|
+
│ ├── agents/
|
|
172
|
+
│ └── scripts/ # shell 脚本(自动安装为全局命令)
|
|
78
173
|
├── team-a/ # 团队 A 配置
|
|
79
174
|
│ ├── commands/
|
|
80
175
|
│ ├── hooks/
|
|
81
176
|
│ ├── skills/
|
|
82
|
-
│
|
|
177
|
+
│ ├── agents/
|
|
178
|
+
│ └── scripts/
|
|
83
179
|
└── team-b/ # 团队 B 配置
|
|
84
180
|
└── ...
|
|
85
181
|
```
|
|
86
182
|
|
|
183
|
+
## 脚本安装
|
|
184
|
+
|
|
185
|
+
安装配置时,如果团队配置中包含 `scripts/` 目录,工具会自动安装所有 `.sh` 脚本为全局命令:
|
|
186
|
+
|
|
187
|
+
**工作原理:**
|
|
188
|
+
1. 脚本目录同步到配置目录(如 `~/.claude/scripts/`)
|
|
189
|
+
2. 为每个 `.sh` 文件创建符号链接到 `~/.local/bin`
|
|
190
|
+
3. 命令名称为脚本文件名去掉 `.sh` 后缀
|
|
191
|
+
4. 自动设置执行权限
|
|
192
|
+
|
|
193
|
+
**示例:**
|
|
194
|
+
```bash
|
|
195
|
+
# 仓库结构
|
|
196
|
+
base/
|
|
197
|
+
└── scripts/
|
|
198
|
+
├── continuous_claude.sh
|
|
199
|
+
└── deploy_tool.sh
|
|
200
|
+
|
|
201
|
+
# 安装后
|
|
202
|
+
coding-config install base
|
|
203
|
+
|
|
204
|
+
# 可以直接使用
|
|
205
|
+
continuous_claude
|
|
206
|
+
deploy_tool
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**PATH 配置:**
|
|
210
|
+
|
|
211
|
+
如果 `~/.local/bin` 不在 PATH 中,工具会自动提示配置方法:
|
|
212
|
+
```bash
|
|
213
|
+
# 添加到 ~/.zshrc 或 ~/.bashrc
|
|
214
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
215
|
+
|
|
216
|
+
# 使配置生效
|
|
217
|
+
source ~/.zshrc
|
|
218
|
+
```
|
|
219
|
+
|
|
87
220
|
## 冲突处理
|
|
88
221
|
|
|
89
222
|
安装时如果检测到冲突,工具会交互式提示处理方式:
|
|
90
223
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
224
|
+
**冲突类型:**
|
|
225
|
+
- **远程删除(RemoteDeleted)**: 文件在本地存在但远程已删除 → 提示是否删除本地文件
|
|
226
|
+
- **双方修改(BothModified)**: 本地和远程都有修改 → 提供两种解决方式:
|
|
227
|
+
- 保留本地版本
|
|
228
|
+
- 使用远程版本
|
|
229
|
+
- **仅远程修改(RemoteModified)**: 仅远程修改 → 自动同步
|
|
230
|
+
- **仅本地修改(LocalOnly)**: 本地额外文件 → 保留不变
|
|
231
|
+
|
|
232
|
+
## 双平台支持
|
|
233
|
+
|
|
234
|
+
工具会自动检测 Git 仓库类型并适配工作流:
|
|
94
235
|
|
|
95
|
-
|
|
236
|
+
### GitHub 平台
|
|
96
237
|
|
|
97
|
-
|
|
238
|
+
**检测条件:** URL 包含 `github.com`
|
|
98
239
|
|
|
240
|
+
**配置要求:**
|
|
99
241
|
```bash
|
|
100
|
-
#
|
|
101
|
-
|
|
242
|
+
# 设置 GitHub Token(需要 repo 权限)
|
|
243
|
+
coding-config config github-token ghp_xxx
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**创建 Token:**
|
|
247
|
+
1. 访问 [https://github.com/settings/tokens](https://github.com/settings/tokens)
|
|
248
|
+
2. 创建 Personal Access Token
|
|
249
|
+
3. 权限选择: `repo`
|
|
250
|
+
|
|
251
|
+
**工作流:**
|
|
252
|
+
1. 推送分支到远程仓库
|
|
253
|
+
2. 通过 GitHub API 创建 Pull Request
|
|
254
|
+
3. 团队 Review 后合并
|
|
255
|
+
|
|
256
|
+
### Gerrit/iCode 平台
|
|
257
|
+
|
|
258
|
+
**检测条件:** URL 包含 `icode.baidu.com` 或 `gerrit`
|
|
259
|
+
|
|
260
|
+
**配置要求:**
|
|
261
|
+
```bash
|
|
262
|
+
# 设置 CardID(用于关联工单)
|
|
263
|
+
coding-config config card-id icode-5481
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**工作流:**
|
|
267
|
+
1. 使用 SSH 密钥认证(无需 Token)
|
|
268
|
+
2. 推送到 `refs/for/<branch>` 自动创建 Code Review
|
|
269
|
+
3. 自动生成 Change-Id 并在提交信息前添加 CardID
|
|
270
|
+
4. 团队 Review 后提交
|
|
102
271
|
|
|
103
|
-
|
|
272
|
+
**提交信息格式:**
|
|
273
|
+
```
|
|
274
|
+
icode-5481 Update configuration
|
|
275
|
+
|
|
276
|
+
Change-Id: I<sha1-hash>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## 使用场景
|
|
280
|
+
|
|
281
|
+
### 场景 1: 个人使用基础配置包
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# 1. 配置仓库
|
|
285
|
+
coding-config config repo https://github.com/your-org/claude-configs.git
|
|
286
|
+
|
|
287
|
+
# 2. 如果是 GitHub,配置 Token
|
|
288
|
+
coding-config config github-token ghp_xxx
|
|
289
|
+
|
|
290
|
+
# 3. 安装基础配置到个人目录
|
|
104
291
|
coding-config install base
|
|
292
|
+
# 选择:个人级 (~/.claude/)
|
|
293
|
+
|
|
294
|
+
# 4. 开始使用
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### 场景 2: 团队协作管理配置
|
|
105
298
|
|
|
106
|
-
|
|
107
|
-
|
|
299
|
+
**团队首次使用:**
|
|
300
|
+
```bash
|
|
301
|
+
# 1. 配置仓库和认证
|
|
302
|
+
coding-config config repo https://icode.baidu.com/your-org/configs.git
|
|
303
|
+
coding-config config card-id icode-5481
|
|
304
|
+
|
|
305
|
+
# 2. 注册团队
|
|
306
|
+
coding-config register team-a
|
|
307
|
+
|
|
308
|
+
# 3. 安装基础配置(可选)
|
|
309
|
+
coding-config install base
|
|
108
310
|
|
|
109
|
-
# 4.
|
|
311
|
+
# 4. 修改配置
|
|
312
|
+
# 编辑 ~/.claude/ 或 ./.claude/ 下的文件
|
|
313
|
+
|
|
314
|
+
# 5. 发布配置
|
|
110
315
|
coding-config publish
|
|
111
316
|
|
|
112
|
-
#
|
|
317
|
+
# 6. Review CR/PR 并合并
|
|
113
318
|
```
|
|
114
319
|
|
|
115
|
-
|
|
116
|
-
|
|
320
|
+
**其他成员加入:**
|
|
117
321
|
```bash
|
|
118
|
-
# 1.
|
|
119
|
-
|
|
322
|
+
# 1. 配置仓库
|
|
323
|
+
coding-config config repo https://icode.baidu.com/your-org/configs.git
|
|
120
324
|
|
|
121
|
-
# 2.
|
|
325
|
+
# 2. 注册同一团队
|
|
326
|
+
coding-config register team-a
|
|
327
|
+
|
|
328
|
+
# 3. 安装团队配置
|
|
122
329
|
coding-config install
|
|
123
330
|
|
|
124
|
-
#
|
|
331
|
+
# 4. 开始使用
|
|
125
332
|
```
|
|
126
333
|
|
|
127
|
-
|
|
128
|
-
|
|
334
|
+
**更新团队配置:**
|
|
129
335
|
```bash
|
|
130
336
|
# 1. 修改本地配置
|
|
131
337
|
# 编辑配置文件
|
|
@@ -133,36 +339,61 @@ coding-config install
|
|
|
133
339
|
# 2. 发布更新
|
|
134
340
|
coding-config publish
|
|
135
341
|
|
|
136
|
-
# 3.
|
|
342
|
+
# 3. 其他成员同步更新
|
|
137
343
|
coding-config install
|
|
138
344
|
```
|
|
139
345
|
|
|
140
|
-
|
|
346
|
+
### 场景 3: 项目级配置
|
|
141
347
|
|
|
142
|
-
|
|
348
|
+
```bash
|
|
349
|
+
# 1. 在项目根目录安装配置
|
|
350
|
+
cd /path/to/project
|
|
351
|
+
coding-config install team-a
|
|
352
|
+
# 选择:项目级 (./.claude/)
|
|
353
|
+
|
|
354
|
+
# 2. 将 .claude/ 加入版本控制
|
|
355
|
+
git add .claude/
|
|
356
|
+
git commit -m "Add project-specific Claude configuration"
|
|
357
|
+
|
|
358
|
+
# 3. 团队成员克隆项目后自动获得配置
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## 本地配置说明
|
|
362
|
+
|
|
363
|
+
配置文件存储在 `~/.coding-config/config.json`:
|
|
143
364
|
|
|
144
365
|
```json
|
|
145
366
|
{
|
|
146
367
|
"registeredTeam": "team-a",
|
|
368
|
+
"repoUrl": "https://github.com/your-org/claude-configs.git",
|
|
147
369
|
"githubToken": "ghp_xxx",
|
|
148
|
-
"
|
|
370
|
+
"cardId": "icode-5481"
|
|
149
371
|
}
|
|
150
372
|
```
|
|
151
373
|
|
|
152
|
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
374
|
+
**字段说明:**
|
|
375
|
+
- `registeredTeam` - 已注册的团队名称
|
|
376
|
+
- `repoUrl` - 配置仓库地址(必需)
|
|
377
|
+
- `githubToken` - GitHub Token(GitHub 平台必需)
|
|
378
|
+
- `cardId` - iCafe CardID(Gerrit/iCode 平台可选)
|
|
155
379
|
|
|
156
|
-
|
|
380
|
+
**同步记录:**
|
|
157
381
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
382
|
+
工具在目标目录维护 `.sync-record.json` 用于追踪已同步文件:
|
|
383
|
+
```json
|
|
384
|
+
{
|
|
385
|
+
"/Users/user/.claude": {
|
|
386
|
+
"lastSyncTime": "2024-01-01T00:00:00.000Z",
|
|
387
|
+
"syncedFiles": ["commands/foo.md", "hooks/bar.sh"],
|
|
388
|
+
"repoUrl": "https://github.com/org/repo.git"
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
164
392
|
|
|
165
|
-
|
|
393
|
+
这使得可以检测:
|
|
394
|
+
- 远程删除的文件
|
|
395
|
+
- 新增的远程文件
|
|
396
|
+
- 修改的文件(内容哈希对比)
|
|
166
397
|
|
|
167
398
|
## 开发
|
|
168
399
|
|
|
@@ -170,24 +401,97 @@ Token 会安全存储在本地配置文件中。
|
|
|
170
401
|
# 安装依赖
|
|
171
402
|
npm install
|
|
172
403
|
|
|
173
|
-
#
|
|
404
|
+
# 开发模式运行(不需要构建)
|
|
174
405
|
npm run dev
|
|
175
406
|
|
|
176
|
-
#
|
|
407
|
+
# 构建 TypeScript 到 JavaScript
|
|
177
408
|
npm run build
|
|
178
409
|
|
|
179
|
-
#
|
|
410
|
+
# 运行测试
|
|
411
|
+
npm test
|
|
412
|
+
|
|
413
|
+
# 监听模式运行测试
|
|
414
|
+
npm test:watch
|
|
415
|
+
|
|
416
|
+
# 生成测试覆盖率报告
|
|
417
|
+
npm test:coverage
|
|
418
|
+
|
|
419
|
+
# 清理构建产物
|
|
420
|
+
npm run clean
|
|
421
|
+
|
|
422
|
+
# 本地测试(全局链接 CLI)
|
|
180
423
|
npm link
|
|
181
424
|
coding-config --help
|
|
182
425
|
```
|
|
183
426
|
|
|
184
427
|
## 技术栈
|
|
185
428
|
|
|
186
|
-
- TypeScript
|
|
187
|
-
- Commander.js
|
|
188
|
-
- Simple-Git
|
|
189
|
-
- Inquirer
|
|
190
|
-
- Octokit
|
|
429
|
+
- **TypeScript** - 类型安全的 JavaScript
|
|
430
|
+
- **Commander.js** - CLI 框架
|
|
431
|
+
- **Simple-Git** - Git 操作
|
|
432
|
+
- **Inquirer** - 交互式提示
|
|
433
|
+
- **Octokit** - GitHub API
|
|
434
|
+
- **Ora** - 终端加载动画
|
|
435
|
+
- **Chalk** - 终端文本样式
|
|
436
|
+
- **Jest** - 单元测试框架
|
|
437
|
+
|
|
438
|
+
## 项目结构
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
src/
|
|
442
|
+
├── cli.ts # CLI 入口文件
|
|
443
|
+
├── constants.ts # 全局常量
|
|
444
|
+
├── types/ # TypeScript 类型定义
|
|
445
|
+
├── commands/ # CLI 命令实现
|
|
446
|
+
│ ├── config.ts # 配置管理命令
|
|
447
|
+
│ ├── register.ts # 团队注册命令
|
|
448
|
+
│ ├── install.ts # 安装配置命令
|
|
449
|
+
│ ├── publish.ts # 发布配置命令
|
|
450
|
+
│ └── status.ts # 状态查看命令
|
|
451
|
+
└── utils/
|
|
452
|
+
├── git.ts # Git 操作、平台检测
|
|
453
|
+
├── config.ts # 本地配置管理
|
|
454
|
+
├── conflict.ts # 冲突检测
|
|
455
|
+
├── merge.ts # 交互式三路合并
|
|
456
|
+
├── diff.ts # 文件差异显示
|
|
457
|
+
├── sync-record.ts # 同步记录追踪
|
|
458
|
+
└── prompt.ts # 交互式提示
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
## 常见问题
|
|
462
|
+
|
|
463
|
+
### 如何切换仓库?
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
coding-config config repo <new-repo-url>
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### 如何查看当前配置?
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
coding-config config
|
|
473
|
+
# 或
|
|
474
|
+
coding-config status
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### GitHub Token 权限不足?
|
|
478
|
+
|
|
479
|
+
确保 Token 具有 `repo` 权限:
|
|
480
|
+
1. 访问 [https://github.com/settings/tokens](https://github.com/settings/tokens)
|
|
481
|
+
2. 编辑现有 Token 或创建新 Token
|
|
482
|
+
3. 勾选 `repo` 权限
|
|
483
|
+
4. 重新配置:`coding-config config github-token <new-token>`
|
|
484
|
+
|
|
485
|
+
### Gerrit/iCode 推送失败?
|
|
486
|
+
|
|
487
|
+
确保:
|
|
488
|
+
1. SSH 密钥已配置并添加到 Gerrit/iCode
|
|
489
|
+
2. CardID 格式正确(如 `icode-5481`)
|
|
490
|
+
3. 有仓库的推送权限
|
|
491
|
+
|
|
492
|
+
### 如何删除团队注册?
|
|
493
|
+
|
|
494
|
+
手动编辑 `~/.coding-config/config.json`,删除 `registeredTeam` 字段。
|
|
191
495
|
|
|
192
496
|
## License
|
|
193
497
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAqCA;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoKrE"}
|
package/dist/commands/install.js
CHANGED
|
@@ -47,6 +47,7 @@ const prompt_1 = require("../utils/prompt");
|
|
|
47
47
|
const conflict_1 = require("../utils/conflict");
|
|
48
48
|
const sync_record_1 = require("../utils/sync-record");
|
|
49
49
|
const diff_1 = require("../utils/diff");
|
|
50
|
+
const script_1 = require("../utils/script");
|
|
50
51
|
const types_1 = require("../types");
|
|
51
52
|
const constants_1 = require("../constants");
|
|
52
53
|
/**
|
|
@@ -106,10 +107,10 @@ async function installCommand(teamName) {
|
|
|
106
107
|
for (const dir of constants_1.CONFIG_DIRS) {
|
|
107
108
|
const remoteDir = path.join(teamPath, dir);
|
|
108
109
|
const localDir = path.join(targetPath, dir);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
110
|
+
// 始终运行冲突检测,即使远程目录不存在
|
|
111
|
+
// 这样可以检测到远程删除的文件
|
|
112
|
+
const conflicts = await (0, conflict_1.detectConflicts)(localDir, remoteDir, targetPath, dir);
|
|
113
|
+
allConflicts.push(...conflicts.map(c => ({ ...c, dir })));
|
|
113
114
|
}
|
|
114
115
|
// 处理冲突
|
|
115
116
|
if (allConflicts.length > 0) {
|
|
@@ -170,6 +171,17 @@ async function installCommand(teamName) {
|
|
|
170
171
|
}
|
|
171
172
|
}
|
|
172
173
|
}
|
|
174
|
+
// 安装脚本(从已同步的目标目录)
|
|
175
|
+
spinner.text = '正在检查并安装脚本...';
|
|
176
|
+
const installedScripts = await (0, script_1.installScripts)(targetPath);
|
|
177
|
+
if (installedScripts.length > 0) {
|
|
178
|
+
spinner.succeed(chalk_1.default.green(`已安装 ${installedScripts.length} 个全局脚本: ${installedScripts.join(', ')}`));
|
|
179
|
+
// 检查 PATH 设置
|
|
180
|
+
if (!(0, script_1.isLocalBinInPath)()) {
|
|
181
|
+
console.log(chalk_1.default.yellow((0, script_1.getPathSetupInstructions)()));
|
|
182
|
+
}
|
|
183
|
+
spinner.start();
|
|
184
|
+
}
|
|
173
185
|
// 更新同步记录
|
|
174
186
|
spinner.text = '正在更新同步记录...';
|
|
175
187
|
const syncedFiles = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -16,11 +16,11 @@ export declare const PERSONAL_CLAUDE_DIR: string;
|
|
|
16
16
|
/**
|
|
17
17
|
* 基础配置包名称
|
|
18
18
|
*/
|
|
19
|
-
export declare const BASE_CONFIG = "
|
|
19
|
+
export declare const BASE_CONFIG = "base";
|
|
20
20
|
/**
|
|
21
21
|
* 配置子目录
|
|
22
22
|
*/
|
|
23
|
-
export declare const CONFIG_DIRS: readonly ["commands", "hooks", "skills", "agents"];
|
|
23
|
+
export declare const CONFIG_DIRS: readonly ["commands", "hooks", "skills", "agents", "scripts"];
|
|
24
24
|
/**
|
|
25
25
|
* Git 默认分支
|
|
26
26
|
*/
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,QAAQ,+EAA+E,CAAC;AAErG;;GAEG;AACH,eAAO,MAAM,UAAU,QAA4C,CAAC;AACpE,eAAO,MAAM,WAAW,QAAuC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,QAAQ,+EAA+E,CAAC;AAErG;;GAEG;AACH,eAAO,MAAM,UAAU,QAA4C,CAAC;AACpE,eAAO,MAAM,WAAW,QAAuC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC;;GAEG;AACH,eAAO,MAAM,WAAW,+DAAgE,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,eAAe,2BAA2B,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -54,11 +54,11 @@ exports.PERSONAL_CLAUDE_DIR = path.join(os.homedir(), exports.CLAUDE_DIR_NAME);
|
|
|
54
54
|
/**
|
|
55
55
|
* 基础配置包名称
|
|
56
56
|
*/
|
|
57
|
-
exports.BASE_CONFIG = '
|
|
57
|
+
exports.BASE_CONFIG = 'base';
|
|
58
58
|
/**
|
|
59
59
|
* 配置子目录
|
|
60
60
|
*/
|
|
61
|
-
exports.CONFIG_DIRS = ['commands', 'hooks', 'skills', 'agents'];
|
|
61
|
+
exports.CONFIG_DIRS = ['commands', 'hooks', 'skills', 'agents', 'scripts'];
|
|
62
62
|
/**
|
|
63
63
|
* Git 默认分支
|
|
64
64
|
*/
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B;;;GAGG;AACU,QAAA,QAAQ,GAAG,4EAA4E,CAAC;AAErG;;GAEG;AACU,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACvD,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AAEhE;;GAEG;AACU,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAe,CAAC,CAAC;AAE5E;;GAEG;AACU,QAAA,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B;;;GAGG;AACU,QAAA,QAAQ,GAAG,4EAA4E,CAAC;AAErG;;GAEG;AACU,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACvD,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AAEhE;;GAEG;AACU,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAe,CAAC,CAAC;AAE5E;;GAEG;AACU,QAAA,WAAW,GAAG,MAAM,CAAC;AAElC;;GAEG;AACU,QAAA,WAAW,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAEzF;;GAEG;AACU,QAAA,cAAc,GAAG,MAAM,CAAC;AAErC;;GAEG;AACU,QAAA,eAAe,GAAG,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/utils/conflict.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/utils/conflict.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAqDtD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CA0DzB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
|
package/dist/utils/conflict.js
CHANGED
|
@@ -52,6 +52,10 @@ async function getAllFiles(dir, baseDir) {
|
|
|
52
52
|
if (!baseDir) {
|
|
53
53
|
baseDir = dir;
|
|
54
54
|
}
|
|
55
|
+
// 如果目录不存在,返回空数组
|
|
56
|
+
if (!(await fs.pathExists(dir))) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
55
59
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
56
60
|
const files = [];
|
|
57
61
|
for (const entry of entries) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/utils/conflict.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/utils/conflict.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,0CA+DC;AAKD,0BAIC;AAOD,gCAiBC;AAKD,4BAGC;AAxKD,6CAA+B;AAC/B,2CAA6B;AAC7B,kDAA0B;AAC1B,oCAAsD;AACtD,+CAA+C;AAE/C;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAgB;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,KAAa;IACpD,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QACpB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAC3B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;KAC5B,CAAC,CAAC;IAEH,OAAO,QAAQ,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,SAAkB;IAElB,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,eAAe;IACf,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrE,WAAW,CAAC,SAAS,CAAC;QACtB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,IAAA,4BAAc,EAAC,UAAU,CAAC;KAC3B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,SAAS;IACT,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,uBAAuB;YACvB,SAAS;QACX,CAAC;QAED,WAAW;QACX,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,qBAAqB;YACrB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,IAAI,EAAE,oBAAY,CAAC,YAAY;gBAC/B,SAAS;gBACT,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,+BAA+B;IAC/B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,iBAAiB;QACjB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,0BAA0B;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,IAAI,EAAE,oBAAY,CAAC,aAAa;gBAChC,SAAS;gBACT,UAAU,EAAE,EAAE;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY;IACrD,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;QACvB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,WAAoB,IAAI;IACzE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS;YACT,MAAM,IAAA,eAAK,EAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO;YACP,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 安装脚本到用户的 bin 目录
|
|
3
|
+
* @param targetPath 目标配置目录的完整路径(如 ~/.claude 或 ./.claude)
|
|
4
|
+
* @returns 已安装的脚本命令名列表
|
|
5
|
+
*/
|
|
6
|
+
export declare function installScripts(targetPath: string): Promise<string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* 检查 ~/.local/bin 是否在 PATH 中
|
|
9
|
+
*/
|
|
10
|
+
export declare function isLocalBinInPath(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 获取添加 ~/.local/bin 到 PATH 的提示信息
|
|
13
|
+
*/
|
|
14
|
+
export declare function getPathSetupInstructions(): string;
|
|
15
|
+
//# sourceMappingURL=script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/utils/script.ts"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkD1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAajD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.installScripts = installScripts;
|
|
40
|
+
exports.isLocalBinInPath = isLocalBinInPath;
|
|
41
|
+
exports.getPathSetupInstructions = getPathSetupInstructions;
|
|
42
|
+
const fs = __importStar(require("fs-extra"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
46
|
+
/**
|
|
47
|
+
* 脚本安装目录
|
|
48
|
+
*/
|
|
49
|
+
const SCRIPT_BIN_DIR = path.join(os.homedir(), '.local', 'bin');
|
|
50
|
+
/**
|
|
51
|
+
* 从脚本文件名提取命令名(去掉 .sh 后缀)
|
|
52
|
+
*/
|
|
53
|
+
function getCommandName(scriptFileName) {
|
|
54
|
+
return scriptFileName.replace(/\.sh$/, '');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 安装脚本到用户的 bin 目录
|
|
58
|
+
* @param targetPath 目标配置目录的完整路径(如 ~/.claude 或 ./.claude)
|
|
59
|
+
* @returns 已安装的脚本命令名列表
|
|
60
|
+
*/
|
|
61
|
+
async function installScripts(targetPath) {
|
|
62
|
+
const scriptsDir = path.join(targetPath, 'scripts');
|
|
63
|
+
// 检查 scripts 目录是否存在
|
|
64
|
+
if (!(await fs.pathExists(scriptsDir))) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
// 确保 ~/.local/bin 目录存在
|
|
68
|
+
await fs.ensureDir(SCRIPT_BIN_DIR);
|
|
69
|
+
const installedScripts = [];
|
|
70
|
+
const entries = await fs.readdir(scriptsDir, { withFileTypes: true });
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
// 只处理 .sh 文件
|
|
73
|
+
if (!entry.isFile() || !entry.name.endsWith('.sh')) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const scriptPath = path.join(scriptsDir, entry.name);
|
|
77
|
+
const commandName = getCommandName(entry.name);
|
|
78
|
+
const targetPath = path.join(SCRIPT_BIN_DIR, commandName);
|
|
79
|
+
try {
|
|
80
|
+
// 确保脚本有执行权限
|
|
81
|
+
await fs.chmod(scriptPath, 0o755);
|
|
82
|
+
// 如果目标已存在,先删除(可能是旧的符号链接或文件)
|
|
83
|
+
try {
|
|
84
|
+
await fs.unlink(targetPath);
|
|
85
|
+
}
|
|
86
|
+
catch (unlinkError) {
|
|
87
|
+
// 忽略文件不存在的错误(ENOENT)
|
|
88
|
+
if (unlinkError.code !== 'ENOENT') {
|
|
89
|
+
throw unlinkError;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// 创建符号链接
|
|
93
|
+
await fs.symlink(scriptPath, targetPath, 'file');
|
|
94
|
+
installedScripts.push(commandName);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// 只在真正的错误时显示警告(非更新场景)
|
|
98
|
+
if (error.code !== 'EEXIST') {
|
|
99
|
+
console.warn(chalk_1.default.yellow(`警告: 无法安装脚本 ${entry.name}: ${error.message}`));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return installedScripts;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 检查 ~/.local/bin 是否在 PATH 中
|
|
107
|
+
*/
|
|
108
|
+
function isLocalBinInPath() {
|
|
109
|
+
const pathEnv = process.env.PATH || '';
|
|
110
|
+
return pathEnv.split(':').includes(SCRIPT_BIN_DIR);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 获取添加 ~/.local/bin 到 PATH 的提示信息
|
|
114
|
+
*/
|
|
115
|
+
function getPathSetupInstructions() {
|
|
116
|
+
const shellRc = getShellRcFile();
|
|
117
|
+
return `
|
|
118
|
+
要使全局命令生效,请确保 ${SCRIPT_BIN_DIR} 在您的 PATH 中。
|
|
119
|
+
您可以在 ${shellRc} 中添加以下内容:
|
|
120
|
+
|
|
121
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
122
|
+
|
|
123
|
+
然后运行:
|
|
124
|
+
source ${shellRc}
|
|
125
|
+
|
|
126
|
+
或重新打开终端窗口。
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 获取当前 shell 的配置文件路径
|
|
131
|
+
*/
|
|
132
|
+
function getShellRcFile() {
|
|
133
|
+
const shell = process.env.SHELL || '';
|
|
134
|
+
if (shell.includes('zsh')) {
|
|
135
|
+
return '~/.zshrc';
|
|
136
|
+
}
|
|
137
|
+
else if (shell.includes('bash')) {
|
|
138
|
+
return '~/.bashrc';
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return '~/.profile';
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/utils/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-record.d.ts","sourceRoot":"","sources":["../../src/utils/sync-record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAuB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-record.d.ts","sourceRoot":"","sources":["../../src/utils/sync-record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAuB,MAAM,UAAU,CAAC;AAgD3D;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAInF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBxE"}
|
|
@@ -64,7 +64,9 @@ async function readAllSyncRecords() {
|
|
|
64
64
|
*/
|
|
65
65
|
async function writeAllSyncRecords(records) {
|
|
66
66
|
try {
|
|
67
|
+
// 确保同步记录文件所在的目录存在
|
|
67
68
|
await fs.ensureDir(path.dirname(SYNC_RECORD_FILE));
|
|
69
|
+
// 将同步记录写入文件,使用格式化 JSON 输出
|
|
68
70
|
await fs.writeFile(SYNC_RECORD_FILE, JSON.stringify(records, null, 2), 'utf-8');
|
|
69
71
|
}
|
|
70
72
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-record.js","sourceRoot":"","sources":["../../src/utils/sync-record.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sync-record.js","sourceRoot":"","sources":["../../src/utils/sync-record.ts"],"names":[],"mappings":"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"}
|