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.
Files changed (66) hide show
  1. package/README.md +194 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +70 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/config.d.ts +21 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +212 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/install.d.ts +5 -0
  11. package/dist/commands/install.d.ts.map +1 -0
  12. package/dist/commands/install.js +197 -0
  13. package/dist/commands/install.js.map +1 -0
  14. package/dist/commands/publish.d.ts +5 -0
  15. package/dist/commands/publish.d.ts.map +1 -0
  16. package/dist/commands/publish.js +172 -0
  17. package/dist/commands/publish.js.map +1 -0
  18. package/dist/commands/register.d.ts +5 -0
  19. package/dist/commands/register.d.ts.map +1 -0
  20. package/dist/commands/register.js +110 -0
  21. package/dist/commands/register.js.map +1 -0
  22. package/dist/commands/status.d.ts +5 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +73 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/constants.d.ts +32 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +70 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/index.d.ts +14 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +39 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/types/index.d.ts +85 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +14 -0
  37. package/dist/types/index.js.map +1 -0
  38. package/dist/utils/config.d.ts +50 -0
  39. package/dist/utils/config.d.ts.map +1 -0
  40. package/dist/utils/config.js +166 -0
  41. package/dist/utils/config.js.map +1 -0
  42. package/dist/utils/conflict.d.ts +25 -0
  43. package/dist/utils/conflict.d.ts.map +1 -0
  44. package/dist/utils/conflict.js +183 -0
  45. package/dist/utils/conflict.js.map +1 -0
  46. package/dist/utils/diff.d.ts +8 -0
  47. package/dist/utils/diff.d.ts.map +1 -0
  48. package/dist/utils/diff.js +152 -0
  49. package/dist/utils/diff.js.map +1 -0
  50. package/dist/utils/git.d.ts +73 -0
  51. package/dist/utils/git.d.ts.map +1 -0
  52. package/dist/utils/git.js +259 -0
  53. package/dist/utils/git.js.map +1 -0
  54. package/dist/utils/merge.d.ts +21 -0
  55. package/dist/utils/merge.d.ts.map +1 -0
  56. package/dist/utils/merge.js +273 -0
  57. package/dist/utils/merge.js.map +1 -0
  58. package/dist/utils/prompt.d.ts +27 -0
  59. package/dist/utils/prompt.d.ts.map +1 -0
  60. package/dist/utils/prompt.js +183 -0
  61. package/dist/utils/prompt.js.map +1 -0
  62. package/dist/utils/sync-record.d.ts +30 -0
  63. package/dist/utils/sync-record.d.ts.map +1 -0
  64. package/dist/utils/sync-record.js +151 -0
  65. package/dist/utils/sync-record.js.map +1 -0
  66. package/package.json +47 -0
