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,340 @@
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 { BUILTIN_COMMANDS, TmuxConfigSchema, } from './config-schema.js';
18
+ /**
19
+ * 废弃的内置命令常量
20
+ */
21
+ const DEPRECATED_BUILTIN_COMMANDS = {
22
+ /** V1 废弃 */
23
+ AUTO_CLAUDE_DANGEROUSLY: 'auto continues claude session with dangerously skip permissions',
24
+ /** V2 废弃(V3 改为无 "auto" 前缀) */
25
+ AUTO_CLAUDE_OLD: 'auto continues claude session',
26
+ AUTO_DEV_SERVER_OLD: 'auto start dev server',
27
+ };
28
+ const V1SettingsSchemaBase = z.object({
29
+ version: z.literal(1),
30
+ lang: z.enum(['en', 'zh-CN']).optional(),
31
+ npm: z.string().optional(),
32
+ claudeCommand: z.string().optional(),
33
+ tmux: TmuxConfigSchema.optional(),
34
+ });
35
+ const V1SettingsSchema = V1SettingsSchemaBase.extend({
36
+ branchOverrides: z
37
+ .record(z.string(), z.lazy(() => V1SettingsSchema))
38
+ .optional(),
39
+ });
40
+ const V2SettingsSchemaBase = z.object({
41
+ version: z.literal(2),
42
+ lang: z.enum(['en', 'zh-CN']).optional(),
43
+ systemCommands: z
44
+ .object({
45
+ npm: z.string().optional(),
46
+ claude: z.string().optional(),
47
+ })
48
+ .optional(),
49
+ tmux: TmuxConfigSchema.optional(),
50
+ });
51
+ const V2SettingsSchema = V2SettingsSchemaBase.extend({
52
+ branchOverrides: z
53
+ .record(z.string(), z.lazy(() => V2SettingsSchema))
54
+ .optional(),
55
+ });
56
+ // ============================================================================
57
+ // V0 Settings Schema(无版本号)
58
+ // ============================================================================
59
+ const V0SettingsSchemaBase = z.object({
60
+ version: z.undefined(),
61
+ lang: z.enum(['en', 'zh-CN']).optional(),
62
+ npm: z.string().optional(),
63
+ claudeCommand: z.string().optional(),
64
+ tmux: TmuxConfigSchema.optional(),
65
+ });
66
+ const V0SettingsSchema = V0SettingsSchemaBase.extend({
67
+ branchOverrides: z
68
+ .record(z.string(), z.lazy(() => V0SettingsSchema))
69
+ .optional(),
70
+ });
71
+ // ============================================================================
72
+ // 迁移辅助函数
73
+ // ============================================================================
74
+ /**
75
+ * 迁移单个 Pane 配置中的废弃命令(V1->V2: dangerously)
76
+ */
77
+ function migratePaneCommandV1ToV2(paneConfig) {
78
+ if (!paneConfig || !paneConfig.command) {
79
+ return { pane: paneConfig, needsDangerouslySkipPermissions: false };
80
+ }
81
+ if (paneConfig.command === DEPRECATED_BUILTIN_COMMANDS.AUTO_CLAUDE_DANGEROUSLY) {
82
+ return {
83
+ pane: {
84
+ ...paneConfig,
85
+ command: DEPRECATED_BUILTIN_COMMANDS.AUTO_CLAUDE_OLD,
86
+ },
87
+ needsDangerouslySkipPermissions: true,
88
+ };
89
+ }
90
+ return { pane: paneConfig, needsDangerouslySkipPermissions: false };
91
+ }
92
+ /**
93
+ * 迁移单个 Pane 配置中的命令名称(V2->V3: 去掉 "auto" 前缀)
94
+ */
95
+ function migratePaneCommandV2ToV3(paneConfig) {
96
+ if (!paneConfig || !paneConfig.command) {
97
+ return paneConfig;
98
+ }
99
+ if (paneConfig.command === DEPRECATED_BUILTIN_COMMANDS.AUTO_CLAUDE_OLD) {
100
+ return {
101
+ ...paneConfig,
102
+ command: BUILTIN_COMMANDS.AUTO_CLAUDE,
103
+ };
104
+ }
105
+ if (paneConfig.command === DEPRECATED_BUILTIN_COMMANDS.AUTO_DEV_SERVER_OLD) {
106
+ return {
107
+ ...paneConfig,
108
+ command: BUILTIN_COMMANDS.AUTO_DEV_SERVER,
109
+ };
110
+ }
111
+ return paneConfig;
112
+ }
113
+ /**
114
+ * 迁移 Tmux 配置中的所有废弃命令(V1->V2)
115
+ */
116
+ function migrateTmuxCommandsV1ToV2(tmuxConfig) {
117
+ if (!tmuxConfig) {
118
+ return { tmux: undefined, needsDangerouslySkipPermissions: false };
119
+ }
120
+ const migratedTmux = { ...tmuxConfig };
121
+ let needsFlag = false;
122
+ // 迁移所有 pane 配置
123
+ const panes = [
124
+ 'leftPane',
125
+ 'rightPane',
126
+ 'topPane',
127
+ 'bottomPane',
128
+ 'topRightPane',
129
+ 'bottomRightPane',
130
+ 'topLeftPane',
131
+ 'bottomLeftPane',
132
+ ];
133
+ for (const paneName of panes) {
134
+ const { pane, needsDangerouslySkipPermissions } = migratePaneCommandV1ToV2(tmuxConfig[paneName]);
135
+ migratedTmux[paneName] = pane;
136
+ needsFlag = needsFlag || needsDangerouslySkipPermissions;
137
+ }
138
+ return { tmux: migratedTmux, needsDangerouslySkipPermissions: needsFlag };
139
+ }
140
+ /**
141
+ * 迁移 Tmux 配置中的命令名称(V2->V3)
142
+ */
143
+ function migrateTmuxCommandsV2ToV3(tmuxConfig) {
144
+ if (!tmuxConfig) {
145
+ return undefined;
146
+ }
147
+ const migratedTmux = { ...tmuxConfig };
148
+ // 迁移所有 pane 配置
149
+ const panes = [
150
+ 'leftPane',
151
+ 'rightPane',
152
+ 'topPane',
153
+ 'bottomPane',
154
+ 'topRightPane',
155
+ 'bottomRightPane',
156
+ 'topLeftPane',
157
+ 'bottomLeftPane',
158
+ ];
159
+ for (const paneName of panes) {
160
+ migratedTmux[paneName] = migratePaneCommandV2ToV3(tmuxConfig[paneName]);
161
+ }
162
+ return migratedTmux;
163
+ }
164
+ // ============================================================================
165
+ // V1 -> V2 迁移
166
+ // ============================================================================
167
+ /**
168
+ * 递归迁移 V1 Settings 到 V2(处理 branchOverrides)
169
+ */
170
+ function migrateV1ToV2Recursive(settings, isTopLevel = true) {
171
+ const result = {
172
+ version: 2,
173
+ };
174
+ // 迁移 lang
175
+ if (settings.lang) {
176
+ result.lang = settings.lang;
177
+ }
178
+ // 迁移 npm 和 claudeCommand 到 systemCommands
179
+ const hasOldNpm = 'npm' in settings && settings.npm !== undefined;
180
+ const hasOldClaudeCommand = 'claudeCommand' in settings && settings.claudeCommand !== undefined;
181
+ if (hasOldNpm || hasOldClaudeCommand) {
182
+ result.systemCommands = {};
183
+ if (hasOldNpm) {
184
+ result.systemCommands.npm = settings.npm;
185
+ }
186
+ if (hasOldClaudeCommand) {
187
+ result.systemCommands.claude = settings.claudeCommand;
188
+ }
189
+ }
190
+ // 迁移 tmux 配置和废弃命令
191
+ if (settings.tmux) {
192
+ const { tmux, needsDangerouslySkipPermissions } = migrateTmuxCommandsV1ToV2(settings.tmux);
193
+ result.tmux = tmux;
194
+ // 如果检测到废弃的命令,添加 --dangerously-skip-permissions 到 systemCommands.claude
195
+ if (needsDangerouslySkipPermissions && isTopLevel) {
196
+ result.systemCommands = result.systemCommands || {};
197
+ const currentClaudeCommand = result.systemCommands.claude || 'claude';
198
+ // 如果还没有 --dangerously-skip-permissions 参数,添加它
199
+ if (!currentClaudeCommand.includes('--dangerously-skip-permissions')) {
200
+ result.systemCommands.claude = `${currentClaudeCommand} --dangerously-skip-permissions`;
201
+ }
202
+ }
203
+ }
204
+ // 递归处理 branchOverrides
205
+ if (settings.branchOverrides) {
206
+ result.branchOverrides = {};
207
+ for (const [branch, branchSettings] of Object.entries(settings.branchOverrides)) {
208
+ result.branchOverrides[branch] = migrateV1ToV2Recursive(branchSettings, false);
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ /**
214
+ * V1 -> V2 Migration Schema
215
+ */
216
+ const V1ToV2Schema = V1SettingsSchema.transform((v1) => migrateV1ToV2Recursive(v1));
217
+ const V3SettingsSchemaBase = z.object({
218
+ version: z.literal(3),
219
+ lang: z.enum(['en', 'zh-CN']).optional(),
220
+ systemCommands: z
221
+ .object({
222
+ npm: z.string().optional(),
223
+ claude: z.string().optional(),
224
+ })
225
+ .optional(),
226
+ tmux: TmuxConfigSchema.optional(),
227
+ plugins: z.array(z.string()).optional(),
228
+ pluginSettings: z
229
+ .record(z.string(), z.record(z.string(), z.unknown()))
230
+ .optional(),
231
+ });
232
+ const V3SettingsSchema = V3SettingsSchemaBase.extend({
233
+ branchOverrides: z
234
+ .record(z.string(), z.lazy(() => V3SettingsSchema))
235
+ .optional(),
236
+ });
237
+ // ============================================================================
238
+ // V2 -> V3 迁移
239
+ // ============================================================================
240
+ /**
241
+ * 递归迁移 V2 Settings 到 V3(处理 branchOverrides)
242
+ */
243
+ function migrateV2ToV3Recursive(settings) {
244
+ const result = {
245
+ version: 3,
246
+ lang: settings.lang,
247
+ systemCommands: settings.systemCommands,
248
+ };
249
+ // 迁移 tmux 配置中的命令名称
250
+ if (settings.tmux) {
251
+ result.tmux = migrateTmuxCommandsV2ToV3(settings.tmux);
252
+ }
253
+ // 递归处理 branchOverrides
254
+ if (settings.branchOverrides) {
255
+ result.branchOverrides = {};
256
+ for (const [branch, branchSettings] of Object.entries(settings.branchOverrides)) {
257
+ result.branchOverrides[branch] = migrateV2ToV3Recursive(branchSettings);
258
+ }
259
+ }
260
+ return result;
261
+ }
262
+ /**
263
+ * V2 -> V3 Migration Schema
264
+ */
265
+ const V2ToV3Schema = V2SettingsSchema.transform((v2) => migrateV2ToV3Recursive(v2));
266
+ // ============================================================================
267
+ // V3 -> V4 迁移
268
+ // ============================================================================
269
+ /**
270
+ * 递归迁移 V3 Settings 到 V4
271
+ * - 丢弃 plugins 和 pluginSettings(在运行时按需重新检测)
272
+ * - toolchain 和 projects 设为 undefined(触发按需发现)
273
+ */
274
+ function migrateV3ToV4Recursive(settings) {
275
+ const result = {
276
+ version: 4,
277
+ lang: settings.lang,
278
+ systemCommands: settings.systemCommands,
279
+ };
280
+ if (settings.tmux) {
281
+ result.tmux = settings.tmux;
282
+ }
283
+ // 递归处理 branchOverrides
284
+ if (settings.branchOverrides) {
285
+ result.branchOverrides = {};
286
+ for (const [branch, branchSettings] of Object.entries(settings.branchOverrides)) {
287
+ result.branchOverrides[branch] = migrateV3ToV4Recursive(branchSettings);
288
+ }
289
+ }
290
+ // 注意:toolchain 和 projects 故意不设置(undefined),
291
+ // 这会在命令运行时触发「按需发现」流程重新检测工具链
292
+ return result;
293
+ }
294
+ /**
295
+ * V3 -> V4 Migration Schema
296
+ */
297
+ const V3ToV4Schema = V3SettingsSchema.transform((v3) => migrateV3ToV4Recursive(v3));
298
+ // ============================================================================
299
+ // V0 -> V3 迁移(通过 V1 -> V2 -> V3)
300
+ // ============================================================================
301
+ /**
302
+ * V0 -> V3 Migration Schema
303
+ */
304
+ const V0ToV3Schema = V0SettingsSchema.transform((v0) => {
305
+ // V0 -> V1: 添加版本号
306
+ const v1 = {
307
+ ...v0,
308
+ version: 1,
309
+ };
310
+ // V1 -> V2: 迁移配置结构
311
+ const v2 = migrateV1ToV2Recursive(v1);
312
+ // V2 -> V3: 重命名内置命令
313
+ return migrateV2ToV3Recursive(v2);
314
+ });
315
+ // ============================================================================
316
+ // 统一配置 Schema
317
+ // ============================================================================
318
+ import { SettingsSchema } from './config-schema.js';
319
+ /**
320
+ * 统一的配置 Schema(支持所有版本)
321
+ * Zod 会自动选择匹配的 Schema 并执行 transform
322
+ *
323
+ * 注意:顺序很重要,version literal 更具体的 Schema 放在前面
324
+ */
325
+ export const ConfigSchema = z.union([
326
+ V0ToV3Schema, // V0 -> V3(版本号为 undefined)
327
+ V1ToV2Schema, // V1 -> V2(版本号为 1)
328
+ V2ToV3Schema, // V2 -> V3(版本号为 2)
329
+ V3ToV4Schema, // V3 -> V4(版本号为 3,含 plugins/pluginSettings)
330
+ SettingsSchema, // 当前版本(V4)
331
+ ]);
332
+ /**
333
+ * 加载并自动迁移配置
334
+ * @param rawConfig 原始配置数据
335
+ * @returns 迁移后的配置
336
+ */
337
+ export function loadAndMigrateConfig(rawConfig) {
338
+ return ConfigSchema.parse(rawConfig);
339
+ }
340
+ //# sourceMappingURL=config-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migration.js","sourceRoot":"","sources":["../../src/core/config-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 新配置系统统一入口(过渡期)
3
+ *
4
+ * 这是新配置系统的入口文件,在完全迁移之前,使用 config-new.ts 作为文件名
5
+ * 完全迁移后将替换 config.ts
6
+ *
7
+ * 提供完整的配置管理功能:
8
+ * - 配置加载(支持 JSON5 和 YAML)
9
+ * - 配置合并(多层级、分支覆盖)
10
+ * - 配置验证(Zod Schema)
11
+ * - 自动迁移(版本管理)
12
+ */
13
+ export { type Settings, type TmuxConfig, type PaneConfig, type PaneCommand, type LayoutType, type SystemCommands, BUILTIN_COMMANDS, CURRENT_CONFIG_VERSION, LayoutTypeSchema, validateSettings, validateSettingsWithFriendlyError, } from './config-schema.js';
14
+ export { loadUserConfig, loadProjectConfig, saveConfigFile, findConfigFilePath, getUserConfigDir, getProjectConfigDir, } from './config-loader.js';
15
+ export { mergeConfigs, mergeTmuxConfigs, applyBranchOverrides, } from './config-merger.js';
16
+ export { loadAndMigrateConfig, ConfigSchema } from './config-migration.js';
17
+ import type { Settings } from './config-schema.js';
18
+ export declare function loadEffectiveConfig(projectRoot: string, branchName?: string): Promise<Settings>;
19
+ //# sourceMappingURL=config-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-new.d.ts","sourceRoot":"","sources":["../../src/core/config-new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EAEnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAEhB,gBAAgB,EAChB,iCAAiC,GAClC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAU3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC,CA4BnB"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * 新配置系统统一入口(过渡期)
3
+ *
4
+ * 这是新配置系统的入口文件,在完全迁移之前,使用 config-new.ts 作为文件名
5
+ * 完全迁移后将替换 config.ts
6
+ *
7
+ * 提供完整的配置管理功能:
8
+ * - 配置加载(支持 JSON5 和 YAML)
9
+ * - 配置合并(多层级、分支覆盖)
10
+ * - 配置验证(Zod Schema)
11
+ * - 自动迁移(版本管理)
12
+ */
13
+ // 导出 Schema 和类型
14
+ export {
15
+ // 常量
16
+ BUILTIN_COMMANDS, CURRENT_CONFIG_VERSION, LayoutTypeSchema,
17
+ // 验证函数
18
+ validateSettings, validateSettingsWithFriendlyError, } from './config-schema.js';
19
+ // 导出配置加载函数
20
+ export { loadUserConfig, loadProjectConfig, saveConfigFile, findConfigFilePath, getUserConfigDir, getProjectConfigDir, } from './config-loader.js';
21
+ // 导出配置合并函数
22
+ export { mergeConfigs, mergeTmuxConfigs, applyBranchOverrides, } from './config-merger.js';
23
+ // 导出迁移函数
24
+ export { loadAndMigrateConfig, ConfigSchema } from './config-migration.js';
25
+ /**
26
+ * 加载完整的生效配置
27
+ * @param projectRoot 项目根目录
28
+ * @param branchName 分支名称
29
+ * @returns 合并并应用分支覆盖后的配置
30
+ */
31
+ import { loadUserConfig, loadProjectConfig } from './config-loader.js';
32
+ import { mergeConfigs, applyBranchOverrides } from './config-merger.js';
33
+ export async function loadEffectiveConfig(projectRoot, branchName) {
34
+ // 加载用户级和项目级配置
35
+ const [userConfig, projectConfig] = await Promise.all([
36
+ loadUserConfig(),
37
+ loadProjectConfig(projectRoot),
38
+ ]);
39
+ // 合并配置(优先级:项目 > 用户)
40
+ const configs = [];
41
+ if (userConfig)
42
+ configs.push(userConfig);
43
+ if (projectConfig)
44
+ configs.push(projectConfig);
45
+ // 如果没有任何配置,返回最小配置
46
+ if (configs.length === 0) {
47
+ return {
48
+ version: 3,
49
+ };
50
+ }
51
+ let mergedConfig = mergeConfigs(...configs);
52
+ // 应用分支覆盖(如果提供了分支名)
53
+ if (branchName) {
54
+ mergedConfig = applyBranchOverrides(mergedConfig, branchName);
55
+ }
56
+ return mergedConfig;
57
+ }
58
+ //# sourceMappingURL=config-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-new.js","sourceRoot":"","sources":["../../src/core/config-new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gBAAgB;AAChB,OAAO;AAQL,KAAK;AACL,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB;AAChB,OAAO;AACP,gBAAgB,EAChB,iCAAiC,GAClC,MAAM,oBAAoB,CAAC;AAE5B,WAAW;AACX,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,WAAW;AACX,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,SAAS;AACT,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3E;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,UAAmB;IAEnB,cAAc;IACd,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,cAAc,EAAE;QAChB,iBAAiB,CAAC,WAAW,CAAC;KAC/B,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,IAAI,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,aAAa;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE/C,kBAAkB;IAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC;IAE5C,mBAAmB;IACnB,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,GAAG,oBAAoB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * 配置文件 Schema 定义
3
+ *
4
+ * 使用 Zod 定义配置文件的结构和验证规则
5
+ * - 类型定义和运行时验证合二为一
6
+ * - 自动类型推断,无需手写 interface
7
+ * - 支持配置版本迁移
8
+ */
9
+ import { z } from 'zod';
10
+ /**
11
+ * 内置命令常量
12
+ */
13
+ export declare const BUILTIN_COMMANDS: {
14
+ /** 启动 dev server */
15
+ readonly AUTO_DEV_SERVER: "start dev server";
16
+ /** 继续 Claude 会话 */
17
+ readonly AUTO_CLAUDE: "continue claude session";
18
+ };
19
+ /**
20
+ * 布局类型
21
+ */
22
+ export declare const LayoutTypeSchema: z.ZodEnum<{
23
+ "single-pane": "single-pane";
24
+ "two-pane-horizontal": "two-pane-horizontal";
25
+ "two-pane-vertical": "two-pane-vertical";
26
+ "three-pane": "three-pane";
27
+ "four-pane": "four-pane";
28
+ }>;
29
+ export type LayoutType = z.infer<typeof LayoutTypeSchema>;
30
+ /**
31
+ * Pane 命令 Schema
32
+ * - 内置命令:使用预定义的自动检测逻辑
33
+ * - string: 自定义命令
34
+ * - null: 不执行任何命令
35
+ */
36
+ export declare const PaneCommandSchema: z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>;
37
+ export type PaneCommand = z.infer<typeof PaneCommandSchema>;
38
+ /**
39
+ * 单个 Pane 的配置 Schema
40
+ */
41
+ export declare const PaneConfigSchema: z.ZodObject<{
42
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
43
+ size: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strip>;
45
+ export type PaneConfig = z.infer<typeof PaneConfigSchema>;
46
+ /**
47
+ * Tmux 配置 Schema
48
+ */
49
+ export declare const TmuxConfigSchema: z.ZodObject<{
50
+ autoRun: z.ZodOptional<z.ZodBoolean>;
51
+ layout: z.ZodOptional<z.ZodEnum<{
52
+ "single-pane": "single-pane";
53
+ "two-pane-horizontal": "two-pane-horizontal";
54
+ "two-pane-vertical": "two-pane-vertical";
55
+ "three-pane": "three-pane";
56
+ "four-pane": "four-pane";
57
+ }>>;
58
+ leftPane: z.ZodOptional<z.ZodObject<{
59
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
60
+ size: z.ZodOptional<z.ZodString>;
61
+ }, z.core.$strip>>;
62
+ rightPane: z.ZodOptional<z.ZodObject<{
63
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
64
+ size: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>>;
66
+ topPane: z.ZodOptional<z.ZodObject<{
67
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
68
+ size: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strip>>;
70
+ bottomPane: z.ZodOptional<z.ZodObject<{
71
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
72
+ size: z.ZodOptional<z.ZodString>;
73
+ }, z.core.$strip>>;
74
+ topRightPane: z.ZodOptional<z.ZodObject<{
75
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
76
+ size: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strip>>;
78
+ bottomRightPane: z.ZodOptional<z.ZodObject<{
79
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
80
+ size: z.ZodOptional<z.ZodString>;
81
+ }, z.core.$strip>>;
82
+ topLeftPane: z.ZodOptional<z.ZodObject<{
83
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
84
+ size: z.ZodOptional<z.ZodString>;
85
+ }, z.core.$strip>>;
86
+ bottomLeftPane: z.ZodOptional<z.ZodObject<{
87
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
88
+ size: z.ZodOptional<z.ZodString>;
89
+ }, z.core.$strip>>;
90
+ horizontalSplit: z.ZodOptional<z.ZodString>;
91
+ verticalSplit: z.ZodOptional<z.ZodString>;
92
+ }, z.core.$strip>;
93
+ export type TmuxConfig = z.infer<typeof TmuxConfigSchema>;
94
+ /**
95
+ * 系统命令配置 Schema
96
+ */
97
+ export declare const SystemCommandsSchema: z.ZodObject<{
98
+ npm: z.ZodOptional<z.ZodString>;
99
+ claude: z.ZodOptional<z.ZodString>;
100
+ }, z.core.$strip>;
101
+ export type SystemCommands = z.infer<typeof SystemCommandsSchema>;
102
+ /**
103
+ * 工具链配置 Schema
104
+ * 描述单个子项目(或根目录)使用的工具链类型和专属配置
105
+ */
106
+ export declare const ToolchainConfigSchema: z.ZodObject<{
107
+ type: z.ZodString;
108
+ settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
109
+ }, z.core.$strip>;
110
+ export type ToolchainConfig = z.infer<typeof ToolchainConfigSchema>;
111
+ /**
112
+ * 子项目配置 Schema(Mono Repo 模式)
113
+ */
114
+ export declare const SubProjectSchema: z.ZodObject<{
115
+ path: z.ZodString;
116
+ toolchain: z.ZodUnion<readonly [z.ZodObject<{
117
+ type: z.ZodString;
118
+ settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
119
+ }, z.core.$strip>, z.ZodNull]>;
120
+ }, z.core.$strip>;
121
+ export type SubProject = z.infer<typeof SubProjectSchema>;
122
+ /**
123
+ * Settings Schema 基础部分(不包含递归的 branchOverrides)
124
+ */
125
+ declare const SettingsSchemaBase: z.ZodObject<{
126
+ version: z.ZodNumber;
127
+ lang: z.ZodOptional<z.ZodEnum<{
128
+ en: "en";
129
+ "zh-CN": "zh-CN";
130
+ }>>;
131
+ systemCommands: z.ZodOptional<z.ZodObject<{
132
+ npm: z.ZodOptional<z.ZodString>;
133
+ claude: z.ZodOptional<z.ZodString>;
134
+ }, z.core.$strip>>;
135
+ tmux: z.ZodOptional<z.ZodObject<{
136
+ autoRun: z.ZodOptional<z.ZodBoolean>;
137
+ layout: z.ZodOptional<z.ZodEnum<{
138
+ "single-pane": "single-pane";
139
+ "two-pane-horizontal": "two-pane-horizontal";
140
+ "two-pane-vertical": "two-pane-vertical";
141
+ "three-pane": "three-pane";
142
+ "four-pane": "four-pane";
143
+ }>>;
144
+ leftPane: z.ZodOptional<z.ZodObject<{
145
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
146
+ size: z.ZodOptional<z.ZodString>;
147
+ }, z.core.$strip>>;
148
+ rightPane: z.ZodOptional<z.ZodObject<{
149
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
150
+ size: z.ZodOptional<z.ZodString>;
151
+ }, z.core.$strip>>;
152
+ topPane: z.ZodOptional<z.ZodObject<{
153
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
154
+ size: z.ZodOptional<z.ZodString>;
155
+ }, z.core.$strip>>;
156
+ bottomPane: z.ZodOptional<z.ZodObject<{
157
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
158
+ size: z.ZodOptional<z.ZodString>;
159
+ }, z.core.$strip>>;
160
+ topRightPane: z.ZodOptional<z.ZodObject<{
161
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
162
+ size: z.ZodOptional<z.ZodString>;
163
+ }, z.core.$strip>>;
164
+ bottomRightPane: z.ZodOptional<z.ZodObject<{
165
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
166
+ size: z.ZodOptional<z.ZodString>;
167
+ }, z.core.$strip>>;
168
+ topLeftPane: z.ZodOptional<z.ZodObject<{
169
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
170
+ size: z.ZodOptional<z.ZodString>;
171
+ }, z.core.$strip>>;
172
+ bottomLeftPane: z.ZodOptional<z.ZodObject<{
173
+ command: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"start dev server">, z.ZodLiteral<"continue claude session">, z.ZodString, z.ZodNull]>>;
174
+ size: z.ZodOptional<z.ZodString>;
175
+ }, z.core.$strip>>;
176
+ horizontalSplit: z.ZodOptional<z.ZodString>;
177
+ verticalSplit: z.ZodOptional<z.ZodString>;
178
+ }, z.core.$strip>>;
179
+ toolchain: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
180
+ type: z.ZodString;
181
+ settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
182
+ }, z.core.$strip>, z.ZodNull]>>;
183
+ projects: z.ZodOptional<z.ZodArray<z.ZodObject<{
184
+ path: z.ZodString;
185
+ toolchain: z.ZodUnion<readonly [z.ZodObject<{
186
+ type: z.ZodString;
187
+ settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
188
+ }, z.core.$strip>, z.ZodNull]>;
189
+ }, z.core.$strip>>>;
190
+ }, z.core.$strip>;
191
+ /**
192
+ * Settings 类型(自动从 Schema 推断)
193
+ */
194
+ export type Settings = z.infer<typeof SettingsSchemaBase> & {
195
+ branchOverrides?: Record<string, Partial<Settings>>;
196
+ };
197
+ /**
198
+ * Settings Schema(支持递归的 branchOverrides)
199
+ */
200
+ export declare const SettingsSchema: z.ZodType<Settings>;
201
+ /**
202
+ * 当前配置文件版本号
203
+ */
204
+ export declare const CURRENT_CONFIG_VERSION = 4;
205
+ /**
206
+ * 验证配置对象
207
+ * @param data 待验证的数据
208
+ * @returns 验证后的配置对象
209
+ * @throws ZodError 如果验证失败
210
+ */
211
+ export declare function validateSettings(data: unknown): Settings;
212
+ /**
213
+ * 验证配置对象(带友好的错误提示)
214
+ * @param filepath 配置文件路径(用于错误提示)
215
+ * @param data 待验证的数据
216
+ * @returns 验证后的配置对象
217
+ * @throws Error 如果验证失败,包含友好的错误信息
218
+ */
219
+ export declare function validateSettingsWithFriendlyError(filepath: string, data: unknown): Settings;
220
+ export {};
221
+ //# sourceMappingURL=config-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,oBAAoB;;IAEpB,mBAAmB;;CAEX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,0HAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoB3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;iBAK/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;iBAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBtB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAKtB,CAAC;AAE1B;;GAEG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,QAAQ,CAeV"}