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.
- package/README-en.md +85 -0
- package/README.md +85 -0
- package/bin/colyn +25 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +116 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +6 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.helpers.d.ts +48 -0
- package/dist/commands/add.helpers.d.ts.map +1 -0
- package/dist/commands/add.helpers.js +251 -0
- package/dist/commands/add.helpers.js.map +1 -0
- package/dist/commands/add.js +286 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/checkout.d.ts +16 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +428 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/completion.d.ts +10 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +380 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +338 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +41 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/info.d.ts +6 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +374 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.handlers.d.ts +27 -0
- package/dist/commands/init.handlers.d.ts.map +1 -0
- package/dist/commands/init.handlers.js +314 -0
- package/dist/commands/init.handlers.js.map +1 -0
- package/dist/commands/init.helpers.d.ts +42 -0
- package/dist/commands/init.helpers.d.ts.map +1 -0
- package/dist/commands/init.helpers.js +275 -0
- package/dist/commands/init.helpers.js.map +1 -0
- package/dist/commands/init.js +61 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.helpers.d.ts +32 -0
- package/dist/commands/install.helpers.d.ts.map +1 -0
- package/dist/commands/install.helpers.js +124 -0
- package/dist/commands/install.helpers.js.map +1 -0
- package/dist/commands/install.js +104 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list-project.d.ts +11 -0
- package/dist/commands/list-project.d.ts.map +1 -0
- package/dist/commands/list-project.js +260 -0
- package/dist/commands/list-project.js.map +1 -0
- package/dist/commands/list.d.ts +15 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.helpers.d.ts +50 -0
- package/dist/commands/list.helpers.d.ts.map +1 -0
- package/dist/commands/list.helpers.js +143 -0
- package/dist/commands/list.helpers.js.map +1 -0
- package/dist/commands/list.js +530 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/merge.d.ts +6 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.helpers.d.ts +74 -0
- package/dist/commands/merge.helpers.d.ts.map +1 -0
- package/dist/commands/merge.helpers.js +307 -0
- package/dist/commands/merge.helpers.js.map +1 -0
- package/dist/commands/merge.js +260 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/release.d.ts +6 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.helpers.d.ts +61 -0
- package/dist/commands/release.helpers.d.ts.map +1 -0
- package/dist/commands/release.helpers.js +277 -0
- package/dist/commands/release.helpers.js.map +1 -0
- package/dist/commands/release.js +127 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/remove.d.ts +6 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.helpers.d.ts +59 -0
- package/dist/commands/remove.helpers.d.ts.map +1 -0
- package/dist/commands/remove.helpers.js +190 -0
- package/dist/commands/remove.helpers.js.map +1 -0
- package/dist/commands/remove.js +137 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/repair.d.ts +6 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.helpers.d.ts +5 -0
- package/dist/commands/repair.helpers.d.ts.map +1 -0
- package/dist/commands/repair.helpers.js +499 -0
- package/dist/commands/repair.helpers.js.map +1 -0
- package/dist/commands/repair.js +28 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +116 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/system-integration.d.ts +6 -0
- package/dist/commands/system-integration.d.ts.map +1 -0
- package/dist/commands/system-integration.helpers.d.ts +70 -0
- package/dist/commands/system-integration.helpers.d.ts.map +1 -0
- package/dist/commands/system-integration.helpers.js +313 -0
- package/dist/commands/system-integration.helpers.js.map +1 -0
- package/dist/commands/system-integration.js +132 -0
- package/dist/commands/system-integration.js.map +1 -0
- package/dist/commands/tmux.d.ts +11 -0
- package/dist/commands/tmux.d.ts.map +1 -0
- package/dist/commands/tmux.js +500 -0
- package/dist/commands/tmux.js.map +1 -0
- package/dist/commands/todo.d.ts +6 -0
- package/dist/commands/todo.d.ts.map +1 -0
- package/dist/commands/todo.helpers.d.ts +50 -0
- package/dist/commands/todo.helpers.d.ts.map +1 -0
- package/dist/commands/todo.helpers.js +297 -0
- package/dist/commands/todo.helpers.js.map +1 -0
- package/dist/commands/todo.js +579 -0
- package/dist/commands/todo.js.map +1 -0
- package/dist/commands/update.d.ts +18 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.helpers.d.ts +89 -0
- package/dist/commands/update.helpers.d.ts.map +1 -0
- package/dist/commands/update.helpers.js +335 -0
- package/dist/commands/update.helpers.js.map +1 -0
- package/dist/commands/update.js +187 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/config-loader.d.ts +47 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +188 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/config-merger.d.ts +29 -0
- package/dist/core/config-merger.d.ts.map +1 -0
- package/dist/core/config-merger.js +100 -0
- package/dist/core/config-merger.js.map +1 -0
- package/dist/core/config-migration.d.ts +64 -0
- package/dist/core/config-migration.d.ts.map +1 -0
- package/dist/core/config-migration.js +340 -0
- package/dist/core/config-migration.js.map +1 -0
- package/dist/core/config-new.d.ts +19 -0
- package/dist/core/config-new.d.ts.map +1 -0
- package/dist/core/config-new.js +58 -0
- package/dist/core/config-new.js.map +1 -0
- package/dist/core/config-schema.d.ts +221 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +168 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/config.d.ts +55 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +143 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/dev-server.d.ts +29 -0
- package/dist/core/dev-server.d.ts.map +1 -0
- package/dist/core/dev-server.js +54 -0
- package/dist/core/dev-server.js.map +1 -0
- package/dist/core/discovery.d.ts +51 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +247 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/env.d.ts +13 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +75 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/git.d.ts +31 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +56 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/paths.d.ts +86 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +256 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/tmux-config.d.ts +174 -0
- package/dist/core/tmux-config.d.ts.map +1 -0
- package/dist/core/tmux-config.js +545 -0
- package/dist/core/tmux-config.js.map +1 -0
- package/dist/core/tmux-config.legacy.d.ts +243 -0
- package/dist/core/tmux-config.legacy.d.ts.map +1 -0
- package/dist/core/tmux-config.legacy.js +896 -0
- package/dist/core/tmux-config.legacy.js.map +1 -0
- package/dist/core/tmux.d.ts +214 -0
- package/dist/core/tmux.d.ts.map +1 -0
- package/dist/core/tmux.js +712 -0
- package/dist/core/tmux.js.map +1 -0
- package/dist/core/toolchain-resolver.d.ts +51 -0
- package/dist/core/toolchain-resolver.d.ts.map +1 -0
- package/dist/core/toolchain-resolver.js +364 -0
- package/dist/core/toolchain-resolver.js.map +1 -0
- package/dist/core/worktree-status.d.ts +20 -0
- package/dist/core/worktree-status.d.ts.map +1 -0
- package/dist/core/worktree-status.js +67 -0
- package/dist/core/worktree-status.js.map +1 -0
- package/dist/i18n/index.d.ts +36 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +157 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +866 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +985 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/zh-CN.d.ts +865 -0
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
- package/dist/i18n/locales/zh-CN.js +985 -0
- package/dist/i18n/locales/zh-CN.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/builtin/gradle.d.ts +9 -0
- package/dist/plugins/builtin/gradle.d.ts.map +1 -0
- package/dist/plugins/builtin/gradle.js +164 -0
- package/dist/plugins/builtin/gradle.js.map +1 -0
- package/dist/plugins/builtin/maven.d.ts +9 -0
- package/dist/plugins/builtin/maven.d.ts.map +1 -0
- package/dist/plugins/builtin/maven.js +127 -0
- package/dist/plugins/builtin/maven.js.map +1 -0
- package/dist/plugins/builtin/npm.d.ts +9 -0
- package/dist/plugins/builtin/npm.d.ts.map +1 -0
- package/dist/plugins/builtin/npm.js +238 -0
- package/dist/plugins/builtin/npm.js.map +1 -0
- package/dist/plugins/builtin/pip.d.ts +9 -0
- package/dist/plugins/builtin/pip.d.ts.map +1 -0
- package/dist/plugins/builtin/pip.js +210 -0
- package/dist/plugins/builtin/pip.js.map +1 -0
- package/dist/plugins/builtin/xcode.d.ts +12 -0
- package/dist/plugins/builtin/xcode.d.ts.map +1 -0
- package/dist/plugins/builtin/xcode.js +438 -0
- package/dist/plugins/builtin/xcode.js.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +24 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/manager.d.ts +93 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +270 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/utils.d.ts +42 -0
- package/dist/plugins/utils.d.ts.map +1 -0
- package/dist/plugins/utils.js +175 -0
- package/dist/plugins/utils.js.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plugin.d.ts +200 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +19 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +80 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/en/manual/04-command-reference/README.md +58 -0
- package/docs/en/manual/README.md +108 -0
- package/docs/zh-CN/manual/04-command-reference/README.md +58 -0
- package/docs/zh-CN/manual/README.md +108 -0
- package/package.json +65 -0
- package/shell/colyn.sh +55 -0
- package/shell/completion.bash +270 -0
- 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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"}
|