@@ -0,0 +1,259 @@
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.createTempDir = createTempDir;
40
+ exports.cleanupTempDir = cleanupTempDir;
41
+ exports.cloneRepo = cloneRepo;
42
+ exports.pullRepo = pullRepo;
43
+ exports.checkTeamExists = checkTeamExists;
44
+ exports.listTeams = listTeams;
45
+ exports.isGithubRepo = isGithubRepo;
46
+ exports.isGerritRepo = isGerritRepo;
47
+ exports.createBranch = createBranch;
48
+ exports.generateChangeId = generateChangeId;
49
+ exports.commitChanges = commitChanges;
50
+ exports.pushToRemote = pushToRemote;
51
+ exports.pushForReview = pushForReview;
52
+ exports.parseGithubRepo = parseGithubRepo;
53
+ exports.createPullRequest = createPullRequest;
54
+ exports.createTeamDirectory = createTeamDirectory;
55
+ const simple_git_1 = __importDefault(require("simple-git"));
56
+ const fs = __importStar(require("fs-extra"));
57
+ const path = __importStar(require("path"));
58
+ const os = __importStar(require("os"));
59
+ const crypto = __importStar(require("crypto"));
60
+ const rest_1 = require("@octokit/rest");
61
+ const constants_1 = require("../constants");
62
+ /**
63
+ * 创建临时目录
64
+ */
65
+ function createTempDir() {
66
+ const tempBase = os.tmpdir();
67
+ const randomSuffix = Math.random().toString(36).substring(7);
68
+ const tempDir = path.join(tempBase, `coding-config-${randomSuffix}`);
69
+ fs.ensureDirSync(tempDir);
70
+ return tempDir;
71
+ }
72
+ /**
73
+ * 清理临时目录
74
+ */
75
+ async function cleanupTempDir(tempDir) {
76
+ if (await fs.pathExists(tempDir)) {
77
+ await fs.remove(tempDir);
78
+ }
79
+ }
80
+ /**
81
+ * 判断是否为本地路径
82
+ */
83
+ function isLocalPath(repoUrl) {
84
+ return path.isAbsolute(repoUrl) || repoUrl.startsWith('./') || repoUrl.startsWith('../');
85
+ }
86
+ /**
87
+ * 克隆仓库到指定目录
88
+ * 如果是本地路径,直接复制文件;否则使用 git clone
89
+ */
90
+ async function cloneRepo(repoUrl, localPath) {
91
+ await fs.ensureDir(path.dirname(localPath));
92
+ // 判断是否为本地路径
93
+ if (isLocalPath(repoUrl)) {
94
+ // 本地路径:直接复制文件
95
+ if (!(await fs.pathExists(repoUrl))) {
96
+ throw new Error(`本地路径不存在: ${repoUrl}`);
97
+ }
98
+ await fs.copy(repoUrl, localPath, {
99
+ filter: (src) => {
100
+ // 过滤掉 .git 目录和 node_modules
101
+ return !src.includes('/.git') && !src.includes('/node_modules');
102
+ }
103
+ });
104
+ return (0, simple_git_1.default)(localPath);
105
+ }
106
+ else {
107
+ // 远程仓库:使用 git clone
108
+ const git = (0, simple_git_1.default)();
109
+ await git.clone(repoUrl, localPath);
110
+ return (0, simple_git_1.default)(localPath);
111
+ }
112
+ }
113
+ /**
114
+ * 拉取最新代码
115
+ */
116
+ async function pullRepo(localPath, branch = constants_1.DEFAULT_BRANCH) {
117
+ const git = (0, simple_git_1.default)(localPath);
118
+ await git.pull('origin', branch);
119
+ }
120
+ /**
121
+ * 检查团队目录是否存在
122
+ */
123
+ async function checkTeamExists(repoPath, teamName) {
124
+ const teamPath = path.join(repoPath, teamName);
125
+ return await fs.pathExists(teamPath);
126
+ }
127
+ /**
128
+ * 获取所有团队列表
129
+ */
130
+ async function listTeams(repoPath) {
131
+ const entries = await fs.readdir(repoPath, { withFileTypes: true });
132
+ return entries
133
+ .filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
134
+ .map((entry) => entry.name);
135
+ }
136
+ /**
137
+ * 判断是否为 GitHub 仓库
138
+ */
139
+ function isGithubRepo(repoUrl) {
140
+ return repoUrl.includes('github.com');
141
+ }
142
+ /**
143
+ * 判断是否为 Gerrit/iCode 仓库
144
+ */
145
+ function isGerritRepo(repoUrl) {
146
+ // 只识别明确的 Gerrit 平台标识
147
+ return repoUrl.includes('icode.baidu.com') ||
148
+ repoUrl.includes('gerrit');
149
+ }
150
+ /**
151
+ * 创建新分支并切换
152
+ */
153
+ async function createBranch(localPath, branchName) {
154
+ const git = (0, simple_git_1.default)(localPath);
155
+ await git.checkoutLocalBranch(branchName);
156
+ }
157
+ /**
158
+ * 生成 Gerrit Change-Id
159
+ * Change-Id 格式: I + 40位十六进制字符
160
+ */
161
+ function generateChangeId() {
162
+ const timestamp = Date.now().toString();
163
+ const random = Math.random().toString();
164
+ const hash = crypto
165
+ .createHash('sha1')
166
+ .update(timestamp + random)
167
+ .digest('hex');
168
+ return `I${hash}`;
169
+ }
170
+ /**
171
+ * 提交变更
172
+ * 如果是 Gerrit 仓库,会自动添加 Change-Id 和 CardID
173
+ */
174
+ async function commitChanges(localPath, message, repoUrl, cardId) {
175
+ const git = (0, simple_git_1.default)(localPath);
176
+ // 判断是否为 Gerrit 仓库
177
+ let finalMessage = message;
178
+ if (repoUrl && isGerritRepo(repoUrl)) {
179
+ // 添加 CardID(如果有)
180
+ if (cardId) {
181
+ // CardID 格式:icode-5481 提交信息
182
+ if (!message.startsWith(cardId)) {
183
+ finalMessage = `${cardId} ${message}`;
184
+ }
185
+ }
186
+ // 添加 Change-Id(如果没有)
187
+ if (!finalMessage.includes('Change-Id:')) {
188
+ const changeId = generateChangeId();
189
+ finalMessage = `${finalMessage}\n\nChange-Id: ${changeId}`;
190
+ }
191
+ }
192
+ await git.add('.');
193
+ await git.commit(finalMessage);
194
+ }
195
+ /**
196
+ * 推送到远程
197
+ */
198
+ async function pushToRemote(localPath, branchName) {
199
+ const git = (0, simple_git_1.default)(localPath);
200
+ await git.push('origin', branchName, ['--set-upstream']);
201
+ }
202
+ /**
203
+ * 推送到远程用于 Code Review (Gerrit 风格)
204
+ * 使用 refs/for/<branch> 格式发起 CR
205
+ */
206
+ async function pushForReview(localPath, targetBranch = constants_1.DEFAULT_BRANCH) {
207
+ const git = (0, simple_git_1.default)(localPath);
208
+ // 推送当前分支到 refs/for/目标分支 以发起 Code Review
209
+ await git.push('origin', `HEAD:refs/for/${targetBranch}`);
210
+ }
211
+ /**
212
+ * 解析 GitHub 仓库信息
213
+ */
214
+ function parseGithubRepo(repoUrl) {
215
+ const match = repoUrl.match(/github\.com[:/]([^/]+)\/([^/.]+)(\.git)?$/);
216
+ if (!match) {
217
+ return null;
218
+ }
219
+ return {
220
+ owner: match[1],
221
+ repo: match[2],
222
+ };
223
+ }
224
+ /**
225
+ * 创建 Pull Request
226
+ */
227
+ async function createPullRequest(repoUrl, branchName, title, body, token) {
228
+ const repoInfo = parseGithubRepo(repoUrl);
229
+ if (!repoInfo) {
230
+ throw new Error('无法解析 GitHub 仓库信息');
231
+ }
232
+ const octokit = new rest_1.Octokit({ auth: token });
233
+ const { data } = await octokit.pulls.create({
234
+ owner: repoInfo.owner,
235
+ repo: repoInfo.repo,
236
+ title,
237
+ head: branchName,
238
+ base: constants_1.DEFAULT_BRANCH,
239
+ body,
240
+ });
241
+ return data.html_url;
242
+ }
243
+ /**
244
+ * 创建团队目录结构
245
+ */
246
+ async function createTeamDirectory(repoPath, teamName) {
247
+ const teamPath = path.join(repoPath, teamName);
248
+ // 创建团队根目录
249
+ await fs.ensureDir(teamPath);
250
+ // 创建子目录 (commands, hooks, skills, agents)
251
+ for (const dir of constants_1.CONFIG_DIRS) {
252
+ const dirPath = path.join(teamPath, dir);
253
+ await fs.ensureDir(dirPath);
254
+ // 创建 .gitkeep 文件以确保空目录也能被 git 追踪
255
+ const gitkeepPath = path.join(dirPath, '.gitkeep');
256
+ await fs.writeFile(gitkeepPath, '', 'utf-8');
257
+ }
258
+ }
259
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 合并结果
3
+ */
4
+ interface MergeResult {
5
+ merged: boolean;
6
+ content?: string;
7
+ conflictRanges?: Array<{
8
+ start: number;
9
+ end: number;
10
+ }>;
11
+ }
12
+ /**
13
+ * 交互式合并文件
14
+ * @param localPath 本地文件路径
15
+ * @param remotePath 远程文件路径
16
+ * @param fileName 文件名(用于显示)
17
+ * @returns 合并结果
18
+ */
19
+ export declare function interactiveMerge(localPath: string, remotePath: string, fileName: string): Promise<MergeResult>;
20
+ export {};
21
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AA4ED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAmMtB"}
@@ -0,0 +1,273 @@
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.interactiveMerge = interactiveMerge;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const inquirer_1 = __importDefault(require("inquirer"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ /**
44
+ * 识别文件中的冲突块
45
+ * 使用简单的逐行比较算法
46
+ */
47
+ function identifyConflicts(localLines, remoteLines) {
48
+ const conflicts = [];
49
+ let i = 0;
50
+ let j = 0;
51
+ while (i < localLines.length || j < remoteLines.length) {
52
+ // 如果两行相同,继续
53
+ if (i < localLines.length && j < remoteLines.length && localLines[i] === remoteLines[j]) {
54
+ i++;
55
+ j++;
56
+ continue;
57
+ }
58
+ // 找到不同的地方,开始寻找冲突块
59
+ const conflictStart = i;
60
+ const localConflict = [];
61
+ const remoteConflict = [];
62
+ // 收集本地的不同行,直到找到与远程相同的行
63
+ let foundMatch = false;
64
+ let tempI = i;
65
+ let tempJ = j;
66
+ // 简单策略:向前查看最多10行,寻找匹配点
67
+ const lookAhead = 10;
68
+ for (let k = 0; k < lookAhead && tempI < localLines.length; k++, tempI++) {
69
+ localConflict.push(localLines[tempI]);
70
+ // 检查是否能在远程找到匹配
71
+ for (let l = 0; l < lookAhead && tempJ + l < remoteLines.length; l++) {
72
+ if (localLines[tempI] === remoteLines[tempJ + l]) {
73
+ // 找到匹配点
74
+ remoteConflict.push(...remoteLines.slice(j, tempJ + l));
75
+ foundMatch = true;
76
+ i = tempI + 1;
77
+ j = tempJ + l + 1;
78
+ break;
79
+ }
80
+ }
81
+ if (foundMatch)
82
+ break;
83
+ }
84
+ // 如果没找到匹配,将剩余的远程行也加入冲突
85
+ if (!foundMatch) {
86
+ while (j < remoteLines.length && remoteConflict.length < lookAhead) {
87
+ remoteConflict.push(remoteLines[j]);
88
+ j++;
89
+ }
90
+ i = tempI;
91
+ }
92
+ if (localConflict.length > 0 || remoteConflict.length > 0) {
93
+ conflicts.push({
94
+ startLine: conflictStart + 1,
95
+ localLines: localConflict,
96
+ remoteLines: remoteConflict,
97
+ });
98
+ }
99
+ // 如果到达末尾,退出
100
+ if (!foundMatch && i >= localLines.length && j >= remoteLines.length) {
101
+ break;
102
+ }
103
+ }
104
+ return conflicts;
105
+ }
106
+ /**
107
+ * 交互式合并文件
108
+ * @param localPath 本地文件路径
109
+ * @param remotePath 远程文件路径
110
+ * @param fileName 文件名(用于显示)
111
+ * @returns 合并结果
112
+ */
113
+ async function interactiveMerge(localPath, remotePath, fileName) {
114
+ const [localContent, remoteContent] = await Promise.all([
115
+ fs.readFile(localPath, 'utf-8'),
116
+ fs.readFile(remotePath, 'utf-8'),
117
+ ]);
118
+ const localLines = localContent.split('\n');
119
+ const remoteLines = remoteContent.split('\n');
120
+ // 识别冲突块
121
+ const conflicts = identifyConflicts(localLines, remoteLines);
122
+ if (conflicts.length === 0) {
123
+ console.log(chalk_1.default.green('✓ 文件没有冲突'));
124
+ return { merged: true, content: localContent };
125
+ }
126
+ console.log(chalk_1.default.cyan(`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`));
127
+ console.log(chalk_1.default.cyan(` 交互式合并: ${fileName}`));
128
+ console.log(chalk_1.default.cyan(` 发现 ${conflicts.length} 个冲突块`));
129
+ console.log(chalk_1.default.cyan(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`));
130
+ // 构建合并结果
131
+ const mergedLines = [];
132
+ const conflictRanges = [];
133
+ let lastProcessedLine = 0;
134
+ for (let idx = 0; idx < conflicts.length; idx++) {
135
+ const conflict = conflicts[idx];
136
+ // 添加冲突之前的相同内容
137
+ for (let i = lastProcessedLine; i < conflict.startLine - 1; i++) {
138
+ if (i < localLines.length) {
139
+ mergedLines.push(localLines[i]);
140
+ }
141
+ }
142
+ // 记录冲突开始位置
143
+ const conflictStartLine = mergedLines.length + 1;
144
+ // 显示冲突
145
+ console.log(chalk_1.default.yellow(`\n冲突 ${idx + 1}/${conflicts.length} (第 ${conflict.startLine} 行附近):\n`));
146
+ console.log(chalk_1.default.green('本地版本:'));
147
+ console.log(chalk_1.default.green('─'.repeat(60)));
148
+ conflict.localLines.forEach((line, i) => {
149
+ console.log(chalk_1.default.green(` ${String(i + 1).padStart(2, ' ')} | ${line}`));
150
+ });
151
+ console.log(chalk_1.default.blue('\n远程版本:'));
152
+ console.log(chalk_1.default.blue('─'.repeat(60)));
153
+ conflict.remoteLines.forEach((line, i) => {
154
+ console.log(chalk_1.default.blue(` ${String(i + 1).padStart(2, ' ')} | ${line}`));
155
+ });
156
+ // 让用户选择如何处理这个冲突(简化为三个选项)
157
+ const { resolution } = await inquirer_1.default.prompt([
158
+ {
159
+ type: 'list',
160
+ name: 'resolution',
161
+ message: '如何处理这个冲突?',
162
+ choices: [
163
+ { name: '接受本地版本', value: 'local' },
164
+ { name: '接受远程版本', value: 'remote' },
165
+ { name: '手动编辑内容', value: 'edit' },
166
+ ],
167
+ },
168
+ ]);
169
+ if (resolution === 'local') {
170
+ mergedLines.push(...conflict.localLines);
171
+ }
172
+ else if (resolution === 'remote') {
173
+ mergedLines.push(...conflict.remoteLines);
174
+ }
175
+ else if (resolution === 'edit') {
176
+ // 手动编辑模式
177
+ console.log(chalk_1.default.cyan('\n请输入合并后的内容(每行一个,输入空行结束):'));
178
+ const editedLines = [];
179
+ let lineNumber = 1;
180
+ while (true) {
181
+ const { line } = await inquirer_1.default.prompt([
182
+ {
183
+ type: 'input',
184
+ name: 'line',
185
+ message: `第 ${lineNumber} 行:`,
186
+ default: lineNumber === 1 ? conflict.localLines[0] || conflict.remoteLines[0] : '',
187
+ },
188
+ ]);
189
+ if (line === '' && editedLines.length > 0) {
190
+ // 确认结束
191
+ const { done } = await inquirer_1.default.prompt([
192
+ {
193
+ type: 'confirm',
194
+ name: 'done',
195
+ message: '完成编辑?',
196
+ default: true,
197
+ },
198
+ ]);
199
+ if (done)
200
+ break;
201
+ }
202
+ if (line !== '' || editedLines.length > 0) {
203
+ editedLines.push(line);
204
+ lineNumber++;
205
+ }
206
+ if (lineNumber > 50) {
207
+ console.log(chalk_1.default.yellow('提示: 行数过多,建议使用外部编辑器'));
208
+ break;
209
+ }
210
+ }
211
+ mergedLines.push(...editedLines);
212
+ }
213
+ // 记录冲突结束位置
214
+ const conflictEndLine = mergedLines.length;
215
+ conflictRanges.push({ start: conflictStartLine, end: conflictEndLine });
216
+ lastProcessedLine = conflict.startLine + conflict.localLines.length - 1;
217
+ }
218
+ // 添加剩余的内容
219
+ for (let i = lastProcessedLine; i < localLines.length; i++) {
220
+ mergedLines.push(localLines[i]);
221
+ }
222
+ const mergedContent = mergedLines.join('\n');
223
+ // 显示合并结果预览(标记冲突位置并用虚线分隔)
224
+ console.log(chalk_1.default.cyan('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
225
+ console.log(chalk_1.default.cyan(' 合并结果预览:'));
226
+ console.log(chalk_1.default.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
227
+ // 显示所有内容,但限制总行数
228
+ const maxDisplayLines = 30;
229
+ let displayedLines = 0;
230
+ for (let i = 0; i < mergedLines.length && displayedLines < maxDisplayLines; i++) {
231
+ const lineNum = i + 1;
232
+ const line = mergedLines[i];
233
+ // 检查是否在冲突范围内
234
+ const inConflict = conflictRanges.some(range => lineNum >= range.start && lineNum <= range.end);
235
+ // 检查是否是冲突边界
236
+ const isConflictStart = conflictRanges.some(range => lineNum === range.start);
237
+ const isConflictEnd = conflictRanges.some(range => lineNum === range.end);
238
+ if (isConflictStart) {
239
+ console.log(chalk_1.default.yellow('─'.repeat(60) + ' (冲突位置开始)'));
240
+ }
241
+ if (inConflict) {
242
+ console.log(chalk_1.default.yellow(`${String(lineNum).padStart(3, ' ')} | ${line}`));
243
+ }
244
+ else {
245
+ console.log(chalk_1.default.gray(`${String(lineNum).padStart(3, ' ')} | ${line}`));
246
+ }
247
+ if (isConflictEnd) {
248
+ console.log(chalk_1.default.yellow('─'.repeat(60) + ' (冲突位置结束)'));
249
+ }
250
+ displayedLines++;
251
+ }
252
+ if (mergedLines.length > maxDisplayLines) {
253
+ console.log(chalk_1.default.gray(`\n... (还有 ${mergedLines.length - maxDisplayLines} 行,共 ${mergedLines.length} 行)`));
254
+ }
255
+ else {
256
+ console.log(chalk_1.default.gray(`\n(共 ${mergedLines.length} 行)`));
257
+ }
258
+ // 确认保存
259
+ const { save } = await inquirer_1.default.prompt([
260
+ {
261
+ type: 'confirm',
262
+ name: 'save',
263
+ message: '保存合并结果?',
264
+ default: true,
265
+ },
266
+ ]);
267
+ if (!save) {
268
+ console.log(chalk_1.default.yellow('✗ 已取消合并'));
269
+ return { merged: false };
270
+ }
271
+ return { merged: true, content: mergedContent, conflictRanges };
272
+ }
273
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ConfigLevel, ConflictResolution } from '../types';
2
+ /**
3
+ * 选择配置级别
4
+ */
5
+ export declare function selectConfigLevel(): Promise<{
6
+ level: ConfigLevel;
7
+ path: string;
8
+ }>;
9
+ /**
10
+ * 选择冲突解决策略
11
+ * @param file 文件名
12
+ * @param showDiffCallback 可选的差异展示回调函数
13
+ */
14
+ export declare function selectConflictResolution(file: string, showDiffCallback?: () => Promise<void>): Promise<ConflictResolution>;
15
+ /**
16
+ * 确认操作
17
+ */
18
+ export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
19
+ /**
20
+ * 输入文本
21
+ */
22
+ export declare function inputText(message: string, defaultValue?: string, validate?: (input: string) => boolean | string): Promise<string>;
23
+ /**
24
+ * 输入密码(GitHub Token)
25
+ */
26
+ export declare function inputPassword(message: string): Promise<string>;
27
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI3D;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuDvF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAC7C,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBpE"}