colyn-cli 3.1.4

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 (263) hide show
  1. package/README-en.md +85 -0
  2. package/README.md +85 -0
  3. package/bin/colyn +25 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +116 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/add.d.ts +6 -0
  9. package/dist/commands/add.d.ts.map +1 -0
  10. package/dist/commands/add.helpers.d.ts +48 -0
  11. package/dist/commands/add.helpers.d.ts.map +1 -0
  12. package/dist/commands/add.helpers.js +251 -0
  13. package/dist/commands/add.helpers.js.map +1 -0
  14. package/dist/commands/add.js +286 -0
  15. package/dist/commands/add.js.map +1 -0
  16. package/dist/commands/checkout.d.ts +16 -0
  17. package/dist/commands/checkout.d.ts.map +1 -0
  18. package/dist/commands/checkout.js +428 -0
  19. package/dist/commands/checkout.js.map +1 -0
  20. package/dist/commands/completion.d.ts +10 -0
  21. package/dist/commands/completion.d.ts.map +1 -0
  22. package/dist/commands/completion.js +380 -0
  23. package/dist/commands/completion.js.map +1 -0
  24. package/dist/commands/config.d.ts +11 -0
  25. package/dist/commands/config.d.ts.map +1 -0
  26. package/dist/commands/config.js +338 -0
  27. package/dist/commands/config.js.map +1 -0
  28. package/dist/commands/index.d.ts +10 -0
  29. package/dist/commands/index.d.ts.map +1 -0
  30. package/dist/commands/index.js +41 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/info.d.ts +6 -0
  33. package/dist/commands/info.d.ts.map +1 -0
  34. package/dist/commands/info.js +374 -0
  35. package/dist/commands/info.js.map +1 -0
  36. package/dist/commands/init.d.ts +6 -0
  37. package/dist/commands/init.d.ts.map +1 -0
  38. package/dist/commands/init.handlers.d.ts +27 -0
  39. package/dist/commands/init.handlers.d.ts.map +1 -0
  40. package/dist/commands/init.handlers.js +314 -0
  41. package/dist/commands/init.handlers.js.map +1 -0
  42. package/dist/commands/init.helpers.d.ts +42 -0
  43. package/dist/commands/init.helpers.d.ts.map +1 -0
  44. package/dist/commands/init.helpers.js +275 -0
  45. package/dist/commands/init.helpers.js.map +1 -0
  46. package/dist/commands/init.js +61 -0
  47. package/dist/commands/init.js.map +1 -0
  48. package/dist/commands/install.d.ts +6 -0
  49. package/dist/commands/install.d.ts.map +1 -0
  50. package/dist/commands/install.helpers.d.ts +32 -0
  51. package/dist/commands/install.helpers.d.ts.map +1 -0
  52. package/dist/commands/install.helpers.js +124 -0
  53. package/dist/commands/install.helpers.js.map +1 -0
  54. package/dist/commands/install.js +104 -0
  55. package/dist/commands/install.js.map +1 -0
  56. package/dist/commands/list-project.d.ts +11 -0
  57. package/dist/commands/list-project.d.ts.map +1 -0
  58. package/dist/commands/list-project.js +260 -0
  59. package/dist/commands/list-project.js.map +1 -0
  60. package/dist/commands/list.d.ts +15 -0
  61. package/dist/commands/list.d.ts.map +1 -0
  62. package/dist/commands/list.helpers.d.ts +50 -0
  63. package/dist/commands/list.helpers.d.ts.map +1 -0
  64. package/dist/commands/list.helpers.js +143 -0
  65. package/dist/commands/list.helpers.js.map +1 -0
  66. package/dist/commands/list.js +530 -0
  67. package/dist/commands/list.js.map +1 -0
  68. package/dist/commands/merge.d.ts +6 -0
  69. package/dist/commands/merge.d.ts.map +1 -0
  70. package/dist/commands/merge.helpers.d.ts +74 -0
  71. package/dist/commands/merge.helpers.d.ts.map +1 -0
  72. package/dist/commands/merge.helpers.js +307 -0
  73. package/dist/commands/merge.helpers.js.map +1 -0
  74. package/dist/commands/merge.js +260 -0
  75. package/dist/commands/merge.js.map +1 -0
  76. package/dist/commands/release.d.ts +6 -0
  77. package/dist/commands/release.d.ts.map +1 -0
  78. package/dist/commands/release.helpers.d.ts +61 -0
  79. package/dist/commands/release.helpers.d.ts.map +1 -0
  80. package/dist/commands/release.helpers.js +277 -0
  81. package/dist/commands/release.helpers.js.map +1 -0
  82. package/dist/commands/release.js +127 -0
  83. package/dist/commands/release.js.map +1 -0
  84. package/dist/commands/remove.d.ts +6 -0
  85. package/dist/commands/remove.d.ts.map +1 -0
  86. package/dist/commands/remove.helpers.d.ts +59 -0
  87. package/dist/commands/remove.helpers.d.ts.map +1 -0
  88. package/dist/commands/remove.helpers.js +190 -0
  89. package/dist/commands/remove.helpers.js.map +1 -0
  90. package/dist/commands/remove.js +137 -0
  91. package/dist/commands/remove.js.map +1 -0
  92. package/dist/commands/repair.d.ts +6 -0
  93. package/dist/commands/repair.d.ts.map +1 -0
  94. package/dist/commands/repair.helpers.d.ts +5 -0
  95. package/dist/commands/repair.helpers.d.ts.map +1 -0
  96. package/dist/commands/repair.helpers.js +499 -0
  97. package/dist/commands/repair.helpers.js.map +1 -0
  98. package/dist/commands/repair.js +28 -0
  99. package/dist/commands/repair.js.map +1 -0
  100. package/dist/commands/status.d.ts +6 -0
  101. package/dist/commands/status.d.ts.map +1 -0
  102. package/dist/commands/status.js +116 -0
  103. package/dist/commands/status.js.map +1 -0
  104. package/dist/commands/system-integration.d.ts +6 -0
  105. package/dist/commands/system-integration.d.ts.map +1 -0
  106. package/dist/commands/system-integration.helpers.d.ts +70 -0
  107. package/dist/commands/system-integration.helpers.d.ts.map +1 -0
  108. package/dist/commands/system-integration.helpers.js +313 -0
  109. package/dist/commands/system-integration.helpers.js.map +1 -0
  110. package/dist/commands/system-integration.js +132 -0
  111. package/dist/commands/system-integration.js.map +1 -0
  112. package/dist/commands/tmux.d.ts +11 -0
  113. package/dist/commands/tmux.d.ts.map +1 -0
  114. package/dist/commands/tmux.js +500 -0
  115. package/dist/commands/tmux.js.map +1 -0
  116. package/dist/commands/todo.d.ts +6 -0
  117. package/dist/commands/todo.d.ts.map +1 -0
  118. package/dist/commands/todo.helpers.d.ts +50 -0
  119. package/dist/commands/todo.helpers.d.ts.map +1 -0
  120. package/dist/commands/todo.helpers.js +297 -0
  121. package/dist/commands/todo.helpers.js.map +1 -0
  122. package/dist/commands/todo.js +579 -0
  123. package/dist/commands/todo.js.map +1 -0
  124. package/dist/commands/update.d.ts +18 -0
  125. package/dist/commands/update.d.ts.map +1 -0
  126. package/dist/commands/update.helpers.d.ts +89 -0
  127. package/dist/commands/update.helpers.d.ts.map +1 -0
  128. package/dist/commands/update.helpers.js +335 -0
  129. package/dist/commands/update.helpers.js.map +1 -0
  130. package/dist/commands/update.js +187 -0
  131. package/dist/commands/update.js.map +1 -0
  132. package/dist/core/config-loader.d.ts +47 -0
  133. package/dist/core/config-loader.d.ts.map +1 -0
  134. package/dist/core/config-loader.js +188 -0
  135. package/dist/core/config-loader.js.map +1 -0
  136. package/dist/core/config-merger.d.ts +29 -0
  137. package/dist/core/config-merger.d.ts.map +1 -0
  138. package/dist/core/config-merger.js +100 -0
  139. package/dist/core/config-merger.js.map +1 -0
  140. package/dist/core/config-migration.d.ts +64 -0
  141. package/dist/core/config-migration.d.ts.map +1 -0
  142. package/dist/core/config-migration.js +340 -0
  143. package/dist/core/config-migration.js.map +1 -0
  144. package/dist/core/config-new.d.ts +19 -0
  145. package/dist/core/config-new.d.ts.map +1 -0
  146. package/dist/core/config-new.js +58 -0
  147. package/dist/core/config-new.js.map +1 -0
  148. package/dist/core/config-schema.d.ts +221 -0
  149. package/dist/core/config-schema.d.ts.map +1 -0
  150. package/dist/core/config-schema.js +168 -0
  151. package/dist/core/config-schema.js.map +1 -0
  152. package/dist/core/config.d.ts +55 -0
  153. package/dist/core/config.d.ts.map +1 -0
  154. package/dist/core/config.js +143 -0
  155. package/dist/core/config.js.map +1 -0
  156. package/dist/core/dev-server.d.ts +29 -0
  157. package/dist/core/dev-server.d.ts.map +1 -0
  158. package/dist/core/dev-server.js +54 -0
  159. package/dist/core/dev-server.js.map +1 -0
  160. package/dist/core/discovery.d.ts +51 -0
  161. package/dist/core/discovery.d.ts.map +1 -0
  162. package/dist/core/discovery.js +247 -0
  163. package/dist/core/discovery.js.map +1 -0
  164. package/dist/core/env.d.ts +13 -0
  165. package/dist/core/env.d.ts.map +1 -0
  166. package/dist/core/env.js +75 -0
  167. package/dist/core/env.js.map +1 -0
  168. package/dist/core/git.d.ts +31 -0
  169. package/dist/core/git.d.ts.map +1 -0
  170. package/dist/core/git.js +56 -0
  171. package/dist/core/git.js.map +1 -0
  172. package/dist/core/paths.d.ts +86 -0
  173. package/dist/core/paths.d.ts.map +1 -0
  174. package/dist/core/paths.js +256 -0
  175. package/dist/core/paths.js.map +1 -0
  176. package/dist/core/tmux-config.d.ts +174 -0
  177. package/dist/core/tmux-config.d.ts.map +1 -0
  178. package/dist/core/tmux-config.js +545 -0
  179. package/dist/core/tmux-config.js.map +1 -0
  180. package/dist/core/tmux-config.legacy.d.ts +243 -0
  181. package/dist/core/tmux-config.legacy.d.ts.map +1 -0
  182. package/dist/core/tmux-config.legacy.js +896 -0
  183. package/dist/core/tmux-config.legacy.js.map +1 -0
  184. package/dist/core/tmux.d.ts +214 -0
  185. package/dist/core/tmux.d.ts.map +1 -0
  186. package/dist/core/tmux.js +712 -0
  187. package/dist/core/tmux.js.map +1 -0
  188. package/dist/core/toolchain-resolver.d.ts +51 -0
  189. package/dist/core/toolchain-resolver.d.ts.map +1 -0
  190. package/dist/core/toolchain-resolver.js +364 -0
  191. package/dist/core/toolchain-resolver.js.map +1 -0
  192. package/dist/core/worktree-status.d.ts +20 -0
  193. package/dist/core/worktree-status.d.ts.map +1 -0
  194. package/dist/core/worktree-status.js +67 -0
  195. package/dist/core/worktree-status.js.map +1 -0
  196. package/dist/i18n/index.d.ts +36 -0
  197. package/dist/i18n/index.d.ts.map +1 -0
  198. package/dist/i18n/index.js +157 -0
  199. package/dist/i18n/index.js.map +1 -0
  200. package/dist/i18n/locales/en.d.ts +866 -0
  201. package/dist/i18n/locales/en.d.ts.map +1 -0
  202. package/dist/i18n/locales/en.js +985 -0
  203. package/dist/i18n/locales/en.js.map +1 -0
  204. package/dist/i18n/locales/zh-CN.d.ts +865 -0
  205. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  206. package/dist/i18n/locales/zh-CN.js +985 -0
  207. package/dist/i18n/locales/zh-CN.js.map +1 -0
  208. package/dist/index.d.ts +2 -0
  209. package/dist/index.d.ts.map +1 -0
  210. package/dist/index.js +4 -0
  211. package/dist/index.js.map +1 -0
  212. package/dist/plugins/builtin/gradle.d.ts +9 -0
  213. package/dist/plugins/builtin/gradle.d.ts.map +1 -0
  214. package/dist/plugins/builtin/gradle.js +164 -0
  215. package/dist/plugins/builtin/gradle.js.map +1 -0
  216. package/dist/plugins/builtin/maven.d.ts +9 -0
  217. package/dist/plugins/builtin/maven.d.ts.map +1 -0
  218. package/dist/plugins/builtin/maven.js +127 -0
  219. package/dist/plugins/builtin/maven.js.map +1 -0
  220. package/dist/plugins/builtin/npm.d.ts +9 -0
  221. package/dist/plugins/builtin/npm.d.ts.map +1 -0
  222. package/dist/plugins/builtin/npm.js +238 -0
  223. package/dist/plugins/builtin/npm.js.map +1 -0
  224. package/dist/plugins/builtin/pip.d.ts +9 -0
  225. package/dist/plugins/builtin/pip.d.ts.map +1 -0
  226. package/dist/plugins/builtin/pip.js +210 -0
  227. package/dist/plugins/builtin/pip.js.map +1 -0
  228. package/dist/plugins/builtin/xcode.d.ts +12 -0
  229. package/dist/plugins/builtin/xcode.d.ts.map +1 -0
  230. package/dist/plugins/builtin/xcode.js +438 -0
  231. package/dist/plugins/builtin/xcode.js.map +1 -0
  232. package/dist/plugins/index.d.ts +13 -0
  233. package/dist/plugins/index.d.ts.map +1 -0
  234. package/dist/plugins/index.js +24 -0
  235. package/dist/plugins/index.js.map +1 -0
  236. package/dist/plugins/manager.d.ts +93 -0
  237. package/dist/plugins/manager.d.ts.map +1 -0
  238. package/dist/plugins/manager.js +270 -0
  239. package/dist/plugins/manager.js.map +1 -0
  240. package/dist/plugins/utils.d.ts +42 -0
  241. package/dist/plugins/utils.d.ts.map +1 -0
  242. package/dist/plugins/utils.js +175 -0
  243. package/dist/plugins/utils.js.map +1 -0
  244. package/dist/types/index.d.ts +104 -0
  245. package/dist/types/index.d.ts.map +1 -0
  246. package/dist/types/index.js +21 -0
  247. package/dist/types/index.js.map +1 -0
  248. package/dist/types/plugin.d.ts +200 -0
  249. package/dist/types/plugin.d.ts.map +1 -0
  250. package/dist/types/plugin.js +19 -0
  251. package/dist/types/plugin.js.map +1 -0
  252. package/dist/utils/logger.d.ts +42 -0
  253. package/dist/utils/logger.d.ts.map +1 -0
  254. package/dist/utils/logger.js +80 -0
  255. package/dist/utils/logger.js.map +1 -0
  256. package/docs/en/manual/04-command-reference/README.md +58 -0
  257. package/docs/en/manual/README.md +108 -0
  258. package/docs/zh-CN/manual/04-command-reference/README.md +58 -0
  259. package/docs/zh-CN/manual/README.md +108 -0
  260. package/package.json +65 -0
  261. package/shell/colyn.sh +55 -0
  262. package/shell/completion.bash +270 -0
  263. package/shell/completion.zsh +167 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 配置文件加载模块
