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,256 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { ColynError } from '../types/index.js';
4
+ import { t } from '../i18n/index.js';
5
+ /**
6
+ * 验证是否是有效的 colyn 项目
7
+ * 避免误判 home 目录等其他包含 .colyn 目录的位置
8
+ */
9
+ async function isValidColynProject(rootDir) {
10
+ try {
11
+ // 1. 检查主分支目录是否存在
12
+ const mainDirName = path.basename(rootDir);
13
+ const mainDir = path.join(rootDir, mainDirName);
14
+ const mainDirStats = await fs.stat(mainDir);
15
+ if (!mainDirStats.isDirectory()) {
16
+ return false;
17
+ }
18
+ // 2. 检查 worktrees 目录是否存在
19
+ const worktreesDir = path.join(rootDir, 'worktrees');
20
+ const worktreesDirStats = await fs.stat(worktreesDir);
21
+ if (!worktreesDirStats.isDirectory()) {
22
+ return false;
23
+ }
24
+ // 注意:config.json 不是必需的,所以不验证它
25
+ return true;
26
+ }
27
+ catch {
28
+ // 任何验证失败都返回 false
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * 从当前目录向上查找项目根目录
34
+ * 根目录的标志是包含 .colyn 目录,并且通过多重验证确保是有效的 colyn 项目
35
+ */
36
+ export async function findProjectRoot(startDir = process.cwd()) {
37
+ let currentDir = path.resolve(startDir);
38
+ // 最多向上查找 20 层,避免无限循环
39
+ for (let i = 0; i < 20; i++) {
40
+ const colynDir = path.join(currentDir, '.colyn');
41
+ try {
42
+ const stats = await fs.stat(colynDir);
43
+ if (stats.isDirectory()) {
44
+ // 找到 .colyn 目录,验证这是一个有效的 colyn 项目
45
+ if (await isValidColynProject(currentDir)) {
46
+ return currentDir;
47
+ }
48
+ }
49
+ }
50
+ catch (err) {
51
+ // .colyn 不存在,继续向上查找
52
+ }
53
+ // 获取父目录
54
+ const parentDir = path.dirname(currentDir);
55
+ // 如果已经到达文件系统根目录,停止查找
56
+ if (parentDir === currentDir) {
57
+ break;
58
+ }
59
+ currentDir = parentDir;
60
+ }
61
+ throw new ColynError(t('errors.projectRootNotFound'), t('errors.projectRootNotFoundHint'));
62
+ }
63
+ /**
64
+ * 获取项目所有相关路径
65
+ */
66
+ export async function getProjectPaths(startDir = process.cwd()) {
67
+ const rootDir = await findProjectRoot(startDir);
68
+ const mainDirName = path.basename(rootDir);
69
+ return {
70
+ rootDir,
71
+ mainDirName,
72
+ mainDir: path.join(rootDir, mainDirName),
73
+ worktreesDir: path.join(rootDir, 'worktrees'),
74
+ configDir: path.join(rootDir, '.colyn')
75
+ };
76
+ }
77
+ /**
78
+ * 获取当前 worktree 信息
79
+ * 通过读取 .env.local 文件中的 WORKTREE 变量来判断
80
+ */
81
+ export async function getCurrentWorktreeInfo(startDir = process.cwd()) {
82
+ const currentDir = path.resolve(startDir);
83
+ try {
84
+ // 尝试查找项目根目录
85
+ const rootDir = await findProjectRoot(currentDir);
86
+ const relativeToRoot = path.relative(rootDir, currentDir);
87
+ // 读取当前目录的 .env.local 文件
88
+ const envFilePath = path.join(currentDir, '.env.local');
89
+ try {
90
+ const envContent = await fs.readFile(envFilePath, 'utf-8');
91
+ // 解析 WORKTREE 变量
92
+ const worktreeMatch = envContent.match(/^WORKTREE=(.+)$/m);
93
+ if (worktreeMatch) {
94
+ const worktreeValue = worktreeMatch[1].trim();
95
+ // 如果 WORKTREE 是数字,说明在 worktree 中
96
+ const worktreeId = parseInt(worktreeValue);
97
+ if (!isNaN(worktreeId)) {
98
+ return {
99
+ isWorktree: true,
100
+ worktreeId,
101
+ currentDir,
102
+ relativeToRoot
103
+ };
104
+ }
105
+ // 如果 WORKTREE 是 "main",说明在主分支中
106
+ if (worktreeValue === 'main') {
107
+ return {
108
+ isWorktree: false,
109
+ currentDir,
110
+ relativeToRoot
111
+ };
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // .env.local 不存在或读取失败,说明不在 worktree 或主分支目录中
117
+ }
118
+ // 默认认为不在 worktree 中
119
+ return {
120
+ isWorktree: false,
121
+ currentDir,
122
+ relativeToRoot
123
+ };
124
+ }
125
+ catch {
126
+ // 如果找不到项目根目录,返回基本信息
127
+ return {
128
+ isWorktree: false,
129
+ currentDir
130
+ };
131
+ }
132
+ }
133
+ /**
134
+ * 获取当前位置的完整信息
135
+ * 用于 info 命令
136
+ */
137
+ export async function getLocationInfo(startDir = process.cwd()) {
138
+ const currentDir = path.resolve(startDir);
139
+ // 查找项目根目录
140
+ const rootDir = await findProjectRoot(currentDir);
141
+ const mainDirName = path.basename(rootDir);
142
+ const mainDir = path.join(rootDir, mainDirName);
143
+ const worktreesDir = path.join(rootDir, 'worktrees');
144
+ // 检查当前目录是否在主分支目录下
145
+ if (currentDir === mainDir || currentDir.startsWith(mainDir + path.sep)) {
146
+ // 在主分支目录中
147
+ const simpleGit = (await import('simple-git')).default;
148
+ const git = simpleGit(mainDir);
149
+ const branchSummary = await git.branch();
150
+ return {
151
+ project: mainDirName,
152
+ projectPath: rootDir,
153
+ mainBranchPath: mainDir,
154
+ worktreeId: 0,
155
+ worktreeDir: mainDirName,
156
+ worktreePath: mainDir,
157
+ branch: branchSummary.current,
158
+ isMainBranch: true
159
+ };
160
+ }
161
+ // 检查当前目录是否在 worktrees 目录下
162
+ if (currentDir === worktreesDir || currentDir.startsWith(worktreesDir + path.sep)) {
163
+ // 在 worktrees 目录下,找出是哪个 worktree
164
+ const relativePath = path.relative(worktreesDir, currentDir);
165
+ const worktreeDirName = relativePath.split(path.sep)[0];
166
+ // 检查是否是 task-N 格式
167
+ const idMatch = worktreeDirName.match(/^task-(\d+)$/);
168
+ if (idMatch) {
169
+ const worktreeId = parseInt(idMatch[1]);
170
+ const worktreePath = path.join(worktreesDir, worktreeDirName);
171
+ // 获取当前分支
172
+ const simpleGit = (await import('simple-git')).default;
173
+ const git = simpleGit(worktreePath);
174
+ const branchSummary = await git.branch();
175
+ return {
176
+ project: mainDirName,
177
+ projectPath: rootDir,
178
+ mainBranchPath: mainDir,
179
+ worktreeId,
180
+ worktreeDir: worktreeDirName,
181
+ worktreePath,
182
+ branch: branchSummary.current,
183
+ isMainBranch: false
184
+ };
185
+ }
186
+ }
187
+ // 不在有效位置
188
+ throw new ColynError(t('commands.info.notInWorktree'), t('commands.info.notInWorktreeHint'));
189
+ }
190
+ /**
191
+ * 验证目录存在
192
+ */
193
+ export async function validateDirectoryExists(dirPath, errorMessage) {
194
+ try {
195
+ const stats = await fs.stat(dirPath);
196
+ if (!stats.isDirectory()) {
197
+ throw new ColynError(errorMessage, t('errors.pathExistsNotDir', { path: dirPath }));
198
+ }
199
+ }
200
+ catch (err) {
201
+ if (err.code === 'ENOENT') {
202
+ throw new ColynError(errorMessage, t('errors.pathNotFound', { path: dirPath }));
203
+ }
204
+ throw err;
205
+ }
206
+ }
207
+ /**
208
+ * 验证项目已初始化
209
+ */
210
+ export async function validateProjectInitialized(paths) {
211
+ // 检查 .colyn 配置目录是否存在(不再需要 config.json)
212
+ try {
213
+ await fs.access(paths.configDir);
214
+ }
215
+ catch {
216
+ throw new ColynError(t('errors.projectNotInitialized'), t('errors.projectNotInitializedHint'));
217
+ }
218
+ // 检查主分支目录是否存在
219
+ await validateDirectoryExists(paths.mainDir, t('errors.mainDirNotFound'));
220
+ // 检查 worktrees 目录是否存在
221
+ await validateDirectoryExists(paths.worktreesDir, t('errors.worktreesDirNotFound'));
222
+ }
223
+ /**
224
+ * 获取指定目录相对于根目录的简短描述
225
+ */
226
+ export function getDirectoryDescription(currentDir, paths) {
227
+ const relative = path.relative(paths.rootDir, currentDir);
228
+ if (relative === '') {
229
+ return t('output.projectRoot');
230
+ }
231
+ if (currentDir === paths.mainDir) {
232
+ return t('output.mainBranchDir');
233
+ }
234
+ if (currentDir.startsWith(paths.worktreesDir)) {
235
+ return t('output.worktreeDir');
236
+ }
237
+ if (currentDir === paths.configDir) {
238
+ return t('output.configDir');
239
+ }
240
+ return t('output.subDir', { path: relative });
241
+ }
242
+ /**
243
+ * 切换到指定目录执行操作
244
+ * 执行完成后恢复原目录
245
+ */
246
+ export async function executeInDirectory(targetDir, operation) {
247
+ const originalDir = process.cwd();
248
+ try {
249
+ process.chdir(targetDir);
250
+ return await operation();
251
+ }
252
+ finally {
253
+ process.chdir(originalDir);
254
+ }
255
+ }
256
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Tmux Pane 命令配置模块(使用新配置系统)
3
+ *
4
+ * 提供 tmux pane 命令的配置加载和自动检测功能
5
+ *
6
+ * 配置文件层级(优先级从低到高):
7
+ * 1. 内置默认值
8
+ * 2. 用户级配置:~/.config/colyn/settings.{json|yaml|yml}
9
+ * 3. 项目级配置:{projectRoot}/.colyn/settings.{json|yaml|yml}
10
+ *
11
+ * 新配置系统特性:
12
+ * - 支持 JSON5(注释、尾部逗号)和 YAML 格式
13
+ * - 自动配置版本迁移
14
+ * - Zod Schema 验证
15
+ * - 使用 deepmerge 进行配置合并
16
+ */
17
+ import { type Settings, type TmuxConfig, type PaneConfig, type PaneCommand, type LayoutType, type SystemCommands, BUILTIN_COMMANDS, CURRENT_CONFIG_VERSION } from './config-new.js';
18
+ export { type Settings, type TmuxConfig, type PaneConfig, type PaneCommand, type LayoutType, type SystemCommands, BUILTIN_COMMANDS, CURRENT_CONFIG_VERSION, };
19
+ /**
20
+ * 窗格名称映射表
21
+ * 定义每种布局支持的窗格名称
22
+ */
23
+ export declare const LAYOUT_PANES: Record<LayoutType, string[]>;
24
+ /**
25
+ * 解析后的 Pane 命令
26
+ */
27
+ export interface ResolvedPaneCommands {
28
+ /** Pane 0 命令 */
29
+ pane0?: string;
30
+ /** Pane 1 命令 */
31
+ pane1?: string;
32
+ /** Pane 2 命令 */
33
+ pane2?: string;
34
+ /** Pane 3 命令(四窗格布局) */
35
+ pane3?: string;
36
+ }
37
+ /**
38
+ * 解析后的 Pane 布局
39
+ */
40
+ export interface ResolvedPaneLayout {
41
+ /** 布局类型 */
42
+ layout: LayoutType;
43
+ /** two-pane-horizontal: 左侧大小 */
44
+ leftSize?: number;
45
+ /** two-pane-vertical: 上方大小 */
46
+ topSize?: number;
47
+ /** three-pane: 左侧大小和右上大小 */
48
+ rightTopSize?: number;
49
+ /** four-pane: 水平分割位置(上方占总高度的百分比) */
50
+ horizontalSplit?: number;
51
+ /** four-pane: 垂直分割位置(左侧占总宽度的百分比) */
52
+ verticalSplit?: number;
53
+ /** four-pane: 各窗格大小(当未同时配置两个 split 时使用) */
54
+ topLeftSize?: number;
55
+ topRightSize?: number;
56
+ bottomLeftSize?: number;
57
+ bottomRightSize?: number;
58
+ }
59
+ /**
60
+ * 获取用户级配置目录
61
+ * 遵循 XDG Base Directory 规范
62
+ */
63
+ export declare function getUserConfigDir(): string;
64
+ /**
65
+ * 获取用户级设置文件路径
66
+ */
67
+ export declare function getUserConfigPath(): string;
68
+ /**
69
+ * 获取项目级设置文件路径
70
+ * @param projectRoot 项目根目录
71
+ */
72
+ export declare function getProjectConfigPath(projectRoot: string): string;
73
+ /**
74
+ * 从设置文件加载完整设置(用于 config 命令显示)
75
+ * 自动执行必要的 migration 并保存更新后的配置
76
+ * @param configPath 设置文件路径
77
+ * @returns 完整设置对象,如果文件不存在或无法解析则返回 null
78
+ */
79
+ export declare function loadSettingsFromFile(configPath: string): Promise<Settings | null>;
80
+ /**
81
+ * 加载 tmux 配置(两层配置机制)
82
+ *
83
+ * 配置加载顺序(优先级从低到高):
84
+ * 1. 内置默认值
85
+ * 2. 用户级配置:~/.config/colyn/settings.{json|yaml|yml} 中的 tmux 字段
86
+ * 3. 项目级配置:{projectRoot}/.colyn/settings.{json|yaml|yml} 中的 tmux 字段
87
+ *
88
+ * @param projectRoot 项目根目录
89
+ * @returns 合并后的配置对象
90
+ */
91
+ export declare function loadTmuxConfig(projectRoot: string): Promise<TmuxConfig>;
92
+ /**
93
+ * 检查 worktree 是否存在 Claude session
94
+ * 通过检查 ~/.claude/projects/{encodedPath} 下是否存在会话文件来判断
95
+ * @param worktreePath worktree 路径
96
+ */
97
+ export declare function hasClaudeSession(worktreePath: string): Promise<boolean>;
98
+ /**
99
+ * 解析所有 pane 命令
100
+ * @param config tmux 配置
101
+ * @param worktreePath worktree 路径
102
+ * @param projectRoot 项目根目录(可选,用于读取 claudeCommand 配置)
103
+ * @param branchName 分支名称(可选,用于读取分支特定的 claudeCommand 配置)
104
+ */
105
+ export declare function resolvePaneCommands(config: TmuxConfig, worktreePath: string, projectRoot?: string, branchName?: string): Promise<ResolvedPaneCommands>;
106
+ /**
107
+ * 解析 Pane 布局
108
+ * @param config tmux 配置
109
+ * @returns 解析后的布局信息
110
+ */
111
+ export declare function resolvePaneLayout(config: TmuxConfig): ResolvedPaneLayout;
112
+ /**
113
+ * 从设置中加载特定分支的配置
114
+ * @param settings 完整设置对象
115
+ * @param branchName 分支名称
116
+ * @returns 合并后的设置
117
+ */
118
+ export declare function loadBranchSettings(settings: Settings, branchName: string): Settings;
119
+ /**
120
+ * 加载特定分支的完整设置
121
+ *
122
+ * 配置优先级(从低到高):
123
+ * 1. User default(用户级全局配置)
124
+ * 2. Project default(项目级全局配置)
125
+ * 3. User override(用户级分支覆盖)
126
+ * 4. Project override(项目级分支覆盖)
127
+ *
128
+ * @param projectRoot 项目根目录
129
+ * @param branchName 分支名称
130
+ * @returns 合并后的完整设置
131
+ */
132
+ export declare function loadSettingsForBranch(projectRoot: string, branchName: string): Promise<Settings>;
133
+ /**
134
+ * 加载特定分支的 tmux 配置
135
+ *
136
+ * 配置优先级(从低到高):
137
+ * 1. System builtin(系统内置默认,如 main 分支默认单窗格)
138
+ * 2. User default(用户级全局配置,~/.config/colyn/settings.{json|yaml|yml} 的 tmux)
139
+ * 3. Project default(项目级全局配置,.colyn/settings.{json|yaml|yml} 的 tmux)
140
+ * 4. User override(用户级分支覆盖,~/.config/colyn/settings.{json|yaml|yml} 的 branchOverrides[branch].tmux)
141
+ * 5. Project override(项目级分支覆盖,.colyn/settings.{json|yaml|yml} 的 branchOverrides[branch].tmux)
142
+ *
143
+ * 全部按照字段级覆盖(field-level override)
144
+ *
145
+ * @param projectRoot 项目根目录
146
+ * @param branchName 分支名称
147
+ * @returns 合并后的 tmux 配置
148
+ */
149
+ export declare function loadTmuxConfigForBranch(projectRoot: string, branchName: string): Promise<TmuxConfig>;
150
+ /**
151
+ * 配置验证结果
152
+ */
153
+ export interface ValidationResult {
154
+ /** 是否有错误 */
155
+ hasError: boolean;
156
+ /** 错误消息列表 */
157
+ errors: string[];
158
+ /** 警告消息列表 */
159
+ warnings: string[];
160
+ }
161
+ /**
162
+ * 检测布局类型
163
+ * 根据配置的窗格自动检测布局类型(向后兼容)
164
+ * @param config tmux 配置
165
+ * @returns 检测到的布局类型
166
+ */
167
+ export declare function detectLayoutType(config: TmuxConfig): LayoutType;
168
+ /**
169
+ * 验证 tmux 配置
170
+ * @param config tmux 配置
171
+ * @returns 验证结果
172
+ */
173
+ export declare function validateTmuxConfig(config: TmuxConfig): ValidationResult;
174
+ //# sourceMappingURL=tmux-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux-config.d.ts","sourceRoot":"","sources":["../../src/core/tmux-config.ts"],"names":[],"mappings":"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"}