3
+ *
4
+ * 支持从文件系统加载配置文件:
5
+ * - JSON 格式(使用 JSON5 解析,支持注释)
6
+ * - YAML 格式
7
+ *
8
+ * 配置文件位置:
9
+ * - 用户级:~/.config/colyn/settings.{json|yaml|yml}
10
+ * - 项目级:{projectRoot}/.colyn/settings.{json|yaml|yml}
11
+ */
12
+ import type { Settings } from './config-schema.js';
13
+ /**
14
+ * 获取用户级配置目录
15
+ * @returns 用户配置目录路径
16
+ */
17
+ export declare function getUserConfigDir(): string;
18
+ /**
19
+ * 获取项目级配置目录
20
+ * @param projectRoot 项目根目录
21
+ * @returns 项目配置目录路径
22
+ */
23
+ export declare function getProjectConfigDir(projectRoot: string): string;
24
+ /**
25
+ * 加载用户级配置
26
+ * @returns 用户配置对象,如果不存在则返回 null
27
+ */
28
+ export declare function loadUserConfig(): Promise<Settings | null>;
29
+ /**
30
+ * 加载项目级配置
31
+ * @param projectRoot 项目根目录
32
+ * @returns 项目配置对象,如果不存在则返回 null
33
+ */
34
+ export declare function loadProjectConfig(projectRoot: string): Promise<Settings | null>;
35
+ /**
36
+ * 保存配置到文件
37
+ * @param filepath 配置文件路径
38
+ * @param settings 配置对象
39
+ */
40
+ export declare function saveConfigFile(filepath: string, settings: Settings): Promise<void>;
41
+ /**
42
+ * 查找配置文件路径
43
+ * @param dir 配置目录
44
+ * @returns 找到的配置文件路径,如果不存在则返回 null
45
+ */
46
+ export declare function findConfigFilePath(dir: string): Promise<string | null>;
47
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAwGnD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAG/D;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAGrF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW5E"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * 配置文件加载模块
3
+ *
4
+ * 支持从文件系统加载配置文件:
5
+ * - JSON 格式(使用 JSON5 解析,支持注释)
6
+ * - YAML 格式
7
+ *
8
+ * 配置文件位置:
9
+ * - 用户级:~/.config/colyn/settings.{json|yaml|yml}
10
+ * - 项目级:{projectRoot}/.colyn/settings.{json|yaml|yml}
11
+ */
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ import * as os from 'os';
15
+ import JSON5 from 'json5';
16
+ import yaml from 'js-yaml';
17
+ import { z } from 'zod';
18
+ import { loadAndMigrateConfig } from './config-migration.js';
19
+ /**
20
+ * 配置文件名(按优先级排序)
21
+ */
22
+ const CONFIG_FILENAMES = ['settings.json', 'settings.yaml', 'settings.yml'];
23
+ /**
24
+ * 配置文件目录
25
+ */
26
+ const CONFIG_DIR = '.colyn';
27
+ const USER_CONFIG_DIR = '.config/colyn';
28
+ /**
29
+ * 从文件加载并解析配置
30
+ * @param filepath 配置文件路径
31
+ * @returns 包含配置对象和是否发生迁移的信息
32
+ * @throws Error 如果文件格式错误或验证失败
33
+ */
34
+ async function loadConfigFile(filepath) {
35
+ try {
36
+ const content = await fs.readFile(filepath, 'utf-8');
37
+ const ext = path.extname(filepath);
38
+ let rawConfig;
39
+ if (ext === '.json') {
40
+ // 使用 JSON5 解析(支持注释和尾部逗号)
41
+ rawConfig = JSON5.parse(content);
42
+ }
43
+ else if (ext === '.yaml' || ext === '.yml') {
44
+ // 使用 js-yaml 解析
45
+ rawConfig = yaml.load(content);
46
+ }
47
+ else {
48
+ throw new Error(`不支持的配置文件格式: ${ext}`);
49
+ }
50
+ // 检查原始配置的版本号
51
+ const oldVersion = rawConfig.version ?? 0;
52
+ // 使用 Zod 验证和迁移配置
53
+ let migratedConfig;
54
+ try {
55
+ migratedConfig = loadAndMigrateConfig(rawConfig);
56
+ }
57
+ catch (error) {
58
+ if (error instanceof z.ZodError) {
59
+ const messages = error.issues
60
+ .map((e) => ` - ${e.path.join('.')}: ${e.message}`)
61
+ .join('\n');
62
+ throw new Error(`配置文件验证失败 (${filepath}):\n${messages}`);
63
+ }
64
+ throw error;
65
+ }
66
+ // 检查是否发生了迁移
67
+ const wasMigrated = oldVersion !== migratedConfig.version;
68
+ return { config: migratedConfig, wasMigrated };
69
+ }
70
+ catch (error) {
71
+ if (error.code === 'ENOENT') {
72
+ return null; // 文件不存在
73
+ }
74
+ throw error;
75
+ }
76
+ }
77
+ /**
78
+ * 从目录加载配置(尝试多个文件名)
79
+ * @param dir 配置目录路径
80
+ * @returns 找到的第一个有效配置,如果都不存在则返回 null
81
+ */
82
+ async function loadConfigFromDir(dir) {
83
+ for (const filename of CONFIG_FILENAMES) {
84
+ const filepath = path.join(dir, filename);
85
+ try {
86
+ const result = await loadConfigFile(filepath);
87
+ if (result !== null) {
88
+ // 如果配置发生了迁移,自动保存
89
+ if (result.wasMigrated) {
90
+ await saveConfigFile(filepath, result.config);
91
+ }
92
+ return result.config;
93
+ }
94
+ }
95
+ catch (error) {
96
+ // 如果是验证错误或格式错误,继续尝试下一个文件
97
+ // 但如果是其他错误(如权限问题),应该抛出
98
+ if (error instanceof Error &&
99
+ (error.message.includes('配置文件验证失败') ||
100
+ error.message.includes('不支持的配置文件格式'))) {
101
+ // 跳过格式错误的文件,继续尝试下一个
102
+ continue;
103
+ }
104
+ // 其他错误直接抛出
105
+ throw error;
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ /**
111
+ * 获取用户级配置目录
112
+ * @returns 用户配置目录路径
113
+ */
114
+ export function getUserConfigDir() {
115
+ return path.join(os.homedir(), USER_CONFIG_DIR);
116
+ }
117
+ /**
118
+ * 获取项目级配置目录
119
+ * @param projectRoot 项目根目录
120
+ * @returns 项目配置目录路径
121
+ */
122
+ export function getProjectConfigDir(projectRoot) {
123
+ return path.join(projectRoot, CONFIG_DIR);
124
+ }
125
+ /**
126
+ * 加载用户级配置
127
+ * @returns 用户配置对象,如果不存在则返回 null
128
+ */
129
+ export async function loadUserConfig() {
130
+ const configDir = getUserConfigDir();
131
+ return loadConfigFromDir(configDir);
132
+ }
133
+ /**
134
+ * 加载项目级配置
135
+ * @param projectRoot 项目根目录
136
+ * @returns 项目配置对象,如果不存在则返回 null
137
+ */
138
+ export async function loadProjectConfig(projectRoot) {
139
+ const configDir = getProjectConfigDir(projectRoot);
140
+ return loadConfigFromDir(configDir);
141
+ }
142
+ /**
143
+ * 保存配置到文件
144
+ * @param filepath 配置文件路径
145
+ * @param settings 配置对象
146
+ */
147
+ export async function saveConfigFile(filepath, settings) {
148
+ const ext = path.extname(filepath);
149
+ let content;
150
+ if (ext === '.json') {
151
+ // JSON 格式(格式化输出)
152
+ content = JSON.stringify(settings, null, 2);
153
+ }
154
+ else if (ext === '.yaml' || ext === '.yml') {
155
+ // YAML 格式
156
+ content = yaml.dump(settings, {
157
+ indent: 2,
158
+ lineWidth: -1, // 不自动换行
159
+ });
160
+ }
161
+ else {
162
+ throw new Error(`不支持的配置文件格式: ${ext}`);
163
+ }
164
+ // 确保目录存在
165
+ const dir = path.dirname(filepath);
166
+ await fs.mkdir(dir, { recursive: true });
167
+ // 写入文件
168
+ await fs.writeFile(filepath, content, 'utf-8');
169
+ }
170
+ /**
171
+ * 查找配置文件路径
172
+ * @param dir 配置目录
173
+ * @returns 找到的配置文件路径,如果不存在则返回 null
174
+ */
175
+ export async function findConfigFilePath(dir) {
176
+ for (const filename of CONFIG_FILENAMES) {
177
+ const filepath = path.join(dir, filename);
178
+ try {
179
+ await fs.access(filepath);
180
+ return filepath;
181
+ }
182
+ catch {
183
+ continue;
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 配置合并模块
3
+ *
4
+ * 使用 deepmerge 实现多层配置的合并
5
+ * - 支持深度合并对象
6
+ * - 数组采用替换策略(而非合并)
7
+ * - 保持字段级覆盖(Field-level Override)
8
+ */
9
+ import type { Settings, TmuxConfig } from './config-schema.js';
10
+ /**
11
+ * 合并多个配置对象
12
+ * @param configs 配置对象数组(null 会被过滤掉)
13
+ * @returns 合并后的配置对象
14
+ */
15
+ export declare function mergeConfigs(...configs: Array<Settings | null>): Settings;
16
+ /**
17
+ * 合并 Tmux 配置
18
+ * @param configs Tmux 配置对象数组(null 会被过滤掉)
19
+ * @returns 合并后的 Tmux 配置对象
20
+ */
21
+ export declare function mergeTmuxConfigs(...configs: Array<TmuxConfig | null | undefined>): TmuxConfig;
22
+ /**
23
+ * 应用分支特定的配置覆盖
24
+ * @param settings 基础配置
25
+ * @param branchName 分支名称
26
+ * @returns 应用分支覆盖后的配置
27
+ */
28
+ export declare function applyBranchOverrides(settings: Settings, branchName: string): Settings;
29
+ //# sourceMappingURL=config-merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.d.ts","sourceRoot":"","sources":["../../src/core/config-merger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAkB/D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,CAYzE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,UAAU,CAcZ;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,GACjB,QAAQ,CA4CV"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * 配置合并模块
3
+ *
4
+ * 使用 deepmerge 实现多层配置的合并
5
+ * - 支持深度合并对象
6
+ * - 数组采用替换策略(而非合并)
7
+ * - 保持字段级覆盖(Field-level Override)
8
+ */
9
+ import deepmerge from 'deepmerge';
10
+ /**
11
+ * 合并配置选项
12
+ */
13
+ const MERGE_OPTIONS = {
14
+ // 数组替换而非合并
15
+ // 例如:branchOverrides 中的数组应该完全替换,而不是合并
16
+ arrayMerge: (_target, source) => source,
17
+ // 自定义合并函数(可选)
18
+ customMerge: (_key) => {
19
+ // 对于特定字段可以自定义合并逻辑
20
+ // 目前使用默认行为
21
+ return undefined;
22
+ },
23
+ };
24
+ /**
25
+ * 合并多个配置对象
26
+ * @param configs 配置对象数组(null 会被过滤掉)
27
+ * @returns 合并后的配置对象
28
+ */
29
+ export function mergeConfigs(...configs) {
30
+ const validConfigs = configs.filter((c) => c !== null);
31
+ if (validConfigs.length === 0) {
32
+ throw new Error('至少需要一个有效的配置对象');
33
+ }
34
+ if (validConfigs.length === 1) {
35
+ return validConfigs[0];
36
+ }
37
+ return deepmerge.all(validConfigs, MERGE_OPTIONS);
38
+ }
39
+ /**
40
+ * 合并 Tmux 配置
41
+ * @param configs Tmux 配置对象数组(null 会被过滤掉)
42
+ * @returns 合并后的 Tmux 配置对象
43
+ */
44
+ export function mergeTmuxConfigs(...configs) {
45
+ const validConfigs = configs.filter((c) => c !== null && c !== undefined);
46
+ if (validConfigs.length === 0) {
47
+ return {};
48
+ }
49
+ if (validConfigs.length === 1) {
50
+ return validConfigs[0];
51
+ }
52
+ return deepmerge.all(validConfigs, MERGE_OPTIONS);
53
+ }
54
+ /**
55
+ * 应用分支特定的配置覆盖
56
+ * @param settings 基础配置
57
+ * @param branchName 分支名称
58
+ * @returns 应用分支覆盖后的配置
59
+ */
60
+ export function applyBranchOverrides(settings, branchName) {
61
+ if (!settings.branchOverrides) {
62
+ return settings;
63
+ }
64
+ // 查找匹配的分支覆盖配置
65
+ let matchedOverride = null;
66
+ // 1. 精确匹配(优先级最高)
67
+ if (settings.branchOverrides[branchName]) {
68
+ matchedOverride = settings.branchOverrides[branchName];
69
+ }
70
+ else {
71
+ // 2. 通配符匹配
72
+ for (const [pattern, override] of Object.entries(settings.branchOverrides)) {
73
+ if (pattern.includes('*')) {
74
+ // 将通配符模式转换为正则表达式
75
+ const regexPattern = pattern
76
+ .replace(/[.+?^${}()|[\]\\]/g, '\\$&') // 转义特殊字符
77
+ .replace(/\*/g, '.*'); // 将 * 替换为 .*
78
+ const regex = new RegExp(`^${regexPattern}$`);
79
+ if (regex.test(branchName)) {
80
+ matchedOverride = override;
81
+ break; // 使用第一个匹配的通配符模式
82
+ }
83
+ }
84
+ }
85
+ }
86
+ // 如果没有匹配的覆盖配置,返回原配置
87
+ if (!matchedOverride) {
88
+ return settings;
89
+ }
90
+ // 合并基础配置和分支覆盖配置
91
+ // 注意:不包含 branchOverrides 本身,避免无限递归
92
+ const { branchOverrides, ...baseSettings } = settings;
93
+ const mergedSettings = deepmerge(baseSettings, matchedOverride, MERGE_OPTIONS);
94
+ // 保留原始的 branchOverrides
95
+ return {
96
+ ...mergedSettings,
97
+ branchOverrides,
98
+ };
99
+ }
100
+ //# sourceMappingURL=config-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/core/config-merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 配置版本迁移模块
3
+ *
4
+ * 使用 Zod transform 实现配置文件的版本迁移
5
+ * - V0 (无版本号) -> V3
6
+ * - V1 -> V2
7
+ * - V2 -> V3
8
+ * - V3 -> V4
9
+ *
10
+ * 迁移内容:
11
+ * - V0 -> V1: 添加版本号
12
+ * - V1 -> V2: 配置结构重构和废弃命令处理
13
+ * - V2 -> V3: 重命名内置命令(去掉 "auto" 前缀)
14
+ * - V3 -> V4: 插件系统重构(plugins/pluginSettings → toolchain/projects)
15
+ */
16
+ import { z } from 'zod';
17
+ import { type Settings, type TmuxConfig } from './config-schema.js';
18
+ /**
19
+ * V1 Settings 类型(带有旧字段:npm, claudeCommand)
20
+ */
21
+ type V1Settings = {
22
+ version?: number;
23
+ lang?: string;
24
+ npm?: string;
25
+ claudeCommand?: string;
26
+ tmux?: TmuxConfig;
27
+ branchOverrides?: Record<string, Partial<V1Settings>>;
28
+ };
29
+ /**
30
+ * V2 Settings 类型(已有 systemCommands,但内置命令还有 "auto" 前缀)
31
+ */
32
+ type V2Settings = Omit<Settings, 'version'> & {
33
+ version: 2;
34
+ };
35
+ /**
36
+ * V3 Settings 类型(含旧字段:plugins, pluginSettings)
37
+ */
38
+ type V3Settings = {
39
+ version: 3;
40
+ lang?: 'en' | 'zh-CN';
41
+ systemCommands?: {
42
+ npm?: string;
43
+ claude?: string;
44
+ };
45
+ tmux?: TmuxConfig;
46
+ plugins?: string[];
47
+ pluginSettings?: Record<string, Record<string, unknown>>;
48
+ branchOverrides?: Record<string, Partial<V3Settings>>;
49
+ };
50
+ /**
51
+ * 统一的配置 Schema(支持所有版本)
52
+ * Zod 会自动选择匹配的 Schema 并执行 transform
53
+ *
54
+ * 注意:顺序很重要,version literal 更具体的 Schema 放在前面
55
+ */
56
+ export declare const ConfigSchema: z.ZodUnion<readonly [z.ZodPipe<z.ZodType<V1Settings, unknown, z.core.$ZodTypeInternals<V1Settings, unknown>>, z.ZodTransform<Settings, V1Settings>>, z.ZodPipe<z.ZodType<V1Settings, unknown, z.core.$ZodTypeInternals<V1Settings, unknown>>, z.ZodTransform<V2Settings, V1Settings>>, z.ZodPipe<z.ZodType<V2Settings, unknown, z.core.$ZodTypeInternals<V2Settings, unknown>>, z.ZodTransform<Settings, V2Settings>>, z.ZodPipe<z.ZodType<V3Settings, unknown, z.core.$ZodTypeInternals<V3Settings, unknown>>, z.ZodTransform<Settings, V3Settings>>, z.ZodType<Settings, unknown, z.core.$ZodTypeInternals<Settings, unknown>>]>;
57
+ /**
58
+ * 加载并自动迁移配置
59
+ * @param rawConfig 原始配置数据
60
+ * @returns 迁移后的配置
61
+ */
62
+ export declare function loadAndMigrateConfig(rawConfig: unknown): Settings;
63
+ export {};
64
+ //# sourceMappingURL=config-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migration.d.ts","sourceRoot":"","sources":["../../src/core/config-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAkB5B;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CACvD,CAAC;AAoBF;;GAEG;AACH,KAAK,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAC5C,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC;AAoPF;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CACvD,CAAC;AAyIF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,omBAMvB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,CAEjE"}