clawt 3.9.13 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/README.zh-CN.md +3 -0
- package/dist/index.js +1935 -592
- package/dist/postinstall.js +1626 -283
- package/docs/config-file.md +2 -0
- package/docs/config.md +2 -1
- package/docs/init.md +3 -2
- package/docs/project-config.md +10 -1
- package/docs/spec.md +69 -2
- package/package.json +1 -1
- package/src/commands/alias.ts +5 -4
- package/src/commands/completion.ts +2 -1
- package/src/commands/config.ts +25 -7
- package/src/commands/cover-validate.ts +3 -2
- package/src/commands/create.ts +8 -7
- package/src/commands/home.ts +2 -1
- package/src/commands/init.ts +13 -6
- package/src/commands/list.ts +6 -4
- package/src/commands/merge.ts +8 -7
- package/src/commands/projects.ts +5 -3
- package/src/commands/remove.ts +7 -6
- package/src/commands/reset.ts +3 -2
- package/src/commands/resume.ts +10 -7
- package/src/commands/run.ts +8 -7
- package/src/commands/status.ts +16 -11
- package/src/commands/sync.ts +4 -3
- package/src/commands/tasks.ts +8 -6
- package/src/commands/validate.ts +7 -6
- package/src/constants/ai-prompts.ts +11 -11
- package/src/constants/config.ts +30 -0
- package/src/constants/index.ts +3 -2
- package/src/constants/messages/alias.ts +44 -14
- package/src/constants/messages/cli-descriptions.ts +91 -0
- package/src/constants/messages/common.ts +221 -36
- package/src/constants/messages/completion.ts +43 -14
- package/src/constants/messages/config.ts +61 -18
- package/src/constants/messages/cover-validate.ts +43 -14
- package/src/constants/messages/create.ts +16 -5
- package/src/constants/messages/home.ts +19 -6
- package/src/constants/messages/index.ts +2 -0
- package/src/constants/messages/init.ts +45 -14
- package/src/constants/messages/interactive-panel.ts +183 -29
- package/src/constants/messages/merge.ts +140 -38
- package/src/constants/messages/post-create.ts +59 -19
- package/src/constants/messages/projects.ts +51 -14
- package/src/constants/messages/remove.ts +50 -15
- package/src/constants/messages/reset.ts +14 -4
- package/src/constants/messages/resume.ts +116 -19
- package/src/constants/messages/run.ts +165 -35
- package/src/constants/messages/status.ts +84 -23
- package/src/constants/messages/sync.ts +54 -17
- package/src/constants/messages/tasks.ts +21 -7
- package/src/constants/messages/update.ts +35 -11
- package/src/constants/messages/validate.ts +218 -57
- package/src/constants/progress.ts +17 -6
- package/src/constants/project-config.ts +17 -0
- package/src/constants/prompt.ts +18 -2
- package/src/constants/tasks-template.ts +56 -2
- package/src/hooks/post-create.ts +5 -2
- package/src/index.ts +6 -5
- package/src/types/config.ts +2 -0
- package/src/utils/alias.ts +2 -1
- package/src/utils/claude.ts +10 -9
- package/src/utils/config-strategy.ts +3 -3
- package/src/utils/dry-run.ts +2 -2
- package/src/utils/formatter.ts +18 -11
- package/src/utils/i18n.ts +63 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/interactive-panel-render.ts +6 -3
- package/src/utils/progress-render.ts +11 -9
- package/src/utils/prompt.ts +2 -1
- package/src/utils/task-executor.ts +10 -7
- package/src/utils/task-file.ts +2 -1
- package/src/utils/terminal.ts +9 -9
- package/src/utils/ui-prompts.ts +4 -3
- package/src/utils/update-checker.ts +1 -1
- package/src/utils/validate-branch.ts +16 -9
- package/src/utils/validate-core.ts +2 -1
- package/src/utils/validate-runner.ts +2 -2
- package/src/utils/worktree-matcher.ts +9 -7
- package/tests/unit/commands/alias.test.ts +4 -0
- package/tests/unit/commands/completion.test.ts +14 -0
- package/tests/unit/commands/config.test.ts +61 -28
- package/tests/unit/commands/cover-validate.test.ts +13 -2
- package/tests/unit/commands/init.test.ts +6 -2
- package/tests/unit/commands/merge.test.ts +14 -0
- package/tests/unit/commands/run.test.ts +17 -0
- package/tests/unit/commands/tasks.test.ts +39 -9
- package/tests/unit/constants/config.test.ts +16 -1
- package/tests/unit/constants/messages-post-create.test.ts +93 -1
- package/tests/unit/constants/messages.test.ts +85 -1
- package/tests/unit/hooks/post-create.test.ts +32 -0
- package/tests/unit/utils/alias.test.ts +14 -0
- package/tests/unit/utils/claude.test.ts +24 -4
- package/tests/unit/utils/config-strategy.test.ts +21 -0
- package/tests/unit/utils/conflict-resolver.test.ts +24 -4
- package/tests/unit/utils/formatter.test.ts +21 -0
- package/tests/unit/utils/i18n.test.ts +91 -0
- package/tests/unit/utils/progress.test.ts +39 -18
- package/tests/unit/utils/prompt.test.ts +25 -2
- package/tests/unit/utils/task-file.test.ts +73 -10
- package/tests/unit/utils/terminal-cmux.test.ts +19 -4
- package/tests/unit/utils/update-checker.test.ts +2 -0
- package/tests/unit/utils/validate-branch.test.ts +26 -1
- package/tests/unit/utils/validation.test.ts +2 -2
- package/tests/unit/utils/worktree-matcher.test.ts +2 -0
package/dist/postinstall.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// scripts/postinstall.ts
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync3, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
3
3
|
|
|
4
4
|
// src/constants/paths.ts
|
|
5
5
|
import { homedir } from "os";
|
|
@@ -13,578 +13,1691 @@ var CLAUDE_PROJECTS_DIR = join(homedir(), ".claude", "projects");
|
|
|
13
13
|
var UPDATE_CHECK_PATH = join(CLAWT_HOME, "update-check.json");
|
|
14
14
|
var PROJECTS_CONFIG_DIR = join(CLAWT_HOME, "projects");
|
|
15
15
|
|
|
16
|
+
// src/utils/config.ts
|
|
17
|
+
import { existsSync as existsSync3, readFileSync, writeFileSync } from "fs";
|
|
18
|
+
|
|
19
|
+
// src/utils/fs.ts
|
|
20
|
+
import { existsSync, mkdirSync, readdirSync, rmdirSync, statSync } from "fs";
|
|
21
|
+
import { join as join2 } from "path";
|
|
22
|
+
|
|
23
|
+
// src/logger/index.ts
|
|
24
|
+
import winston from "winston";
|
|
25
|
+
import DailyRotateFile from "winston-daily-rotate-file";
|
|
26
|
+
import chalk from "chalk";
|
|
27
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2 } from "fs";
|
|
28
|
+
if (!existsSync2(LOGS_DIR)) {
|
|
29
|
+
mkdirSync2(LOGS_DIR, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
var logFormat = winston.format.printf(({ level, message, timestamp }) => {
|
|
32
|
+
const upperLevel = level.toUpperCase().padEnd(5);
|
|
33
|
+
return `[${timestamp}] [${upperLevel}] ${message}`;
|
|
34
|
+
});
|
|
35
|
+
var dailyRotateTransport = new DailyRotateFile({
|
|
36
|
+
dirname: LOGS_DIR,
|
|
37
|
+
filename: "clawt-%DATE%.log",
|
|
38
|
+
datePattern: "YYYY-MM-DD",
|
|
39
|
+
maxSize: "10m",
|
|
40
|
+
maxFiles: "30d"
|
|
41
|
+
});
|
|
42
|
+
var logger = winston.createLogger({
|
|
43
|
+
level: "debug",
|
|
44
|
+
format: winston.format.combine(
|
|
45
|
+
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
|
46
|
+
logFormat
|
|
47
|
+
),
|
|
48
|
+
transports: [dailyRotateTransport]
|
|
49
|
+
});
|
|
50
|
+
var LEVEL_COLORS = {
|
|
51
|
+
error: chalk.red,
|
|
52
|
+
warn: chalk.yellow,
|
|
53
|
+
info: chalk.cyan,
|
|
54
|
+
debug: chalk.gray
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// src/utils/config.ts
|
|
58
|
+
function loadConfig() {
|
|
59
|
+
if (!existsSync3(CONFIG_PATH)) {
|
|
60
|
+
return { ...DEFAULT_CONFIG };
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const raw = readFileSync(CONFIG_PATH, "utf-8");
|
|
64
|
+
return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
|
|
65
|
+
} catch {
|
|
66
|
+
logger.warn(MESSAGES.CONFIG_CORRUPTED);
|
|
67
|
+
writeDefaultConfig();
|
|
68
|
+
return { ...DEFAULT_CONFIG };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function writeConfig(config) {
|
|
72
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
|
|
73
|
+
}
|
|
74
|
+
function writeDefaultConfig() {
|
|
75
|
+
writeConfig(DEFAULT_CONFIG);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/utils/i18n.ts
|
|
79
|
+
var currentLanguage = null;
|
|
80
|
+
function getCurrentLanguage() {
|
|
81
|
+
if (currentLanguage !== null) {
|
|
82
|
+
return currentLanguage;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const config = loadConfig();
|
|
86
|
+
currentLanguage = config.language || "en";
|
|
87
|
+
} catch {
|
|
88
|
+
currentLanguage = "en";
|
|
89
|
+
}
|
|
90
|
+
return currentLanguage;
|
|
91
|
+
}
|
|
92
|
+
function createMessages(i18nMap) {
|
|
93
|
+
const lang = getCurrentLanguage();
|
|
94
|
+
const result = {};
|
|
95
|
+
for (const key of Object.keys(i18nMap)) {
|
|
96
|
+
result[key] = i18nMap[key][lang];
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
|
|
16
101
|
// src/constants/messages/common.ts
|
|
17
|
-
var
|
|
102
|
+
var COMMON_MESSAGES_I18N = {
|
|
18
103
|
/** 不在主 worktree 根目录 */
|
|
19
|
-
NOT_MAIN_WORKTREE:
|
|
104
|
+
NOT_MAIN_WORKTREE: {
|
|
105
|
+
en: "Please run clawt in the root directory of the main worktree",
|
|
106
|
+
"zh-CN": "\u8BF7\u5728\u4E3B worktree \u7684\u6839\u76EE\u5F55\u4E0B\u6267\u884C clawt"
|
|
107
|
+
},
|
|
20
108
|
/** 不在 git 仓库中 */
|
|
21
|
-
NOT_GIT_REPO:
|
|
109
|
+
NOT_GIT_REPO: {
|
|
110
|
+
en: "Current directory is not a git repository. Please run git init and make an initial commit, then run clawt init",
|
|
111
|
+
"zh-CN": "\u5F53\u524D\u76EE\u5F55\u4E0D\u662F git \u4ED3\u5E93\uFF0C\u8BF7\u5148\u6267\u884C git init \u5E76\u63D0\u4EA4\u540E\uFF0C\u518D\u6267\u884C clawt init \u521D\u59CB\u5316\u9879\u76EE"
|
|
112
|
+
},
|
|
22
113
|
/** Git 未安装 */
|
|
23
|
-
GIT_NOT_INSTALLED:
|
|
114
|
+
GIT_NOT_INSTALLED: {
|
|
115
|
+
en: "Git is not installed or not in PATH. Please install Git first",
|
|
116
|
+
"zh-CN": "Git \u672A\u5B89\u88C5\u6216\u4E0D\u5728 PATH \u4E2D\uFF0C\u8BF7\u5148\u5B89\u88C5 Git"
|
|
117
|
+
},
|
|
24
118
|
/** Claude Code CLI 未安装 */
|
|
25
|
-
CLAUDE_NOT_INSTALLED:
|
|
119
|
+
CLAUDE_NOT_INSTALLED: {
|
|
120
|
+
en: "Claude Code CLI is not installed. Please install it: npm install -g @anthropic-ai/claude-code",
|
|
121
|
+
"zh-CN": "Claude Code CLI \u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u5B89\u88C5\uFF1Anpm install -g @anthropic-ai/claude-code"
|
|
122
|
+
},
|
|
26
123
|
/** HEAD 不存在(仓库无任何 commit) */
|
|
27
|
-
HEAD_NOT_FOUND:
|
|
124
|
+
HEAD_NOT_FOUND: {
|
|
125
|
+
en: "No commits exist in this repository. Please create an initial commit first",
|
|
126
|
+
"zh-CN": "\u5F53\u524D\u4ED3\u5E93\u5C1A\u672A\u521B\u5EFA\u4EFB\u4F55\u63D0\u4EA4\uFF0C\u8BF7\u5148\u6267\u884C git commit \u521B\u5EFA\u9996\u6B21\u63D0\u4EA4\u540E\u518D\u4F7F\u7528 clawt"
|
|
127
|
+
},
|
|
28
128
|
/** 分支已存在 */
|
|
29
|
-
BRANCH_EXISTS:
|
|
129
|
+
BRANCH_EXISTS: {
|
|
130
|
+
en: (name) => `Branch ${name} already exists, cannot create`,
|
|
131
|
+
"zh-CN": (name) => `\u5206\u652F ${name} \u5DF2\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA`
|
|
132
|
+
},
|
|
30
133
|
/** 分支名清理后为空 */
|
|
31
|
-
BRANCH_NAME_EMPTY:
|
|
134
|
+
BRANCH_NAME_EMPTY: {
|
|
135
|
+
en: (original) => `Branch name "${original}" contains no valid characters, cannot create branch`,
|
|
136
|
+
"zh-CN": (original) => `\u5206\u652F\u540D "${original}" \u4E2D\u4E0D\u5305\u542B\u5408\u6CD5\u5B57\u7B26\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5206\u652F`
|
|
137
|
+
},
|
|
32
138
|
/** 分支名被转换 */
|
|
33
|
-
BRANCH_SANITIZED:
|
|
139
|
+
BRANCH_SANITIZED: {
|
|
140
|
+
en: (original, sanitized) => `Branch name sanitized: ${original} \u2192 ${sanitized}`,
|
|
141
|
+
"zh-CN": (original, sanitized) => `\u5206\u652F\u540D\u5DF2\u8F6C\u6362: ${original} \u2192 ${sanitized}`
|
|
142
|
+
},
|
|
34
143
|
/** worktree 创建成功 */
|
|
35
|
-
WORKTREE_CREATED:
|
|
144
|
+
WORKTREE_CREATED: {
|
|
145
|
+
en: (count) => `\u2713 Created ${count} worktree(s)`,
|
|
146
|
+
"zh-CN": (count) => `\u2713 \u5DF2\u521B\u5EFA ${count} \u4E2A worktree`
|
|
147
|
+
},
|
|
36
148
|
/** worktree 移除成功 */
|
|
37
|
-
WORKTREE_REMOVED:
|
|
149
|
+
WORKTREE_REMOVED: {
|
|
150
|
+
en: (path) => `\u2713 Removed worktree: ${path}`,
|
|
151
|
+
"zh-CN": (path) => `\u2713 \u5DF2\u79FB\u9664 worktree: ${path}`
|
|
152
|
+
},
|
|
38
153
|
/** 没有 worktree */
|
|
39
|
-
NO_WORKTREES:
|
|
154
|
+
NO_WORKTREES: {
|
|
155
|
+
en: "(No worktrees)",
|
|
156
|
+
"zh-CN": "(\u65E0 worktree)"
|
|
157
|
+
},
|
|
40
158
|
/** 目标 worktree 不存在 */
|
|
41
|
-
WORKTREE_NOT_FOUND:
|
|
159
|
+
WORKTREE_NOT_FOUND: {
|
|
160
|
+
en: (name) => `Worktree ${name} does not exist`,
|
|
161
|
+
"zh-CN": (name) => `worktree ${name} \u4E0D\u5B58\u5728`
|
|
162
|
+
},
|
|
42
163
|
/** 主 worktree 有未提交更改 */
|
|
43
|
-
MAIN_WORKTREE_DIRTY:
|
|
164
|
+
MAIN_WORKTREE_DIRTY: {
|
|
165
|
+
en: "Main worktree has uncommitted changes. Please resolve first",
|
|
166
|
+
"zh-CN": "\u4E3B worktree \u6709\u672A\u63D0\u4EA4\u7684\u66F4\u6539\uFF0C\u8BF7\u5148\u5904\u7406"
|
|
167
|
+
},
|
|
44
168
|
/** 目标 worktree 无更改 */
|
|
45
|
-
TARGET_WORKTREE_CLEAN:
|
|
169
|
+
TARGET_WORKTREE_CLEAN: {
|
|
170
|
+
en: "No changes on this worktree branch, nothing to validate",
|
|
171
|
+
"zh-CN": "\u8BE5 worktree \u7684\u5206\u652F\u4E0A\u6CA1\u6709\u4EFB\u4F55\u66F4\u6539\uFF0C\u65E0\u9700\u9A8C\u8BC1"
|
|
172
|
+
},
|
|
46
173
|
/** 用户取消破坏性操作 */
|
|
47
|
-
DESTRUCTIVE_OP_CANCELLED:
|
|
174
|
+
DESTRUCTIVE_OP_CANCELLED: {
|
|
175
|
+
en: "Operation cancelled",
|
|
176
|
+
"zh-CN": "\u5DF2\u53D6\u6D88\u64CD\u4F5C"
|
|
177
|
+
},
|
|
48
178
|
/** 请提供提交信息 */
|
|
49
|
-
COMMIT_MESSAGE_REQUIRED:
|
|
179
|
+
COMMIT_MESSAGE_REQUIRED: {
|
|
180
|
+
en: "Please provide a commit message (-m option)",
|
|
181
|
+
"zh-CN": "\u8BF7\u63D0\u4F9B\u63D0\u4EA4\u4FE1\u606F\uFF08-m \u53C2\u6570\uFF09"
|
|
182
|
+
},
|
|
50
183
|
/** 配置文件损坏,已重新生成默认配置 */
|
|
51
|
-
CONFIG_CORRUPTED:
|
|
184
|
+
CONFIG_CORRUPTED: {
|
|
185
|
+
en: "Config file corrupted or unparseable, regenerated default config",
|
|
186
|
+
"zh-CN": "\u914D\u7F6E\u6587\u4EF6\u635F\u574F\u6216\u65E0\u6CD5\u89E3\u6790\uFF0C\u5DF2\u91CD\u65B0\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E"
|
|
187
|
+
},
|
|
52
188
|
/** worktree 状态获取失败 */
|
|
53
|
-
WORKTREE_STATUS_UNAVAILABLE:
|
|
189
|
+
WORKTREE_STATUS_UNAVAILABLE: {
|
|
190
|
+
en: "(Status unavailable)",
|
|
191
|
+
"zh-CN": "(\u72B6\u6001\u4E0D\u53EF\u7528)"
|
|
192
|
+
},
|
|
54
193
|
/** 分隔线 */
|
|
55
|
-
SEPARATOR:
|
|
194
|
+
SEPARATOR: {
|
|
195
|
+
en: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
|
|
196
|
+
"zh-CN": "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
|
|
197
|
+
},
|
|
56
198
|
/** 粗分隔线 */
|
|
57
|
-
DOUBLE_SEPARATOR:
|
|
199
|
+
DOUBLE_SEPARATOR: {
|
|
200
|
+
en: "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550",
|
|
201
|
+
"zh-CN": "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"
|
|
202
|
+
},
|
|
58
203
|
/** 守卫检测:配置的主工作分支已不存在 */
|
|
59
|
-
GUARD_BRANCH_NOT_EXISTS:
|
|
204
|
+
GUARD_BRANCH_NOT_EXISTS: {
|
|
205
|
+
en: (branchName) => `Configured main work branch ${branchName} no longer exists. Please run clawt init to reset`,
|
|
206
|
+
"zh-CN": (branchName) => `\u914D\u7F6E\u7684\u4E3B\u5DE5\u4F5C\u5206\u652F ${branchName} \u5DF2\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6267\u884C clawt init \u91CD\u65B0\u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F`
|
|
207
|
+
},
|
|
60
208
|
/** 守卫检测:当前分支与配置的主工作分支不一致 */
|
|
61
|
-
GUARD_BRANCH_MISMATCH:
|
|
209
|
+
GUARD_BRANCH_MISMATCH: {
|
|
210
|
+
en: (configuredBranch, currentBranch) => `Current branch ${currentBranch} does not match configured main work branch ${configuredBranch}. Run clawt init to update`,
|
|
211
|
+
"zh-CN": (configuredBranch, currentBranch) => `\u5F53\u524D\u5206\u652F ${currentBranch} \u4E0E\u914D\u7F6E\u7684\u4E3B\u5DE5\u4F5C\u5206\u652F ${configuredBranch} \u4E0D\u4E00\u81F4\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u6267\u884C clawt init`
|
|
212
|
+
},
|
|
62
213
|
/** Git index 被锁定(index.lock 存在) */
|
|
63
|
-
GIT_INDEX_LOCKED:
|
|
214
|
+
GIT_INDEX_LOCKED: {
|
|
215
|
+
en: (lockFilePath) => `Git index is locked, cannot proceed
|
|
216
|
+
Cause: Lock file exists (possibly from an interrupted git operation)
|
|
217
|
+
Lock file path: ${lockFilePath}
|
|
218
|
+
Fix: Confirm no other git operations are running, then run:
|
|
219
|
+
rm ${lockFilePath}`,
|
|
220
|
+
"zh-CN": (lockFilePath) => `Git index \u88AB\u9501\u5B9A\uFF0C\u65E0\u6CD5\u6267\u884C\u64CD\u4F5C
|
|
64
221
|
\u539F\u56E0\uFF1A\u9501\u6587\u4EF6\u5DF2\u5B58\u5728\uFF08\u53EF\u80FD\u662F\u4E0A\u6B21 git \u64CD\u4F5C\u5F02\u5E38\u4E2D\u65AD\u6B8B\u7559\uFF09
|
|
65
222
|
\u9501\u6587\u4EF6\u8DEF\u5F84\uFF1A${lockFilePath}
|
|
66
223
|
\u4FEE\u590D\u65B9\u6CD5\uFF1A\u786E\u8BA4\u6CA1\u6709\u5176\u4ED6 git \u64CD\u4F5C\u5728\u8FDB\u884C\u540E\uFF0C\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u5220\u9664\u9501\u6587\u4EF6\uFF1A
|
|
67
|
-
rm ${lockFilePath}
|
|
224
|
+
rm ${lockFilePath}`
|
|
225
|
+
},
|
|
68
226
|
/** Git index.lock 重试中(简短提示) */
|
|
69
|
-
GIT_INDEX_LOCK_RETRYING:
|
|
227
|
+
GIT_INDEX_LOCK_RETRYING: {
|
|
228
|
+
en: "Git index is locked, retrying...",
|
|
229
|
+
"zh-CN": "Git index \u88AB\u9501\u5B9A\uFF0C\u6B63\u5728\u91CD\u8BD5..."
|
|
230
|
+
},
|
|
231
|
+
// --- 从 formatter.ts 迁移 ---
|
|
232
|
+
/** 是否继续? */
|
|
233
|
+
CONFIRM_CONTINUE: {
|
|
234
|
+
en: "Continue?",
|
|
235
|
+
"zh-CN": "\u662F\u5426\u7EE7\u7EED\uFF1F"
|
|
236
|
+
},
|
|
237
|
+
/** 无变更 */
|
|
238
|
+
NO_CHANGES: {
|
|
239
|
+
en: "No changes",
|
|
240
|
+
"zh-CN": "\u65E0\u53D8\u66F4"
|
|
241
|
+
},
|
|
242
|
+
/** 未提交修改 */
|
|
243
|
+
UNCOMMITTED_CHANGES: {
|
|
244
|
+
en: "(uncommitted changes)",
|
|
245
|
+
"zh-CN": "(\u672A\u63D0\u4EA4\u4FEE\u6539)"
|
|
246
|
+
},
|
|
247
|
+
/** 提交数 */
|
|
248
|
+
COMMIT_COUNT: {
|
|
249
|
+
en: (n) => `${n} commit(s)`,
|
|
250
|
+
"zh-CN": (n) => `${n} \u4E2A\u63D0\u4EA4`
|
|
251
|
+
},
|
|
252
|
+
/** 刚刚 */
|
|
253
|
+
JUST_NOW: {
|
|
254
|
+
en: "just now",
|
|
255
|
+
"zh-CN": "\u521A\u521A"
|
|
256
|
+
},
|
|
257
|
+
/** N 分钟前 */
|
|
258
|
+
MINUTES_AGO: {
|
|
259
|
+
en: (n) => `${n} min ago`,
|
|
260
|
+
"zh-CN": (n) => `${n} \u5206\u949F\u524D`
|
|
261
|
+
},
|
|
262
|
+
/** N 小时前 */
|
|
263
|
+
HOURS_AGO: {
|
|
264
|
+
en: (n) => `${n} hr ago`,
|
|
265
|
+
"zh-CN": (n) => `${n} \u5C0F\u65F6\u524D`
|
|
266
|
+
},
|
|
267
|
+
/** N 天前 */
|
|
268
|
+
DAYS_AGO: {
|
|
269
|
+
en: (n) => `${n} day(s) ago`,
|
|
270
|
+
"zh-CN": (n) => `${n} \u5929\u524D`
|
|
271
|
+
},
|
|
272
|
+
/** N 个月前 */
|
|
273
|
+
MONTHS_AGO: {
|
|
274
|
+
en: (n) => `${n} month(s) ago`,
|
|
275
|
+
"zh-CN": (n) => `${n} \u4E2A\u6708\u524D`
|
|
276
|
+
},
|
|
277
|
+
/** N 年前 */
|
|
278
|
+
YEARS_AGO: {
|
|
279
|
+
en: (n) => `${n} year(s) ago`,
|
|
280
|
+
"zh-CN": (n) => `${n} \u5E74\u524D`
|
|
281
|
+
},
|
|
282
|
+
/** 未知错误 */
|
|
283
|
+
UNKNOWN_ERROR: {
|
|
284
|
+
en: "Unknown error",
|
|
285
|
+
"zh-CN": "\u672A\u77E5\u9519\u8BEF"
|
|
286
|
+
},
|
|
287
|
+
// --- 从 ui-prompts.ts 迁移 ---
|
|
288
|
+
/** 非交互模式下无法进行分支选择 */
|
|
289
|
+
NON_INTERACTIVE_BRANCH_SELECT: {
|
|
290
|
+
en: "Cannot select branch in non-interactive mode. Please use -b to specify branch",
|
|
291
|
+
"zh-CN": "\u975E\u4EA4\u4E92\u6A21\u5F0F\u4E0B\u65E0\u6CD5\u8FDB\u884C\u5206\u652F\u9009\u62E9\uFF0C\u8BF7\u4F7F\u7528 -b \u6307\u5B9A\u5206\u652F"
|
|
292
|
+
},
|
|
293
|
+
/** 非交互模式下无法进行分支多选 */
|
|
294
|
+
NON_INTERACTIVE_MULTI_SELECT: {
|
|
295
|
+
en: "Cannot multi-select branches in non-interactive mode",
|
|
296
|
+
"zh-CN": "\u975E\u4EA4\u4E92\u6A21\u5F0F\u4E0B\u65E0\u6CD5\u8FDB\u884C\u5206\u652F\u591A\u9009"
|
|
297
|
+
},
|
|
298
|
+
// --- 从 worktree-matcher.ts 迁移 ---
|
|
299
|
+
/** 今天 */
|
|
300
|
+
TODAY: {
|
|
301
|
+
en: "Today",
|
|
302
|
+
"zh-CN": "\u4ECA\u5929"
|
|
303
|
+
},
|
|
304
|
+
/** 昨天 */
|
|
305
|
+
YESTERDAY: {
|
|
306
|
+
en: "Yesterday",
|
|
307
|
+
"zh-CN": "\u6628\u5929"
|
|
308
|
+
},
|
|
309
|
+
// --- 从 config-strategy.ts 迁移 ---
|
|
310
|
+
/** (未设置) */
|
|
311
|
+
NOT_SET: {
|
|
312
|
+
en: "(not set)",
|
|
313
|
+
"zh-CN": "(\u672A\u8BBE\u7F6E)"
|
|
314
|
+
},
|
|
315
|
+
/** 非交互模式下无法使用交互式配置编辑器 */
|
|
316
|
+
NON_INTERACTIVE_CONFIG_EDITOR: {
|
|
317
|
+
en: "Cannot use interactive config editor in non-interactive mode. Please use: clawt config set <key> <value>",
|
|
318
|
+
"zh-CN": "\u975E\u4EA4\u4E92\u6A21\u5F0F\u4E0B\u65E0\u6CD5\u4F7F\u7528\u4EA4\u4E92\u5F0F\u914D\u7F6E\u7F16\u8F91\u5668\uFF0C\u8BF7\u4F7F\u7528 clawt config set <key> <value>"
|
|
319
|
+
},
|
|
320
|
+
/** 请输入有效的数字 */
|
|
321
|
+
INVALID_NUMBER_PROMPT: {
|
|
322
|
+
en: "Please enter a valid number",
|
|
323
|
+
"zh-CN": "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57"
|
|
324
|
+
},
|
|
325
|
+
// --- 从 commands/config.ts 迁移 ---
|
|
326
|
+
/** 当前配置将被覆盖为默认值 */
|
|
327
|
+
CONFIG_RESET_WARNING: {
|
|
328
|
+
en: "Current configuration will be reset to defaults",
|
|
329
|
+
"zh-CN": "\u5F53\u524D\u914D\u7F6E\u5C06\u88AB\u8986\u76D6\u4E3A\u9ED8\u8BA4\u503C"
|
|
330
|
+
}
|
|
70
331
|
};
|
|
332
|
+
var COMMON_MESSAGES = createMessages(COMMON_MESSAGES_I18N);
|
|
71
333
|
|
|
72
334
|
// src/constants/messages/run.ts
|
|
73
|
-
var
|
|
335
|
+
var RUN_MESSAGES_I18N = {
|
|
74
336
|
/** 分支已存在时提示使用 resume */
|
|
75
|
-
BRANCH_EXISTS_USE_RESUME:
|
|
337
|
+
BRANCH_EXISTS_USE_RESUME: {
|
|
338
|
+
en: (name) => `Branch ${name} already exists, please use clawt resume -b ${name} to resume session`,
|
|
339
|
+
"zh-CN": (name) => `\u5206\u652F ${name} \u5DF2\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 clawt resume -b ${name} \u6062\u590D\u4F1A\u8BDD`
|
|
340
|
+
},
|
|
76
341
|
/** 检测到用户中断 */
|
|
77
|
-
INTERRUPTED:
|
|
342
|
+
INTERRUPTED: {
|
|
343
|
+
en: "Exit signal detected, Claude Code tasks stopped",
|
|
344
|
+
"zh-CN": "\u68C0\u6D4B\u5230\u9000\u51FA\u6307\u4EE4\uFF0C\u5DF2\u505C\u6B62 Claude Code \u4EFB\u52A1"
|
|
345
|
+
},
|
|
78
346
|
/** 中断后自动清理完成 */
|
|
79
|
-
INTERRUPT_AUTO_CLEANED:
|
|
347
|
+
INTERRUPT_AUTO_CLEANED: {
|
|
348
|
+
en: (count) => `\u2713 Auto-cleaned ${count} worktree(s) and corresponding branches`,
|
|
349
|
+
"zh-CN": (count) => `\u2713 \u5DF2\u81EA\u52A8\u6E05\u7406 ${count} \u4E2A worktree \u548C\u5BF9\u5E94\u5206\u652F`
|
|
350
|
+
},
|
|
80
351
|
/** 中断后手动确认清理 */
|
|
81
|
-
INTERRUPT_CONFIRM_CLEANUP:
|
|
352
|
+
INTERRUPT_CONFIRM_CLEANUP: {
|
|
353
|
+
en: "Remove the newly created worktrees and corresponding branches?",
|
|
354
|
+
"zh-CN": "\u662F\u5426\u79FB\u9664\u521A\u521A\u521B\u5EFA\u7684 worktree \u548C\u5BF9\u5E94\u5206\u652F\uFF1F"
|
|
355
|
+
},
|
|
82
356
|
/** 中断后清理完成 */
|
|
83
|
-
INTERRUPT_CLEANED:
|
|
357
|
+
INTERRUPT_CLEANED: {
|
|
358
|
+
en: (count) => `\u2713 Cleaned ${count} worktree(s) and corresponding branches`,
|
|
359
|
+
"zh-CN": (count) => `\u2713 \u5DF2\u6E05\u7406 ${count} \u4E2A worktree \u548C\u5BF9\u5E94\u5206\u652F`
|
|
360
|
+
},
|
|
84
361
|
/** 中断后保留 worktree */
|
|
85
|
-
INTERRUPT_KEPT:
|
|
362
|
+
INTERRUPT_KEPT: {
|
|
363
|
+
en: "Worktrees kept, use clawt remove to clean up later",
|
|
364
|
+
"zh-CN": "\u5DF2\u4FDD\u7559 worktree\uFF0C\u53EF\u7A0D\u540E\u4F7F\u7528 clawt remove \u624B\u52A8\u6E05\u7406"
|
|
365
|
+
},
|
|
86
366
|
/** 非 TTY 环境降级输出:任务启动 */
|
|
87
|
-
PROGRESS_TASK_STARTED:
|
|
367
|
+
PROGRESS_TASK_STARTED: {
|
|
368
|
+
en: (index, total, branch, path) => `[${index}/${total}] ${branch} started ${path}`,
|
|
369
|
+
"zh-CN": (index, total, branch, path) => `[${index}/${total}] ${branch} \u542F\u52A8 ${path}`
|
|
370
|
+
},
|
|
88
371
|
/** 非 TTY 环境降级输出:任务完成 */
|
|
89
|
-
PROGRESS_TASK_DONE:
|
|
372
|
+
PROGRESS_TASK_DONE: {
|
|
373
|
+
en: (index, total, branch, duration, cost, detail) => `[${index}/${total}] ${branch} \u2713 done ${duration} ${cost} ${detail}`,
|
|
374
|
+
"zh-CN": (index, total, branch, duration, cost, detail) => `[${index}/${total}] ${branch} \u2713 \u5B8C\u6210 ${duration} ${cost} ${detail}`
|
|
375
|
+
},
|
|
90
376
|
/** 非 TTY 环境降级输出:任务失败 */
|
|
91
|
-
PROGRESS_TASK_FAILED:
|
|
377
|
+
PROGRESS_TASK_FAILED: {
|
|
378
|
+
en: (index, total, branch, duration, detail) => `[${index}/${total}] ${branch} \u2717 failed ${duration} ${detail}`,
|
|
379
|
+
"zh-CN": (index, total, branch, duration, detail) => `[${index}/${total}] ${branch} \u2717 \u5931\u8D25 ${duration} ${detail}`
|
|
380
|
+
},
|
|
92
381
|
/** 并发限制提示 */
|
|
93
|
-
CONCURRENCY_INFO:
|
|
382
|
+
CONCURRENCY_INFO: {
|
|
383
|
+
en: (concurrency, total) => `Concurrency: ${concurrency}, total tasks: ${total}`,
|
|
384
|
+
"zh-CN": (concurrency, total) => `\u5E76\u53D1\u9650\u5236: ${concurrency}\uFF0C\u5171 ${total} \u4E2A\u4EFB\u52A1`
|
|
385
|
+
},
|
|
94
386
|
/** 并发数无效提示 */
|
|
95
|
-
CONCURRENCY_INVALID:
|
|
387
|
+
CONCURRENCY_INVALID: {
|
|
388
|
+
en: "Concurrency must be a positive integer",
|
|
389
|
+
"zh-CN": "\u5E76\u53D1\u6570\u5FC5\u987B\u4E3A\u6B63\u6574\u6570"
|
|
390
|
+
},
|
|
96
391
|
/** 任务文件不存在 */
|
|
97
|
-
TASK_FILE_NOT_FOUND:
|
|
392
|
+
TASK_FILE_NOT_FOUND: {
|
|
393
|
+
en: (path) => `Task file not found: ${path}`,
|
|
394
|
+
"zh-CN": (path) => `\u4EFB\u52A1\u6587\u4EF6\u4E0D\u5B58\u5728: ${path}`
|
|
395
|
+
},
|
|
98
396
|
/** 任务文件中没有解析到有效任务 */
|
|
99
|
-
TASK_FILE_EMPTY:
|
|
397
|
+
TASK_FILE_EMPTY: {
|
|
398
|
+
en: "No valid tasks found in the task file",
|
|
399
|
+
"zh-CN": "\u4EFB\u52A1\u6587\u4EF6\u4E2D\u6CA1\u6709\u89E3\u6790\u5230\u6709\u6548\u4EFB\u52A1"
|
|
400
|
+
},
|
|
100
401
|
/** 任务文件中某个任务块缺少分支名 */
|
|
101
|
-
TASK_FILE_MISSING_BRANCH:
|
|
402
|
+
TASK_FILE_MISSING_BRANCH: {
|
|
403
|
+
en: (blockIndex) => `Task block #${blockIndex} is missing branch name (# branch: ...)`,
|
|
404
|
+
"zh-CN": (blockIndex) => `\u4EFB\u52A1\u6587\u4EF6\u7B2C ${blockIndex} \u4E2A\u4EFB\u52A1\u5757\u7F3A\u5C11\u5206\u652F\u540D\uFF08# branch: ...\uFF09`
|
|
405
|
+
},
|
|
102
406
|
/** 任务文件中某个任务块缺少任务描述 */
|
|
103
|
-
TASK_FILE_MISSING_TASK:
|
|
407
|
+
TASK_FILE_MISSING_TASK: {
|
|
408
|
+
en: (branch) => `Task file is missing task description for branch ${branch}`,
|
|
409
|
+
"zh-CN": (branch) => `\u4EFB\u52A1\u6587\u4EF6\u4E2D\u5206\u652F ${branch} \u7F3A\u5C11\u4EFB\u52A1\u63CF\u8FF0`
|
|
410
|
+
},
|
|
104
411
|
/** 任务文件中某个任务块缺少任务描述(无分支名时按索引定位) */
|
|
105
|
-
TASK_FILE_MISSING_TASK_BY_INDEX:
|
|
412
|
+
TASK_FILE_MISSING_TASK_BY_INDEX: {
|
|
413
|
+
en: (blockIndex) => `Task block #${blockIndex} is missing task description`,
|
|
414
|
+
"zh-CN": (blockIndex) => `\u4EFB\u52A1\u6587\u4EF6\u7B2C ${blockIndex} \u4E2A\u4EFB\u52A1\u5757\u7F3A\u5C11\u4EFB\u52A1\u63CF\u8FF0`
|
|
415
|
+
},
|
|
106
416
|
/** --file 和 --tasks 不能同时使用 */
|
|
107
|
-
FILE_AND_TASKS_CONFLICT:
|
|
417
|
+
FILE_AND_TASKS_CONFLICT: {
|
|
418
|
+
en: "--file and --tasks cannot be used together",
|
|
419
|
+
"zh-CN": "--file \u548C --tasks \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528"
|
|
420
|
+
},
|
|
108
421
|
/** 任务文件加载成功 */
|
|
109
|
-
TASK_FILE_LOADED:
|
|
422
|
+
TASK_FILE_LOADED: {
|
|
423
|
+
en: (count, path) => `\u2713 Loaded ${count} task(s) from ${path}`,
|
|
424
|
+
"zh-CN": (count, path) => `\u2713 \u4ECE ${path} \u52A0\u8F7D\u4E86 ${count} \u4E2A\u4EFB\u52A1`
|
|
425
|
+
},
|
|
110
426
|
/** 未指定 -b 或 -f */
|
|
111
|
-
BRANCH_OR_FILE_REQUIRED:
|
|
427
|
+
BRANCH_OR_FILE_REQUIRED: {
|
|
428
|
+
en: "Please specify -b <branch> or -f <task-file>",
|
|
429
|
+
"zh-CN": "\u8BF7\u6307\u5B9A -b \u5206\u652F\u540D\u6216 -f \u4EFB\u52A1\u6587\u4EF6"
|
|
430
|
+
},
|
|
112
431
|
/** dry-run 预览标题 */
|
|
113
|
-
DRY_RUN_TITLE:
|
|
432
|
+
DRY_RUN_TITLE: {
|
|
433
|
+
en: "Dry Run Preview",
|
|
434
|
+
"zh-CN": "Dry Run \u9884\u89C8"
|
|
435
|
+
},
|
|
114
436
|
/** dry-run 任务数量 */
|
|
115
|
-
DRY_RUN_TASK_COUNT:
|
|
437
|
+
DRY_RUN_TASK_COUNT: {
|
|
438
|
+
en: (count) => `Tasks: ${count}`,
|
|
439
|
+
"zh-CN": (count) => `\u4EFB\u52A1\u6570: ${count}`
|
|
440
|
+
},
|
|
116
441
|
/** dry-run 并发数 */
|
|
117
|
-
DRY_RUN_CONCURRENCY:
|
|
442
|
+
DRY_RUN_CONCURRENCY: {
|
|
443
|
+
en: (concurrency) => `Concurrency: ${concurrency === 0 ? "unlimited" : concurrency}`,
|
|
444
|
+
"zh-CN": (concurrency) => `\u5E76\u53D1\u6570: ${concurrency === 0 ? "\u4E0D\u9650\u5236" : concurrency}`
|
|
445
|
+
},
|
|
118
446
|
/** dry-run worktree 目录 */
|
|
119
|
-
DRY_RUN_WORKTREE_DIR:
|
|
447
|
+
DRY_RUN_WORKTREE_DIR: {
|
|
448
|
+
en: (dir) => `Worktree: ${dir}`,
|
|
449
|
+
"zh-CN": (dir) => `Worktree: ${dir}`
|
|
450
|
+
},
|
|
120
451
|
/** dry-run 分支已存在警告 */
|
|
121
|
-
DRY_RUN_BRANCH_EXISTS_WARNING:
|
|
452
|
+
DRY_RUN_BRANCH_EXISTS_WARNING: {
|
|
453
|
+
en: (name) => `Branch ${name} already exists`,
|
|
454
|
+
"zh-CN": (name) => `\u5206\u652F ${name} \u5DF2\u5B58\u5728`
|
|
455
|
+
},
|
|
122
456
|
/** dry-run 交互式模式提示(无任务描述) */
|
|
123
|
-
DRY_RUN_INTERACTIVE_MODE:
|
|
457
|
+
DRY_RUN_INTERACTIVE_MODE: {
|
|
458
|
+
en: "Mode: Interactive (no preset task)",
|
|
459
|
+
"zh-CN": "\u6A21\u5F0F: \u4EA4\u4E92\u5F0F\uFF08\u65E0\u9884\u8BBE\u4EFB\u52A1\uFF09"
|
|
460
|
+
},
|
|
124
461
|
/** dry-run 预览完成且无冲突 */
|
|
125
|
-
DRY_RUN_READY:
|
|
462
|
+
DRY_RUN_READY: {
|
|
463
|
+
en: "Preview complete, no conflicts. Remove --dry-run to execute.",
|
|
464
|
+
"zh-CN": "\u9884\u89C8\u5B8C\u6210\uFF0C\u65E0\u51B2\u7A81\u3002\u79FB\u9664 --dry-run \u5373\u53EF\u6B63\u5F0F\u6267\u884C\u3002"
|
|
465
|
+
},
|
|
126
466
|
/** dry-run 存在分支冲突 */
|
|
127
|
-
DRY_RUN_HAS_CONFLICT:
|
|
467
|
+
DRY_RUN_HAS_CONFLICT: {
|
|
468
|
+
en: "Branch conflicts detected. Execution will fail. Please resolve conflicting branches first.",
|
|
469
|
+
"zh-CN": "\u5B58\u5728\u5206\u652F\u51B2\u7A81\uFF0C\u5B9E\u9645\u6267\u884C\u65F6\u5C06\u4F1A\u62A5\u9519\u3002\u8BF7\u5148\u5904\u7406\u51B2\u7A81\u7684\u5206\u652F\u3002"
|
|
470
|
+
},
|
|
471
|
+
// --- 从 dry-run.ts 迁移 ---
|
|
472
|
+
/** 路径标签 */
|
|
473
|
+
PATH_LABEL: {
|
|
474
|
+
en: "Path:",
|
|
475
|
+
"zh-CN": "\u8DEF\u5F84:"
|
|
476
|
+
},
|
|
477
|
+
/** 任务标签 */
|
|
478
|
+
TASK_LABEL: {
|
|
479
|
+
en: "Task:",
|
|
480
|
+
"zh-CN": "\u4EFB\u52A1:"
|
|
481
|
+
},
|
|
482
|
+
// --- 从 task-executor.ts 迁移 ---
|
|
483
|
+
/** 任务执行失败 */
|
|
484
|
+
TASK_FAILED: {
|
|
485
|
+
en: "Task execution failed",
|
|
486
|
+
"zh-CN": "\u4EFB\u52A1\u6267\u884C\u5931\u8D25"
|
|
487
|
+
},
|
|
488
|
+
/** 全部任务已完成 */
|
|
489
|
+
ALL_TASKS_COMPLETED: {
|
|
490
|
+
en: (total) => `All tasks completed (${total}/${total})`,
|
|
491
|
+
"zh-CN": (total) => `\u5168\u90E8\u4EFB\u52A1\u5DF2\u5B8C\u6210 (${total}/${total})`
|
|
492
|
+
},
|
|
493
|
+
/** 成功标签 */
|
|
494
|
+
SUCCESS_LABEL: {
|
|
495
|
+
en: "Succeeded:",
|
|
496
|
+
"zh-CN": "\u6210\u529F:"
|
|
497
|
+
},
|
|
498
|
+
/** 失败标签 */
|
|
499
|
+
FAILURE_LABEL: {
|
|
500
|
+
en: "Failed:",
|
|
501
|
+
"zh-CN": "\u5931\u8D25:"
|
|
502
|
+
},
|
|
503
|
+
/** 总耗时标签 */
|
|
504
|
+
TOTAL_DURATION_LABEL: {
|
|
505
|
+
en: "Total duration:",
|
|
506
|
+
"zh-CN": "\u603B\u8017\u65F6:"
|
|
507
|
+
},
|
|
508
|
+
/** 总花费标签 */
|
|
509
|
+
TOTAL_COST_LABEL: {
|
|
510
|
+
en: "Total cost:",
|
|
511
|
+
"zh-CN": "\u603B\u82B1\u8D39:"
|
|
512
|
+
}
|
|
128
513
|
};
|
|
514
|
+
var RUN_MESSAGES = createMessages(RUN_MESSAGES_I18N);
|
|
129
515
|
|
|
130
516
|
// src/constants/messages/create.ts
|
|
131
|
-
var
|
|
517
|
+
var CREATE_MESSAGES_I18N = {
|
|
132
518
|
/** 创建数量参数无效 */
|
|
133
|
-
INVALID_COUNT:
|
|
519
|
+
INVALID_COUNT: {
|
|
520
|
+
en: (value) => `Invalid count: "${value}", please enter a positive integer`,
|
|
521
|
+
"zh-CN": (value) => `\u65E0\u6548\u7684\u521B\u5EFA\u6570\u91CF: "${value}"\uFF0C\u8BF7\u8F93\u5165\u6B63\u6574\u6570`
|
|
522
|
+
},
|
|
134
523
|
/** 当前不在主工作分支上的警告 */
|
|
135
|
-
CREATE_WARN_NOT_ON_MAIN_BRANCH:
|
|
524
|
+
CREATE_WARN_NOT_ON_MAIN_BRANCH: {
|
|
525
|
+
en: (mainBranch, currentBranch) => `Not on main work branch ${mainBranch} (current: ${currentBranch})`,
|
|
526
|
+
"zh-CN": (mainBranch, currentBranch) => `\u5F53\u524D\u4E0D\u5728\u4E3B\u5DE5\u4F5C\u5206\u652F ${mainBranch} \u4E0A\uFF08\u5F53\u524D: ${currentBranch}\uFF09`
|
|
527
|
+
}
|
|
136
528
|
};
|
|
529
|
+
var CREATE_MESSAGES = createMessages(CREATE_MESSAGES_I18N);
|
|
137
530
|
|
|
138
531
|
// src/constants/messages/merge.ts
|
|
139
|
-
var
|
|
532
|
+
var MERGE_MESSAGES_I18N = {
|
|
140
533
|
/** merge 成功 */
|
|
141
|
-
MERGE_SUCCESS:
|
|
142
|
-
|
|
534
|
+
MERGE_SUCCESS: {
|
|
535
|
+
en: (branch, message, pushed) => `\u2713 Branch ${branch} successfully merged into current branch
|
|
536
|
+
Commit message: ${message}${pushed ? "\n Pushed to remote" : ""}`,
|
|
537
|
+
"zh-CN": (branch, message, pushed) => `\u2713 \u5206\u652F ${branch} \u5DF2\u6210\u529F\u5408\u5E76\u5230\u5F53\u524D\u5206\u652F
|
|
538
|
+
\u63D0\u4EA4\u4FE1\u606F: ${message}${pushed ? "\n \u5DF2\u63A8\u9001\u5230\u8FDC\u7A0B\u4ED3\u5E93" : ""}`
|
|
539
|
+
},
|
|
143
540
|
/** merge 成功(无提交信息,目标 worktree 已提交过) */
|
|
144
|
-
MERGE_SUCCESS_NO_MESSAGE:
|
|
541
|
+
MERGE_SUCCESS_NO_MESSAGE: {
|
|
542
|
+
en: (branch, pushed) => `\u2713 Branch ${branch} successfully merged into current branch${pushed ? "\n Pushed to remote" : ""}`,
|
|
543
|
+
"zh-CN": (branch, pushed) => `\u2713 \u5206\u652F ${branch} \u5DF2\u6210\u529F\u5408\u5E76\u5230\u5F53\u524D\u5206\u652F${pushed ? "\n \u5DF2\u63A8\u9001\u5230\u8FDC\u7A0B\u4ED3\u5E93" : ""}`
|
|
544
|
+
},
|
|
145
545
|
/** merge 冲突 */
|
|
146
|
-
MERGE_CONFLICT:
|
|
546
|
+
MERGE_CONFLICT: {
|
|
547
|
+
en: "Merge has conflicts, please resolve manually:\n After resolving, run git add . && git merge --continue",
|
|
548
|
+
"zh-CN": "\u5408\u5E76\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u5904\u7406\uFF1A\n \u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue"
|
|
549
|
+
},
|
|
147
550
|
/** merge 后清理 worktree 和分支成功 */
|
|
148
|
-
WORKTREE_CLEANED:
|
|
551
|
+
WORKTREE_CLEANED: {
|
|
552
|
+
en: (branch) => `\u2713 Cleaned worktree and branch: ${branch}`,
|
|
553
|
+
"zh-CN": (branch) => `\u2713 \u5DF2\u6E05\u7406 worktree \u548C\u5206\u652F: ${branch}`
|
|
554
|
+
},
|
|
149
555
|
/** 目标 worktree 有未提交修改但未指定 -m */
|
|
150
|
-
TARGET_WORKTREE_DIRTY_NO_MESSAGE:
|
|
556
|
+
TARGET_WORKTREE_DIRTY_NO_MESSAGE: {
|
|
557
|
+
en: (worktreePath) => `${worktreePath} has uncommitted changes, please provide a commit message via -m option`,
|
|
558
|
+
"zh-CN": (worktreePath) => `${worktreePath} \u6709\u672A\u63D0\u4EA4\u7684\u4FEE\u6539\uFF0C\u8BF7\u901A\u8FC7 -m \u53C2\u6570\u63D0\u4F9B\u63D0\u4EA4\u4FE1\u606F`
|
|
559
|
+
},
|
|
151
560
|
/** 目标 worktree 既干净又无本地提交 */
|
|
152
|
-
TARGET_WORKTREE_NO_CHANGES:
|
|
561
|
+
TARGET_WORKTREE_NO_CHANGES: {
|
|
562
|
+
en: "Target worktree has no changes to merge (working directory clean and no local commits)",
|
|
563
|
+
"zh-CN": "\u76EE\u6807 worktree \u6CA1\u6709\u4EFB\u4F55\u53EF\u5408\u5E76\u7684\u53D8\u66F4\uFF08\u5DE5\u4F5C\u533A\u5E72\u51C0\u4E14\u65E0\u672C\u5730\u63D0\u4EA4\uFF09"
|
|
564
|
+
},
|
|
153
565
|
/** merge 命令检测到 validate 状态的提示 */
|
|
154
|
-
MERGE_VALIDATE_STATE_HINT:
|
|
566
|
+
MERGE_VALIDATE_STATE_HINT: {
|
|
567
|
+
en: (branch) => `Main worktree may have residual validate state, run clawt validate -b ${branch} --clean first`,
|
|
568
|
+
"zh-CN": (branch) => `\u4E3B worktree \u53EF\u80FD\u5B58\u5728 validate \u6B8B\u7559\u72B6\u6001\uFF0C\u53EF\u5148\u6267\u884C clawt validate -b ${branch} --clean \u6E05\u7406`
|
|
569
|
+
},
|
|
155
570
|
/** merge 检测到 auto-save 提交,提示用户是否压缩 */
|
|
156
|
-
MERGE_SQUASH_PROMPT:
|
|
571
|
+
MERGE_SQUASH_PROMPT: {
|
|
572
|
+
en: "Detected temporary commits from sync, squash all commits into one?\n After squashing, changes will remain in the target worktree staging area and need to be re-committed (you can use Claude Code CLI or other tools to generate the commit message)",
|
|
573
|
+
"zh-CN": "\u68C0\u6D4B\u5230 sync \u4EA7\u751F\u7684\u4E34\u65F6\u63D0\u4EA4\uFF0C\u662F\u5426\u5C06\u6240\u6709\u63D0\u4EA4\u538B\u7F29\u4E3A\u4E00\u4E2A\uFF1F\n \u538B\u7F29\u540E\u53D8\u66F4\u5C06\u4FDD\u7559\u5728\u76EE\u6807worktree\u7684\u6682\u5B58\u533A\uFF0C\u9700\u8981\u91CD\u65B0\u63D0\u4EA4\uFF08\u53EF\u4F7F\u7528 Claude Code Cli\u6216\u5176\u4ED6\u5DE5\u5177\u751F\u6210\u63D0\u4EA4\u4FE1\u606F\uFF09"
|
|
574
|
+
},
|
|
157
575
|
/** squash 完成且通过 -m 直接提交后的提示 */
|
|
158
|
-
MERGE_SQUASH_COMMITTED:
|
|
576
|
+
MERGE_SQUASH_COMMITTED: {
|
|
577
|
+
en: (branch) => `\u2713 All commits from branch ${branch} squashed into one`,
|
|
578
|
+
"zh-CN": (branch) => `\u2713 \u5DF2\u5C06\u5206\u652F ${branch} \u7684\u6240\u6709\u63D0\u4EA4\u538B\u7F29\u4E3A\u4E00\u4E2A`
|
|
579
|
+
},
|
|
159
580
|
/** squash 完成但未提供 -m,提示用户自行提交 */
|
|
160
|
-
MERGE_SQUASH_PENDING:
|
|
581
|
+
MERGE_SQUASH_PENDING: {
|
|
582
|
+
en: (worktreePath, branch) => `\u2713 All commits squashed into staging area
|
|
583
|
+
Please commit in the target worktree, then re-run merge:
|
|
584
|
+
cd ${worktreePath}
|
|
585
|
+
After committing, run: clawt merge -b ${branch}`,
|
|
586
|
+
"zh-CN": (worktreePath, branch) => `\u2713 \u5DF2\u5C06\u6240\u6709\u63D0\u4EA4\u538B\u7F29\u5230\u6682\u5B58\u533A
|
|
161
587
|
\u8BF7\u5728\u76EE\u6807 worktree \u4E2D\u63D0\u4EA4\u540E\u91CD\u65B0\u6267\u884C merge\uFF1A
|
|
162
588
|
cd ${worktreePath}
|
|
163
|
-
\u63D0\u4EA4\u5B8C\u6210\u540E\u6267\u884C\uFF1Aclawt merge -b ${branch}
|
|
589
|
+
\u63D0\u4EA4\u5B8C\u6210\u540E\u6267\u884C\uFF1Aclawt merge -b ${branch}`
|
|
590
|
+
},
|
|
164
591
|
/** merge 后 pull 冲突 */
|
|
165
|
-
PULL_CONFLICT:
|
|
592
|
+
PULL_CONFLICT: {
|
|
593
|
+
en: "Conflict during auto-pull, merge completed but remote sync failed\n Please resolve manually:\n After resolving, run git add . && git commit\n Then run git push to push to remote",
|
|
594
|
+
"zh-CN": "\u81EA\u52A8 pull \u65F6\u53D1\u751F\u51B2\u7A81\uFF0Cmerge \u5DF2\u5B8C\u6210\u4F46\u8FDC\u7A0B\u540C\u6B65\u5931\u8D25\n \u8BF7\u624B\u52A8\u89E3\u51B3\u51B2\u7A81\uFF1A\n \u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git commit\n \u7136\u540E\u6267\u884C git push \u63A8\u9001\u5230\u8FDC\u7A0B"
|
|
595
|
+
},
|
|
166
596
|
/** push 失败 */
|
|
167
|
-
PUSH_FAILED:
|
|
597
|
+
PUSH_FAILED: {
|
|
598
|
+
en: "Auto-push failed, merge and pull completed\n Please run git push manually",
|
|
599
|
+
"zh-CN": "\u81EA\u52A8 push \u5931\u8D25\uFF0Cmerge \u548C pull \u5DF2\u5B8C\u6210\n \u8BF7\u624B\u52A8\u6267\u884C git push"
|
|
600
|
+
},
|
|
168
601
|
/** merge 无可用 worktree */
|
|
169
|
-
MERGE_NO_WORKTREES:
|
|
602
|
+
MERGE_NO_WORKTREES: {
|
|
603
|
+
en: "No worktrees available, please create one with clawt run or clawt create first",
|
|
604
|
+
"zh-CN": "\u5F53\u524D\u9879\u76EE\u6CA1\u6709\u53EF\u7528\u7684 worktree\uFF0C\u8BF7\u5148\u901A\u8FC7 clawt run \u6216 clawt create \u521B\u5EFA"
|
|
605
|
+
},
|
|
170
606
|
/** merge 模糊匹配无结果,列出可用分支 */
|
|
171
|
-
MERGE_NO_MATCH:
|
|
172
|
-
|
|
607
|
+
MERGE_NO_MATCH: {
|
|
608
|
+
en: (name, branches) => `No branch matching "${name}"
|
|
609
|
+
Available branches:
|
|
173
610
|
${branches.map((b) => ` - ${b}`).join("\n")}`,
|
|
611
|
+
"zh-CN": (name, branches) => `\u672A\u627E\u5230\u4E0E "${name}" \u5339\u914D\u7684\u5206\u652F
|
|
612
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
613
|
+
${branches.map((b) => ` - ${b}`).join("\n")}`
|
|
614
|
+
},
|
|
174
615
|
/** merge 交互选择提示 */
|
|
175
|
-
MERGE_SELECT_BRANCH:
|
|
616
|
+
MERGE_SELECT_BRANCH: {
|
|
617
|
+
en: "Select a branch to merge",
|
|
618
|
+
"zh-CN": "\u8BF7\u9009\u62E9\u8981\u5408\u5E76\u7684\u5206\u652F"
|
|
619
|
+
},
|
|
176
620
|
/** merge 模糊匹配到多个结果提示 */
|
|
177
|
-
MERGE_MULTIPLE_MATCHES:
|
|
621
|
+
MERGE_MULTIPLE_MATCHES: {
|
|
622
|
+
en: (name) => `"${name}" matched multiple branches, please select:`,
|
|
623
|
+
"zh-CN": (name) => `"${name}" \u5339\u914D\u5230\u591A\u4E2A\u5206\u652F\uFF0C\u8BF7\u9009\u62E9\uFF1A`
|
|
624
|
+
},
|
|
178
625
|
/** 询问是否使用 AI 辅助解决冲突 */
|
|
179
|
-
MERGE_CONFLICT_ASK_AI:
|
|
626
|
+
MERGE_CONFLICT_ASK_AI: {
|
|
627
|
+
en: "Merge conflict detected, use Claude Code to auto-resolve?",
|
|
628
|
+
"zh-CN": "\u68C0\u6D4B\u5230\u5408\u5E76\u51B2\u7A81\uFF0C\u662F\u5426\u4F7F\u7528 Claude Code \u81EA\u52A8\u89E3\u51B3\uFF1F"
|
|
629
|
+
},
|
|
180
630
|
/** AI 冲突解决开始 */
|
|
181
|
-
MERGE_CONFLICT_AI_START:
|
|
631
|
+
MERGE_CONFLICT_AI_START: {
|
|
632
|
+
en: (fileCount) => `Using Claude Code to analyze and resolve ${fileCount} conflicting file(s)...`,
|
|
633
|
+
"zh-CN": (fileCount) => `\u6B63\u5728\u4F7F\u7528 Claude Code \u5206\u6790\u5E76\u89E3\u51B3 ${fileCount} \u4E2A\u51B2\u7A81\u6587\u4EF6...`
|
|
634
|
+
},
|
|
182
635
|
/** AI 冲突解决成功 */
|
|
183
|
-
MERGE_CONFLICT_AI_SUCCESS:
|
|
636
|
+
MERGE_CONFLICT_AI_SUCCESS: {
|
|
637
|
+
en: "\u2713 Claude Code successfully resolved all conflicts",
|
|
638
|
+
"zh-CN": "\u2713 Claude Code \u5DF2\u6210\u529F\u89E3\u51B3\u6240\u6709\u51B2\u7A81"
|
|
639
|
+
},
|
|
184
640
|
/** AI 冲突解决后仍有未解决的冲突 */
|
|
185
|
-
MERGE_CONFLICT_AI_PARTIAL:
|
|
186
|
-
|
|
641
|
+
MERGE_CONFLICT_AI_PARTIAL: {
|
|
642
|
+
en: (remaining) => `Claude Code processed conflicts, but ${remaining} file(s) still have conflicts
|
|
643
|
+
Please resolve remaining conflicts manually, then run git add . && git merge --continue`,
|
|
644
|
+
"zh-CN": (remaining) => `Claude Code \u5DF2\u5904\u7406\u51B2\u7A81\u6587\u4EF6\uFF0C\u4F46\u4ECD\u6709 ${remaining} \u4E2A\u6587\u4EF6\u5B58\u5728\u51B2\u7A81
|
|
645
|
+
\u8BF7\u624B\u52A8\u5904\u7406\u5269\u4F59\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue`
|
|
646
|
+
},
|
|
187
647
|
/** AI 冲突解决失败 */
|
|
188
|
-
MERGE_CONFLICT_AI_FAILED:
|
|
648
|
+
MERGE_CONFLICT_AI_FAILED: {
|
|
649
|
+
en: (errorMsg) => `Claude Code failed to resolve conflicts: ${errorMsg}
|
|
650
|
+
Please resolve manually:
|
|
651
|
+
After resolving, run git add . && git merge --continue`,
|
|
652
|
+
"zh-CN": (errorMsg) => `Claude Code \u89E3\u51B3\u51B2\u7A81\u5931\u8D25: ${errorMsg}
|
|
189
653
|
\u8BF7\u624B\u52A8\u5904\u7406\uFF1A
|
|
190
|
-
\u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue
|
|
654
|
+
\u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue`
|
|
655
|
+
},
|
|
191
656
|
/** --auto 模式下的冲突手动解决(配置为 manual) */
|
|
192
|
-
MERGE_CONFLICT_MANUAL:
|
|
657
|
+
MERGE_CONFLICT_MANUAL: {
|
|
658
|
+
en: "Merge has conflicts, please resolve manually:\n After resolving, run git add . && git merge --continue",
|
|
659
|
+
"zh-CN": "\u5408\u5E76\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u5904\u7406\uFF1A\n \u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue"
|
|
660
|
+
},
|
|
193
661
|
/** 目标 worktree 有未提交修改时的交互式提交信息提示 */
|
|
194
|
-
MERGE_PROMPT_COMMIT_MESSAGE:
|
|
662
|
+
MERGE_PROMPT_COMMIT_MESSAGE: {
|
|
663
|
+
en: "Target worktree has uncommitted changes, please enter a commit message",
|
|
664
|
+
"zh-CN": "\u76EE\u6807 worktree \u6709\u672A\u63D0\u4EA4\u7684\u4FEE\u6539\uFF0C\u8BF7\u8F93\u5165\u63D0\u4EA4\u4FE1\u606F"
|
|
665
|
+
},
|
|
195
666
|
/** squash 后的交互式提交信息提示 */
|
|
196
|
-
MERGE_SQUASH_PROMPT_COMMIT_MESSAGE:
|
|
667
|
+
MERGE_SQUASH_PROMPT_COMMIT_MESSAGE: {
|
|
668
|
+
en: "Enter commit message after squash",
|
|
669
|
+
"zh-CN": "\u8BF7\u8F93\u5165 squash \u540E\u7684\u63D0\u4EA4\u4FE1\u606F"
|
|
670
|
+
},
|
|
671
|
+
// --- 从 prompt.ts 迁移 ---
|
|
672
|
+
/** 提交信息不能为空 */
|
|
673
|
+
COMMIT_MESSAGE_NOT_EMPTY: {
|
|
674
|
+
en: "Commit message cannot be empty",
|
|
675
|
+
"zh-CN": "\u63D0\u4EA4\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A"
|
|
676
|
+
},
|
|
677
|
+
// --- 从 commands/merge.ts 迁移 ---
|
|
678
|
+
/** 已配置自动删除 */
|
|
679
|
+
AUTO_DELETE_CONFIGURED: {
|
|
680
|
+
en: (branch) => `Auto-delete configured, worktree and branch will be cleaned up after merge: ${branch}`,
|
|
681
|
+
"zh-CN": (branch) => `\u5DF2\u914D\u7F6E\u81EA\u52A8\u5220\u9664\uFF0Cmerge \u6210\u529F\u540E\u5C06\u81EA\u52A8\u6E05\u7406 worktree \u548C\u5206\u652F: ${branch}`
|
|
682
|
+
},
|
|
683
|
+
/** 是否删除对应的 worktree 和分支 */
|
|
684
|
+
CONFIRM_DELETE_WORKTREE_BRANCH: {
|
|
685
|
+
en: (branch) => `Delete the corresponding worktree and branch (${branch})?`,
|
|
686
|
+
"zh-CN": (branch) => `\u662F\u5426\u5220\u9664\u5BF9\u5E94\u7684 worktree \u548C\u5206\u652F (${branch})\uFF1F`
|
|
687
|
+
}
|
|
197
688
|
};
|
|
689
|
+
var MERGE_MESSAGES = createMessages(MERGE_MESSAGES_I18N);
|
|
198
690
|
|
|
199
691
|
// src/constants/messages/validate.ts
|
|
200
|
-
var
|
|
692
|
+
var VALIDATE_MESSAGES_I18N = {
|
|
201
693
|
/** validate 成功 */
|
|
202
|
-
VALIDATE_SUCCESS:
|
|
203
|
-
|
|
694
|
+
VALIDATE_SUCCESS: {
|
|
695
|
+
en: (branch) => `\u2713 Changes from branch ${branch} applied to main worktree
|
|
696
|
+
Ready for validation`,
|
|
697
|
+
"zh-CN": (branch) => `\u2713 \u5DF2\u5C06\u5206\u652F ${branch} \u7684\u53D8\u66F4\u5E94\u7528\u5230\u4E3B worktree
|
|
698
|
+
\u53EF\u4EE5\u5F00\u59CB\u9A8C\u8BC1\u4E86`
|
|
699
|
+
},
|
|
204
700
|
/** 增量 validate 成功提示 */
|
|
205
|
-
INCREMENTAL_VALIDATE_SUCCESS:
|
|
206
|
-
|
|
701
|
+
INCREMENTAL_VALIDATE_SUCCESS: {
|
|
702
|
+
en: (branch) => `\u2713 Latest changes from branch ${branch} applied to main worktree (incremental mode)
|
|
703
|
+
Staging area = last snapshot, Working directory = latest changes`,
|
|
704
|
+
"zh-CN": (branch) => `\u2713 \u5DF2\u5C06\u5206\u652F ${branch} \u7684\u6700\u65B0\u53D8\u66F4\u5E94\u7528\u5230\u4E3B worktree\uFF08\u589E\u91CF\u6A21\u5F0F\uFF09
|
|
705
|
+
\u6682\u5B58\u533A = \u4E0A\u6B21\u5FEB\u7167\uFF0C\u5DE5\u4F5C\u76EE\u5F55 = \u6700\u65B0\u53D8\u66F4`
|
|
706
|
+
},
|
|
207
707
|
/** 增量 validate 降级为全量模式提示 */
|
|
208
|
-
INCREMENTAL_VALIDATE_FALLBACK:
|
|
708
|
+
INCREMENTAL_VALIDATE_FALLBACK: {
|
|
709
|
+
en: "Incremental comparison failed, fell back to full mode",
|
|
710
|
+
"zh-CN": "\u589E\u91CF\u5BF9\u6BD4\u5931\u8D25\uFF0C\u5DF2\u964D\u7EA7\u4E3A\u5168\u91CF\u6A21\u5F0F"
|
|
711
|
+
},
|
|
209
712
|
/** 增量 validate 检测到目标 worktree 无新变更 */
|
|
210
|
-
INCREMENTAL_VALIDATE_NO_CHANGES:
|
|
713
|
+
INCREMENTAL_VALIDATE_NO_CHANGES: {
|
|
714
|
+
en: (branch) => `Branch ${branch} has no new changes since last validate, restored to previous validation state`,
|
|
715
|
+
"zh-CN": (branch) => `\u5206\u652F ${branch} \u81EA\u4E0A\u6B21 validate \u4EE5\u6765\u6CA1\u6709\u65B0\u7684\u53D8\u66F4\uFF0C\u5DF2\u6062\u590D\u5230\u4E0A\u6B21\u9A8C\u8BC1\u72B6\u6001`
|
|
716
|
+
},
|
|
211
717
|
/** validate 状态已清理 */
|
|
212
|
-
VALIDATE_CLEANED:
|
|
718
|
+
VALIDATE_CLEANED: {
|
|
719
|
+
en: (branch) => `\u2713 Validate state for branch ${branch} cleaned`,
|
|
720
|
+
"zh-CN": (branch) => `\u2713 \u5206\u652F ${branch} \u7684 validate \u72B6\u6001\u5DF2\u6E05\u7406`
|
|
721
|
+
},
|
|
213
722
|
/** validate patch apply 失败,提示用户同步主分支 */
|
|
214
|
-
VALIDATE_PATCH_APPLY_FAILED:
|
|
215
|
-
|
|
723
|
+
VALIDATE_PATCH_APPLY_FAILED: {
|
|
724
|
+
en: (branch) => `Change migration failed: target branch has diverged too far from main
|
|
725
|
+
Please run clawt sync -b ${branch} first, then retry`,
|
|
726
|
+
"zh-CN": (branch) => `\u53D8\u66F4\u8FC1\u79FB\u5931\u8D25\uFF1A\u76EE\u6807\u5206\u652F\u4E0E\u4E3B\u5206\u652F\u5DEE\u5F02\u8FC7\u5927
|
|
727
|
+
\u8BF7\u5148\u6267\u884C clawt sync -b ${branch} \u540C\u6B65\u4E3B\u5206\u652F\u540E\u91CD\u8BD5`
|
|
728
|
+
},
|
|
216
729
|
/** validate 无可用 worktree */
|
|
217
|
-
VALIDATE_NO_WORKTREES:
|
|
730
|
+
VALIDATE_NO_WORKTREES: {
|
|
731
|
+
en: "No worktrees available, please create one with clawt run or clawt create first",
|
|
732
|
+
"zh-CN": "\u5F53\u524D\u9879\u76EE\u6CA1\u6709\u53EF\u7528\u7684 worktree\uFF0C\u8BF7\u5148\u901A\u8FC7 clawt run \u6216 clawt create \u521B\u5EFA"
|
|
733
|
+
},
|
|
218
734
|
/** validate 模糊匹配无结果,列出可用分支 */
|
|
219
|
-
VALIDATE_NO_MATCH:
|
|
220
|
-
|
|
735
|
+
VALIDATE_NO_MATCH: {
|
|
736
|
+
en: (name, branches) => `No branch matching "${name}"
|
|
737
|
+
Available branches:
|
|
221
738
|
${branches.map((b) => ` - ${b}`).join("\n")}`,
|
|
739
|
+
"zh-CN": (name, branches) => `\u672A\u627E\u5230\u4E0E "${name}" \u5339\u914D\u7684\u5206\u652F
|
|
740
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
741
|
+
${branches.map((b) => ` - ${b}`).join("\n")}`
|
|
742
|
+
},
|
|
222
743
|
/** validate 交互选择提示 */
|
|
223
|
-
VALIDATE_SELECT_BRANCH:
|
|
744
|
+
VALIDATE_SELECT_BRANCH: {
|
|
745
|
+
en: "Select a branch to validate",
|
|
746
|
+
"zh-CN": "\u8BF7\u9009\u62E9\u8981\u9A8C\u8BC1\u7684\u5206\u652F"
|
|
747
|
+
},
|
|
224
748
|
/** validate 模糊匹配到多个结果提示 */
|
|
225
|
-
VALIDATE_MULTIPLE_MATCHES:
|
|
749
|
+
VALIDATE_MULTIPLE_MATCHES: {
|
|
750
|
+
en: (name) => `"${name}" matched multiple branches, please select:`,
|
|
751
|
+
"zh-CN": (name) => `"${name}" \u5339\u914D\u5230\u591A\u4E2A\u5206\u652F\uFF0C\u8BF7\u9009\u62E9\uFF1A`
|
|
752
|
+
},
|
|
226
753
|
/** --run 命令开始执行提示 */
|
|
227
|
-
VALIDATE_RUN_START:
|
|
754
|
+
VALIDATE_RUN_START: {
|
|
755
|
+
en: (command) => `Running command in main worktree: ${command}`,
|
|
756
|
+
"zh-CN": (command) => `\u6B63\u5728\u4E3B worktree \u4E2D\u6267\u884C\u547D\u4EE4: ${command}`
|
|
757
|
+
},
|
|
228
758
|
/** --run 命令执行成功(退出码 0) */
|
|
229
|
-
VALIDATE_RUN_SUCCESS:
|
|
759
|
+
VALIDATE_RUN_SUCCESS: {
|
|
760
|
+
en: (command) => `\u2713 Command completed: ${command}, exit code: 0`,
|
|
761
|
+
"zh-CN": (command) => `\u2713 \u547D\u4EE4\u6267\u884C\u5B8C\u6210: ${command}\uFF0C\u9000\u51FA\u7801: 0`
|
|
762
|
+
},
|
|
230
763
|
/** --run 命令执行失败(退出码非 0) */
|
|
231
|
-
VALIDATE_RUN_FAILED:
|
|
764
|
+
VALIDATE_RUN_FAILED: {
|
|
765
|
+
en: (command, exitCode) => `\u2717 Command completed: ${command}, exit code: ${exitCode}`,
|
|
766
|
+
"zh-CN": (command, exitCode) => `\u2717 \u547D\u4EE4\u6267\u884C\u5B8C\u6210: ${command}\uFF0C\u9000\u51FA\u7801: ${exitCode}`
|
|
767
|
+
},
|
|
232
768
|
/** --run 命令执行异常(进程启动失败等) */
|
|
233
|
-
VALIDATE_RUN_ERROR:
|
|
769
|
+
VALIDATE_RUN_ERROR: {
|
|
770
|
+
en: (command, errorMessage) => `\u2717 Command execution error: ${errorMessage}`,
|
|
771
|
+
"zh-CN": (command, errorMessage) => `\u2717 \u547D\u4EE4\u6267\u884C\u51FA\u9519: ${errorMessage}`
|
|
772
|
+
},
|
|
234
773
|
/** 并行命令开始执行提示 */
|
|
235
|
-
VALIDATE_PARALLEL_RUN_START:
|
|
774
|
+
VALIDATE_PARALLEL_RUN_START: {
|
|
775
|
+
en: (count) => `Running ${count} command(s) in parallel...`,
|
|
776
|
+
"zh-CN": (count) => `\u6B63\u5728\u5E76\u884C\u6267\u884C ${count} \u4E2A\u547D\u4EE4...`
|
|
777
|
+
},
|
|
236
778
|
/** 并行执行中单个命令开始提示(带序号) */
|
|
237
|
-
VALIDATE_PARALLEL_CMD_START:
|
|
779
|
+
VALIDATE_PARALLEL_CMD_START: {
|
|
780
|
+
en: (index, total, command) => `[${index}/${total}] ${command}`,
|
|
781
|
+
"zh-CN": (index, total, command) => `[${index}/${total}] ${command}`
|
|
782
|
+
},
|
|
238
783
|
/** 并行执行全部成功汇总提示 */
|
|
239
|
-
VALIDATE_PARALLEL_RUN_ALL_SUCCESS:
|
|
784
|
+
VALIDATE_PARALLEL_RUN_ALL_SUCCESS: {
|
|
785
|
+
en: (count) => `\u2713 All ${count} command(s) completed successfully`,
|
|
786
|
+
"zh-CN": (count) => `\u2713 \u5168\u90E8 ${count} \u4E2A\u547D\u4EE4\u6267\u884C\u6210\u529F`
|
|
787
|
+
},
|
|
240
788
|
/** 并行执行部分失败汇总提示 */
|
|
241
|
-
VALIDATE_PARALLEL_RUN_SUMMARY:
|
|
789
|
+
VALIDATE_PARALLEL_RUN_SUMMARY: {
|
|
790
|
+
en: (successCount, failedCount) => `${successCount + failedCount} command(s), ${successCount} succeeded, ${failedCount} failed`,
|
|
791
|
+
"zh-CN": (successCount, failedCount) => `\u5171 ${successCount + failedCount} \u4E2A\u547D\u4EE4\uFF0C${successCount} \u4E2A\u6210\u529F\uFF0C${failedCount} \u4E2A\u5931\u8D25`
|
|
792
|
+
},
|
|
242
793
|
/** 并行执行中单个命令成功 */
|
|
243
|
-
VALIDATE_PARALLEL_CMD_SUCCESS:
|
|
794
|
+
VALIDATE_PARALLEL_CMD_SUCCESS: {
|
|
795
|
+
en: (command) => ` \u2713 ${command}`,
|
|
796
|
+
"zh-CN": (command) => ` \u2713 ${command}`
|
|
797
|
+
},
|
|
244
798
|
/** 并行执行中单个命令失败 */
|
|
245
|
-
VALIDATE_PARALLEL_CMD_FAILED:
|
|
799
|
+
VALIDATE_PARALLEL_CMD_FAILED: {
|
|
800
|
+
en: (command, exitCode) => ` \u2717 ${command} (exit code: ${exitCode})`,
|
|
801
|
+
"zh-CN": (command, exitCode) => ` \u2717 ${command}\uFF08\u9000\u51FA\u7801: ${exitCode}\uFF09`
|
|
802
|
+
},
|
|
246
803
|
/** 并行执行中单个命令启动失败 */
|
|
247
|
-
VALIDATE_PARALLEL_CMD_ERROR:
|
|
804
|
+
VALIDATE_PARALLEL_CMD_ERROR: {
|
|
805
|
+
en: (command, errorMessage) => ` \u2717 ${command} (error: ${errorMessage})`,
|
|
806
|
+
"zh-CN": (command, errorMessage) => ` \u2717 ${command}\uFF08\u9519\u8BEF: ${errorMessage}\uFF09`
|
|
807
|
+
},
|
|
248
808
|
/** patch apply 失败后询问用户是否执行 sync */
|
|
249
|
-
VALIDATE_CONFIRM_AUTO_SYNC:
|
|
809
|
+
VALIDATE_CONFIRM_AUTO_SYNC: {
|
|
810
|
+
en: (branch) => `Run sync now to sync main branch to ${branch}?`,
|
|
811
|
+
"zh-CN": (branch) => `\u662F\u5426\u7ACB\u5373\u6267\u884C sync \u540C\u6B65\u4E3B\u5206\u652F\u5230 ${branch}\uFF1F`
|
|
812
|
+
},
|
|
250
813
|
/** 自动 sync 开始提示 */
|
|
251
|
-
VALIDATE_AUTO_SYNC_START:
|
|
814
|
+
VALIDATE_AUTO_SYNC_START: {
|
|
815
|
+
en: (branch) => `Auto-syncing main branch to ${branch} ...`,
|
|
816
|
+
"zh-CN": (branch) => `\u6B63\u5728\u81EA\u52A8\u540C\u6B65\u4E3B\u5206\u652F\u5230 ${branch} ...`
|
|
817
|
+
},
|
|
252
818
|
/** 用户拒绝自动 sync */
|
|
253
|
-
VALIDATE_AUTO_SYNC_DECLINED:
|
|
819
|
+
VALIDATE_AUTO_SYNC_DECLINED: {
|
|
820
|
+
en: (branch) => `Please run clawt sync -b ${branch} manually, then retry`,
|
|
821
|
+
"zh-CN": (branch) => `\u8BF7\u624B\u52A8\u6267\u884C clawt sync -b ${branch} \u540C\u6B65\u4E3B\u5206\u652F\u540E\u91CD\u8BD5`
|
|
822
|
+
},
|
|
254
823
|
/** 验证分支不存在 */
|
|
255
|
-
VALIDATE_BRANCH_NOT_FOUND:
|
|
824
|
+
VALIDATE_BRANCH_NOT_FOUND: {
|
|
825
|
+
en: (validateBranch, branch) => `Validation branch ${validateBranch} does not exist, please run clawt create or clawt run to create branch ${branch} first`,
|
|
826
|
+
"zh-CN": (validateBranch, branch) => `\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u4E0D\u5B58\u5728\uFF0C\u8BF7\u5148\u6267\u884C clawt create \u6216 clawt run \u521B\u5EFA\u5206\u652F ${branch}`
|
|
827
|
+
},
|
|
256
828
|
/** validate 成功(含验证分支信息) */
|
|
257
|
-
VALIDATE_SUCCESS_WITH_BRANCH:
|
|
258
|
-
|
|
829
|
+
VALIDATE_SUCCESS_WITH_BRANCH: {
|
|
830
|
+
en: (branch, validateBranch) => `\u2713 Switched to validation branch ${validateBranch} and applied changes from branch ${branch}
|
|
831
|
+
Ready for validation`,
|
|
832
|
+
"zh-CN": (branch, validateBranch) => `\u2713 \u5DF2\u5207\u6362\u5230\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u5E76\u5E94\u7528\u5206\u652F ${branch} \u7684\u53D8\u66F4
|
|
833
|
+
\u53EF\u4EE5\u5F00\u59CB\u9A8C\u8BC1\u4E86`
|
|
834
|
+
},
|
|
259
835
|
/** 错误信息已复制到剪贴板提示 */
|
|
260
|
-
VALIDATE_RUN_ERROR_COPIED:
|
|
836
|
+
VALIDATE_RUN_ERROR_COPIED: {
|
|
837
|
+
en: "\u2702 Error information copied to clipboard",
|
|
838
|
+
"zh-CN": "\u2702 \u9519\u8BEF\u4FE1\u606F\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F"
|
|
839
|
+
},
|
|
261
840
|
/** 剪贴板复制失败提示 */
|
|
262
|
-
VALIDATE_RUN_ERROR_COPY_FAILED:
|
|
841
|
+
VALIDATE_RUN_ERROR_COPY_FAILED: {
|
|
842
|
+
en: "\u26A0 Failed to copy error information to clipboard",
|
|
843
|
+
"zh-CN": "\u26A0 \u9519\u8BEF\u4FE1\u606F\u590D\u5236\u5230\u526A\u8D34\u677F\u5931\u8D25"
|
|
844
|
+
},
|
|
263
845
|
/** 检测到外部软链接警告 */
|
|
264
|
-
VALIDATE_EXTERNAL_SYMLINKS_FOUND:
|
|
846
|
+
VALIDATE_EXTERNAL_SYMLINKS_FOUND: {
|
|
847
|
+
en: (count) => `\u26A0 Detected ${count} symlink(s) pointing outside the worktree (possibly created by AI Agent), auto-removed`,
|
|
848
|
+
"zh-CN": (count) => `\u26A0 \u68C0\u6D4B\u5230 ${count} \u4E2A\u6307\u5411 worktree \u5916\u90E8\u7684\u8F6F\u94FE\u63A5\uFF08\u53EF\u80FD\u7531 AI Agent \u521B\u5EFA\uFF09\uFF0C\u5DF2\u81EA\u52A8\u79FB\u9664`
|
|
849
|
+
},
|
|
265
850
|
/** 单命令(含 && 链)剪贴板错误格式 */
|
|
266
|
-
VALIDATE_CLIPBOARD_SINGLE_ERROR:
|
|
851
|
+
VALIDATE_CLIPBOARD_SINGLE_ERROR: {
|
|
852
|
+
en: (command, stderr) => `${command} command error:
|
|
267
853
|
${stderr}`,
|
|
854
|
+
"zh-CN": (command, stderr) => `${command} \u6307\u4EE4\u6267\u884C\u51FA\u9519\uFF0C\u9519\u8BEF\u4FE1\u606F\uFF1A
|
|
855
|
+
${stderr}`
|
|
856
|
+
},
|
|
268
857
|
/** 并行命令中单个命令的剪贴板错误格式 */
|
|
269
|
-
VALIDATE_CLIPBOARD_PARALLEL_ERROR:
|
|
858
|
+
VALIDATE_CLIPBOARD_PARALLEL_ERROR: {
|
|
859
|
+
en: (command, stderr) => `${command} command error:
|
|
270
860
|
${stderr}`,
|
|
861
|
+
"zh-CN": (command, stderr) => `${command} \u6307\u4EE4\u6267\u884C\u51FA\u9519\uFF0C\u9519\u8BEF\u4FE1\u606F\uFF1A
|
|
862
|
+
${stderr}`
|
|
863
|
+
},
|
|
271
864
|
/** 多个错误之间的分隔符 */
|
|
272
|
-
VALIDATE_CLIPBOARD_SEPARATOR:
|
|
865
|
+
VALIDATE_CLIPBOARD_SEPARATOR: {
|
|
866
|
+
en: "\n\n---\n\n",
|
|
867
|
+
"zh-CN": "\n\n---\n\n"
|
|
868
|
+
},
|
|
869
|
+
// --- 从 validate-branch.ts 迁移 ---
|
|
870
|
+
/** 工作区仍然不干净 */
|
|
871
|
+
WORKSPACE_STILL_DIRTY: {
|
|
872
|
+
en: "Workspace is still dirty, please resolve manually",
|
|
873
|
+
"zh-CN": "\u5DE5\u4F5C\u533A\u4ECD\u7136\u4E0D\u5E72\u51C0\uFF0C\u8BF7\u624B\u52A8\u5904\u7406"
|
|
874
|
+
},
|
|
875
|
+
/** 当前分支有未提交的更改 */
|
|
876
|
+
UNCOMMITTED_CHANGES_ON_BRANCH: {
|
|
877
|
+
en: "Current branch has uncommitted changes, please choose how to handle:\n",
|
|
878
|
+
"zh-CN": "\u5F53\u524D\u5206\u652F\u6709\u672A\u63D0\u4EA4\u7684\u66F4\u6539\uFF0C\u8BF7\u9009\u62E9\u5904\u7406\u65B9\u5F0F\uFF1A\n"
|
|
879
|
+
},
|
|
880
|
+
/** 选择处理方式 */
|
|
881
|
+
SELECT_ACTION: {
|
|
882
|
+
en: "Select action",
|
|
883
|
+
"zh-CN": "\u9009\u62E9\u5904\u7406\u65B9\u5F0F"
|
|
884
|
+
},
|
|
885
|
+
/** 是否继续执行? */
|
|
886
|
+
CONFIRM_CONTINUE_VALIDATE: {
|
|
887
|
+
en: "Continue?",
|
|
888
|
+
"zh-CN": "\u662F\u5426\u7EE7\u7EED\u6267\u884C\uFF1F"
|
|
889
|
+
},
|
|
890
|
+
/** 用户选择退出 */
|
|
891
|
+
USER_CHOSE_EXIT: {
|
|
892
|
+
en: "User chose to exit, please resolve workspace changes manually and retry",
|
|
893
|
+
"zh-CN": "\u7528\u6237\u9009\u62E9\u9000\u51FA\uFF0C\u8BF7\u624B\u52A8\u5904\u7406\u5DE5\u4F5C\u533A\u66F4\u6539\u540E\u91CD\u8BD5"
|
|
894
|
+
},
|
|
895
|
+
// --- 从 validate-runner.ts 迁移 ---
|
|
896
|
+
/** 指令执行出错,退出码 */
|
|
897
|
+
COMMAND_EXEC_ERROR: {
|
|
898
|
+
en: (command, exitCode) => `${command} command error, exit code: ${exitCode}`,
|
|
899
|
+
"zh-CN": (command, exitCode) => `${command} \u6307\u4EE4\u6267\u884C\u51FA\u9519\uFF0C\u9000\u51FA\u7801: ${exitCode}`
|
|
900
|
+
},
|
|
901
|
+
/** 退出码标签 */
|
|
902
|
+
EXIT_CODE_LABEL: {
|
|
903
|
+
en: (exitCode) => `Exit code: ${exitCode}`,
|
|
904
|
+
"zh-CN": (exitCode) => `\u9000\u51FA\u7801: ${exitCode}`
|
|
905
|
+
}
|
|
273
906
|
};
|
|
907
|
+
var VALIDATE_MESSAGES = createMessages(VALIDATE_MESSAGES_I18N);
|
|
274
908
|
|
|
275
909
|
// src/constants/messages/sync.ts
|
|
276
|
-
var
|
|
910
|
+
var SYNC_MESSAGES_I18N = {
|
|
277
911
|
/** sync 自动保存未提交变更 */
|
|
278
|
-
SYNC_AUTO_COMMITTED:
|
|
912
|
+
SYNC_AUTO_COMMITTED: {
|
|
913
|
+
en: (branch) => `Auto-saved uncommitted changes on branch ${branch}`,
|
|
914
|
+
"zh-CN": (branch) => `\u5DF2\u81EA\u52A8\u4FDD\u5B58 ${branch} \u5206\u652F\u7684\u672A\u63D0\u4EA4\u53D8\u66F4`
|
|
915
|
+
},
|
|
279
916
|
/** sync 开始合并 */
|
|
280
|
-
SYNC_MERGING:
|
|
917
|
+
SYNC_MERGING: {
|
|
918
|
+
en: (targetBranch, mainBranch) => `Merging ${mainBranch} into ${targetBranch} ...`,
|
|
919
|
+
"zh-CN": (targetBranch, mainBranch) => `\u6B63\u5728\u5C06 ${mainBranch} \u5408\u5E76\u5230 ${targetBranch} ...`
|
|
920
|
+
},
|
|
281
921
|
/** sync 成功 */
|
|
282
|
-
SYNC_SUCCESS:
|
|
922
|
+
SYNC_SUCCESS: {
|
|
923
|
+
en: (targetBranch, mainBranch) => `\u2713 Synced latest code from ${mainBranch} to ${targetBranch}`,
|
|
924
|
+
"zh-CN": (targetBranch, mainBranch) => `\u2713 \u5DF2\u5C06 ${mainBranch} \u7684\u6700\u65B0\u4EE3\u7801\u540C\u6B65\u5230 ${targetBranch}`
|
|
925
|
+
},
|
|
283
926
|
/** sync 冲突 */
|
|
284
|
-
SYNC_CONFLICT:
|
|
927
|
+
SYNC_CONFLICT: {
|
|
928
|
+
en: (worktreePath) => `Merge conflicts detected. Please resolve them in the target worktree:
|
|
929
|
+
cd ${worktreePath}
|
|
930
|
+
After resolving conflicts, run: git add . && git merge --continue
|
|
931
|
+
Then validate changes with: clawt validate -b <branch>`,
|
|
932
|
+
"zh-CN": (worktreePath) => `\u5408\u5E76\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u8FDB\u5165\u76EE\u6807 worktree \u624B\u52A8\u89E3\u51B3\uFF1A
|
|
285
933
|
cd ${worktreePath}
|
|
286
934
|
\u89E3\u51B3\u51B2\u7A81\u540E\u6267\u884C git add . && git merge --continue
|
|
287
|
-
clawt validate -b <branch> \u9A8C\u8BC1\u53D8\u66F4
|
|
935
|
+
clawt validate -b <branch> \u9A8C\u8BC1\u53D8\u66F4`
|
|
936
|
+
},
|
|
288
937
|
/** sync 无可用 worktree */
|
|
289
|
-
SYNC_NO_WORKTREES:
|
|
938
|
+
SYNC_NO_WORKTREES: {
|
|
939
|
+
en: "No worktrees available. Please create one with: clawt run or clawt create",
|
|
940
|
+
"zh-CN": "\u5F53\u524D\u9879\u76EE\u6CA1\u6709\u53EF\u7528\u7684 worktree\uFF0C\u8BF7\u5148\u901A\u8FC7 clawt run \u6216 clawt create \u521B\u5EFA"
|
|
941
|
+
},
|
|
290
942
|
/** sync 模糊匹配无结果,列出可用分支 */
|
|
291
|
-
SYNC_NO_MATCH:
|
|
292
|
-
|
|
943
|
+
SYNC_NO_MATCH: {
|
|
944
|
+
en: (name, branches) => `No branches matching "${name}"
|
|
945
|
+
Available branches:
|
|
293
946
|
${branches.map((b) => ` - ${b}`).join("\n")}`,
|
|
947
|
+
"zh-CN": (name, branches) => `\u672A\u627E\u5230\u4E0E "${name}" \u5339\u914D\u7684\u5206\u652F
|
|
948
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
949
|
+
${branches.map((b) => ` - ${b}`).join("\n")}`
|
|
950
|
+
},
|
|
294
951
|
/** sync 交互选择提示 */
|
|
295
|
-
SYNC_SELECT_BRANCH:
|
|
952
|
+
SYNC_SELECT_BRANCH: {
|
|
953
|
+
en: "Select branches to sync",
|
|
954
|
+
"zh-CN": "\u8BF7\u9009\u62E9\u8981\u540C\u6B65\u7684\u5206\u652F"
|
|
955
|
+
},
|
|
296
956
|
/** sync 模糊匹配到多个结果提示 */
|
|
297
|
-
SYNC_MULTIPLE_MATCHES:
|
|
957
|
+
SYNC_MULTIPLE_MATCHES: {
|
|
958
|
+
en: (name) => `"${name}" matched multiple branches, please select:`,
|
|
959
|
+
"zh-CN": (name) => `"${name}" \u5339\u914D\u5230\u591A\u4E2A\u5206\u652F\uFF0C\u8BF7\u9009\u62E9\uFF1A`
|
|
960
|
+
},
|
|
298
961
|
/** sync 后验证分支已重建提示 */
|
|
299
|
-
SYNC_VALIDATE_BRANCH_REBUILT:
|
|
962
|
+
SYNC_VALIDATE_BRANCH_REBUILT: {
|
|
963
|
+
en: (validateBranch) => `Validation branch ${validateBranch} has been rebuilt`,
|
|
964
|
+
"zh-CN": (validateBranch) => `\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u5DF2\u91CD\u5EFA`
|
|
965
|
+
}
|
|
300
966
|
};
|
|
967
|
+
var SYNC_MESSAGES = createMessages(SYNC_MESSAGES_I18N);
|
|
301
968
|
|
|
302
969
|
// src/constants/messages/resume.ts
|
|
303
|
-
var
|
|
970
|
+
var RESUME_MESSAGES_I18N = {
|
|
304
971
|
/** resume 无可用 worktree */
|
|
305
|
-
RESUME_NO_WORKTREES:
|
|
972
|
+
RESUME_NO_WORKTREES: {
|
|
973
|
+
en: "No worktrees available, please create one with clawt run or clawt create first",
|
|
974
|
+
"zh-CN": "\u5F53\u524D\u9879\u76EE\u6CA1\u6709\u53EF\u7528\u7684 worktree\uFF0C\u8BF7\u5148\u901A\u8FC7 clawt run \u6216 clawt create \u521B\u5EFA"
|
|
975
|
+
},
|
|
306
976
|
/** resume 模糊匹配无结果,列出可用分支 */
|
|
307
|
-
RESUME_NO_MATCH:
|
|
308
|
-
|
|
977
|
+
RESUME_NO_MATCH: {
|
|
978
|
+
en: (name, branches) => `No branch matching "${name}"
|
|
979
|
+
Available branches:
|
|
309
980
|
${branches.map((b) => ` - ${b}`).join("\n")}`,
|
|
981
|
+
"zh-CN": (name, branches) => `\u672A\u627E\u5230\u4E0E "${name}" \u5339\u914D\u7684\u5206\u652F
|
|
982
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
983
|
+
${branches.map((b) => ` - ${b}`).join("\n")}`
|
|
984
|
+
},
|
|
310
985
|
/** resume 多选交互提示 */
|
|
311
|
-
RESUME_SELECT_BRANCH:
|
|
986
|
+
RESUME_SELECT_BRANCH: {
|
|
987
|
+
en: "Select branches to resume (space to select, enter to confirm)",
|
|
988
|
+
"zh-CN": "\u8BF7\u9009\u62E9\u8981\u6062\u590D\u7684\u5206\u652F\uFF08\u7A7A\u683C\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09"
|
|
989
|
+
},
|
|
312
990
|
/** resume 模糊匹配到多个结果的多选提示 */
|
|
313
|
-
RESUME_MULTIPLE_MATCHES:
|
|
991
|
+
RESUME_MULTIPLE_MATCHES: {
|
|
992
|
+
en: (keyword) => `"${keyword}" matched multiple branches, please select which to resume:`,
|
|
993
|
+
"zh-CN": (keyword) => `"${keyword}" \u5339\u914D\u5230\u591A\u4E2A\u5206\u652F\uFF0C\u8BF7\u9009\u62E9\u8981\u6062\u590D\u7684\uFF1A`
|
|
994
|
+
},
|
|
314
995
|
/** 批量 resume 确认提示 */
|
|
315
|
-
RESUME_ALL_CONFIRM:
|
|
996
|
+
RESUME_ALL_CONFIRM: {
|
|
997
|
+
en: (count) => `About to resume Claude Code sessions in ${count} terminal tabs, continue?`,
|
|
998
|
+
"zh-CN": (count) => `\u5373\u5C06\u5728 ${count} \u4E2A\u72EC\u7ACB\u7EC8\u7AEF Tab \u4E2D\u6062\u590D Claude Code \u4F1A\u8BDD\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F`
|
|
999
|
+
},
|
|
316
1000
|
/** 批量 resume 完成提示 */
|
|
317
|
-
RESUME_ALL_SUCCESS:
|
|
1001
|
+
RESUME_ALL_SUCCESS: {
|
|
1002
|
+
en: (count) => `Claude Code sessions started in ${count} terminal tabs`,
|
|
1003
|
+
"zh-CN": (count) => `\u5DF2\u5728 ${count} \u4E2A\u7EC8\u7AEF Tab \u4E2D\u542F\u52A8 Claude Code \u4F1A\u8BDD`
|
|
1004
|
+
},
|
|
318
1005
|
/** 批量 resume 非 macOS 平台提示 */
|
|
319
|
-
RESUME_ALL_PLATFORM_UNSUPPORTED:
|
|
1006
|
+
RESUME_ALL_PLATFORM_UNSUPPORTED: {
|
|
1007
|
+
en: "Batch resume is only supported on macOS (via AppleScript to open terminal tabs)",
|
|
1008
|
+
"zh-CN": "\u6279\u91CF resume \u76EE\u524D\u4EC5\u652F\u6301 macOS \u5E73\u53F0\uFF08\u901A\u8FC7 AppleScript \u6253\u5F00\u7EC8\u7AEF Tab\uFF09"
|
|
1009
|
+
},
|
|
320
1010
|
/** 批量 resume 无匹配分支提示 */
|
|
321
|
-
RESUME_ALL_NO_MATCH:
|
|
1011
|
+
RESUME_ALL_NO_MATCH: {
|
|
1012
|
+
en: (keyword) => `No branch matching "${keyword}"`,
|
|
1013
|
+
"zh-CN": (keyword) => `\u672A\u627E\u5230\u4E0E "${keyword}" \u5339\u914D\u7684\u5206\u652F`
|
|
1014
|
+
},
|
|
322
1015
|
/** --prompt 必须配合 -b 指定目标分支 */
|
|
323
|
-
RESUME_PROMPT_REQUIRES_BRANCH:
|
|
1016
|
+
RESUME_PROMPT_REQUIRES_BRANCH: {
|
|
1017
|
+
en: "--prompt requires -b to specify the target branch",
|
|
1018
|
+
"zh-CN": "--prompt \u5FC5\u987B\u914D\u5408 -b \u6307\u5B9A\u76EE\u6807\u5206\u652F"
|
|
1019
|
+
},
|
|
324
1020
|
/** --prompt 和 -f 不能同时使用 */
|
|
325
|
-
RESUME_PROMPT_FILE_CONFLICT:
|
|
1021
|
+
RESUME_PROMPT_FILE_CONFLICT: {
|
|
1022
|
+
en: "--prompt and -f cannot be used together",
|
|
1023
|
+
"zh-CN": "--prompt \u548C -f \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528"
|
|
1024
|
+
},
|
|
326
1025
|
/** 未找到对应 worktree */
|
|
327
|
-
RESUME_WORKTREE_NOT_FOUND:
|
|
328
|
-
|
|
1026
|
+
RESUME_WORKTREE_NOT_FOUND: {
|
|
1027
|
+
en: (branch, available) => `No worktree found for branch "${branch}"
|
|
1028
|
+
Available branches:
|
|
329
1029
|
${available.map((b) => ` - ${b}`).join("\n")}`,
|
|
1030
|
+
"zh-CN": (branch, available) => `\u672A\u627E\u5230\u5206\u652F "${branch}" \u5BF9\u5E94\u7684 worktree
|
|
1031
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
1032
|
+
${available.map((b) => ` - ${b}`).join("\n")}`
|
|
1033
|
+
},
|
|
330
1034
|
/** 追问文件加载完成 */
|
|
331
|
-
RESUME_FOLLOW_UP_FILE_LOADED:
|
|
1035
|
+
RESUME_FOLLOW_UP_FILE_LOADED: {
|
|
1036
|
+
en: (count, path) => `Loaded ${count} follow-up task(s) from ${path}`,
|
|
1037
|
+
"zh-CN": (count, path) => `\u4ECE ${path} \u52A0\u8F7D\u4E86 ${count} \u4E2A\u8FFD\u95EE\u4EFB\u52A1`
|
|
1038
|
+
},
|
|
1039
|
+
// --- 从 terminal.ts 迁移 ---
|
|
1040
|
+
/** 当前不在 cmux 环境中 */
|
|
1041
|
+
NOT_IN_CMUX: {
|
|
1042
|
+
en: "Not currently in a cmux environment, cannot create surface\nPlease run clawt resume from a cmux terminal, or change the terminalApp config",
|
|
1043
|
+
"zh-CN": "\u5F53\u524D\u4E0D\u5728 cmux \u73AF\u5883\u4E2D\uFF0C\u65E0\u6CD5\u521B\u5EFA surface\n\u8BF7\u786E\u4FDD\u5728 cmux \u7EC8\u7AEF\u4E2D\u6267\u884C clawt resume \u547D\u4EE4\uFF0C\u6216\u4FEE\u6539 terminalApp \u914D\u7F6E"
|
|
1044
|
+
},
|
|
1045
|
+
/** Terminal.app 辅助功能权限提示 */
|
|
1046
|
+
TERMINAL_ACCESSIBILITY_HINT: {
|
|
1047
|
+
en: "\nHint: Terminal.app requires Accessibility permission. Grant it in System Settings \u2192 Privacy & Security \u2192 Accessibility",
|
|
1048
|
+
"zh-CN": "\n\u63D0\u793A\uFF1ATerminal.app \u9700\u8981\u8F85\u52A9\u529F\u80FD\u6743\u9650\uFF0C\u8BF7\u5728\u300C\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168\u6027 \u2192 \u8F85\u52A9\u529F\u80FD\u300D\u4E2D\u6388\u6743\u7EC8\u7AEF\u5E94\u7528"
|
|
1049
|
+
},
|
|
1050
|
+
/** 批量 resume 仅支持 macOS */
|
|
1051
|
+
BATCH_RESUME_MACOS_ONLY: {
|
|
1052
|
+
en: "Batch resume is only supported on macOS",
|
|
1053
|
+
"zh-CN": "\u6279\u91CF resume \u76EE\u524D\u4EC5\u652F\u6301 macOS \u5E73\u53F0"
|
|
1054
|
+
},
|
|
1055
|
+
// --- 从 claude.ts 迁移 ---
|
|
1056
|
+
/** 正在 worktree 中启动 Claude Code 交互式界面 */
|
|
1057
|
+
STARTING_CLAUDE_INTERACTIVE: {
|
|
1058
|
+
en: "Starting Claude Code interactive session in worktree...",
|
|
1059
|
+
"zh-CN": "\u6B63\u5728 worktree \u4E2D\u542F\u52A8 Claude Code \u4EA4\u4E92\u5F0F\u754C\u9762..."
|
|
1060
|
+
},
|
|
1061
|
+
/** 分支标签 */
|
|
1062
|
+
BRANCH_LABEL: {
|
|
1063
|
+
en: "Branch:",
|
|
1064
|
+
"zh-CN": "\u5206\u652F:"
|
|
1065
|
+
},
|
|
1066
|
+
/** 路径标签(resume 专用,与 run 中的 PATH_LABEL 区分) */
|
|
1067
|
+
PATH_LABEL_RESUME: {
|
|
1068
|
+
en: "Path:",
|
|
1069
|
+
"zh-CN": "\u8DEF\u5F84:"
|
|
1070
|
+
},
|
|
1071
|
+
/** 指令标签 */
|
|
1072
|
+
COMMAND_LABEL: {
|
|
1073
|
+
en: "Command:",
|
|
1074
|
+
"zh-CN": "\u6307\u4EE4:"
|
|
1075
|
+
},
|
|
1076
|
+
/** 模式标签 */
|
|
1077
|
+
MODE_LABEL: {
|
|
1078
|
+
en: "Mode:",
|
|
1079
|
+
"zh-CN": "\u6A21\u5F0F:"
|
|
1080
|
+
},
|
|
1081
|
+
/** 继续上次对话 */
|
|
1082
|
+
CONTINUE_SESSION: {
|
|
1083
|
+
en: "Continue previous session",
|
|
1084
|
+
"zh-CN": "\u7EE7\u7EED\u4E0A\u6B21\u5BF9\u8BDD"
|
|
1085
|
+
},
|
|
1086
|
+
/** 新对话 */
|
|
1087
|
+
NEW_SESSION: {
|
|
1088
|
+
en: "New session",
|
|
1089
|
+
"zh-CN": "\u65B0\u5BF9\u8BDD"
|
|
1090
|
+
},
|
|
1091
|
+
/** 启动 Claude Code 失败 */
|
|
1092
|
+
CLAUDE_START_FAILED: {
|
|
1093
|
+
en: (message) => `Failed to start Claude Code: ${message}`,
|
|
1094
|
+
"zh-CN": (message) => `\u542F\u52A8 Claude Code \u5931\u8D25: ${message}`
|
|
1095
|
+
}
|
|
332
1096
|
};
|
|
1097
|
+
var RESUME_MESSAGES = createMessages(RESUME_MESSAGES_I18N);
|
|
333
1098
|
|
|
334
1099
|
// src/constants/messages/remove.ts
|
|
335
|
-
var
|
|
1100
|
+
var REMOVE_MESSAGES_I18N = {
|
|
336
1101
|
/** remove 无可用 worktree */
|
|
337
|
-
REMOVE_NO_WORKTREES:
|
|
1102
|
+
REMOVE_NO_WORKTREES: {
|
|
1103
|
+
en: "No worktrees available, nothing to remove",
|
|
1104
|
+
"zh-CN": "\u5F53\u524D\u9879\u76EE\u6CA1\u6709\u53EF\u7528\u7684 worktree\uFF0C\u65E0\u9700\u79FB\u9664"
|
|
1105
|
+
},
|
|
338
1106
|
/** remove 多选交互提示 */
|
|
339
|
-
REMOVE_SELECT_BRANCH:
|
|
1107
|
+
REMOVE_SELECT_BRANCH: {
|
|
1108
|
+
en: "Select branches to remove (space to select, enter to confirm)",
|
|
1109
|
+
"zh-CN": "\u8BF7\u9009\u62E9\u8981\u79FB\u9664\u7684\u5206\u652F\uFF08\u7A7A\u683C\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09"
|
|
1110
|
+
},
|
|
340
1111
|
/** remove 模糊匹配到多个结果提示 */
|
|
341
|
-
REMOVE_MULTIPLE_MATCHES:
|
|
1112
|
+
REMOVE_MULTIPLE_MATCHES: {
|
|
1113
|
+
en: (name) => `"${name}" matched multiple branches, please select which to remove (space to select, enter to confirm):`,
|
|
1114
|
+
"zh-CN": (name) => `"${name}" \u5339\u914D\u5230\u591A\u4E2A\u5206\u652F\uFF0C\u8BF7\u9009\u62E9\u8981\u79FB\u9664\u7684\uFF08\u7A7A\u683C\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\uFF1A`
|
|
1115
|
+
},
|
|
342
1116
|
/** remove 模糊匹配无结果,列出可用分支 */
|
|
343
|
-
REMOVE_NO_MATCH:
|
|
344
|
-
|
|
1117
|
+
REMOVE_NO_MATCH: {
|
|
1118
|
+
en: (name, branches) => `No branches matching "${name}"
|
|
1119
|
+
Available branches:
|
|
345
1120
|
${branches.map((b) => ` - ${b}`).join("\n")}`,
|
|
1121
|
+
"zh-CN": (name, branches) => `\u672A\u627E\u5230\u4E0E "${name}" \u5339\u914D\u7684\u5206\u652F
|
|
1122
|
+
\u53EF\u7528\u5206\u652F\uFF1A
|
|
1123
|
+
${branches.map((b) => ` - ${b}`).join("\n")}`
|
|
1124
|
+
},
|
|
346
1125
|
/** 批量移除部分失败 */
|
|
347
|
-
REMOVE_PARTIAL_FAILURE:
|
|
1126
|
+
REMOVE_PARTIAL_FAILURE: {
|
|
1127
|
+
en: (failures) => `Failed to remove the following worktrees:
|
|
348
1128
|
${failures.map((f) => ` \u2717 ${f.path}: ${f.error}`).join("\n")}`,
|
|
1129
|
+
"zh-CN": (failures) => `\u4EE5\u4E0B worktree \u79FB\u9664\u5931\u8D25\uFF1A
|
|
1130
|
+
${failures.map((f) => ` \u2717 ${f.path}: ${f.error}`).join("\n")}`
|
|
1131
|
+
},
|
|
349
1132
|
/** 用户选择保留本地分支 */
|
|
350
|
-
REMOVE_BRANCHES_KEPT:
|
|
1133
|
+
REMOVE_BRANCHES_KEPT: {
|
|
1134
|
+
en: "Local branches kept. You can manually delete them later with: git branch -D <branch-name>",
|
|
1135
|
+
"zh-CN": "\u5DF2\u4FDD\u7559\u672C\u5730\u5206\u652F\uFF0C\u53EF\u7A0D\u540E\u4F7F\u7528 git branch -D <\u5206\u652F\u540D> \u624B\u52A8\u5220\u9664"
|
|
1136
|
+
},
|
|
351
1137
|
/** 确认删除本地分支和验证分支 */
|
|
352
|
-
REMOVE_CONFIRM_DELETE_BRANCHES:
|
|
1138
|
+
REMOVE_CONFIRM_DELETE_BRANCHES: {
|
|
1139
|
+
en: "Also delete the associated local and validation branches?",
|
|
1140
|
+
"zh-CN": "\u662F\u5426\u540C\u65F6\u5220\u9664\u5BF9\u5E94\u7684\u672C\u5730\u5206\u652F\u548C\u9A8C\u8BC1\u5206\u652F\uFF1F"
|
|
1141
|
+
},
|
|
353
1142
|
/** 待移除的 worktree 的分支是主 worktree 当前所在分支 */
|
|
354
|
-
REMOVE_BRANCH_IS_CURRENT:
|
|
1143
|
+
REMOVE_BRANCH_IS_CURRENT: {
|
|
1144
|
+
en: (branch) => `Cannot remove: branch ${branch} is the current branch of the main worktree. Please switch to another branch first`,
|
|
1145
|
+
"zh-CN": (branch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`
|
|
1146
|
+
},
|
|
355
1147
|
/** 待移除的 worktree 对应的验证分支是主 worktree 当前所在分支 */
|
|
356
|
-
REMOVE_VALIDATE_BRANCH_IS_CURRENT:
|
|
1148
|
+
REMOVE_VALIDATE_BRANCH_IS_CURRENT: {
|
|
1149
|
+
en: (branch, validateBranch) => `Cannot remove: the validation branch ${validateBranch} of branch ${branch} is the current branch of the main worktree. Please switch to another branch first`,
|
|
1150
|
+
"zh-CN": (branch, validateBranch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u7684\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`
|
|
1151
|
+
}
|
|
357
1152
|
};
|
|
1153
|
+
var REMOVE_MESSAGES = createMessages(REMOVE_MESSAGES_I18N);
|
|
358
1154
|
|
|
359
1155
|
// src/constants/messages/reset.ts
|
|
360
|
-
var
|
|
1156
|
+
var RESET_MESSAGES_I18N = {
|
|
361
1157
|
/** reset 成功 */
|
|
362
|
-
RESET_SUCCESS:
|
|
1158
|
+
RESET_SUCCESS: {
|
|
1159
|
+
en: "\u2713 Main worktree working directory and staging area have been reset",
|
|
1160
|
+
"zh-CN": "\u2713 \u4E3B worktree \u5DE5\u4F5C\u533A\u548C\u6682\u5B58\u533A\u5DF2\u91CD\u7F6E"
|
|
1161
|
+
},
|
|
363
1162
|
/** reset 时工作区和暂存区已干净 */
|
|
364
|
-
RESET_ALREADY_CLEAN:
|
|
1163
|
+
RESET_ALREADY_CLEAN: {
|
|
1164
|
+
en: "Main worktree working directory and staging area are already clean, no reset needed",
|
|
1165
|
+
"zh-CN": "\u4E3B worktree \u5DE5\u4F5C\u533A\u548C\u6682\u5B58\u533A\u5DF2\u662F\u5E72\u51C0\u72B6\u6001\uFF0C\u65E0\u9700\u91CD\u7F6E"
|
|
1166
|
+
}
|
|
365
1167
|
};
|
|
1168
|
+
var RESET_MESSAGES = createMessages(RESET_MESSAGES_I18N);
|
|
366
1169
|
|
|
367
1170
|
// src/constants/messages/config.ts
|
|
368
|
-
var
|
|
1171
|
+
var CONFIG_ALIAS_DISABLED_HINT_I18N = {
|
|
1172
|
+
en: "(Manage via clawt alias command)",
|
|
1173
|
+
"zh-CN": "(\u901A\u8FC7 clawt alias \u547D\u4EE4\u7BA1\u7406)"
|
|
1174
|
+
};
|
|
1175
|
+
var CONFIG_ALIAS_DISABLED_HINT = createMessages({ HINT: CONFIG_ALIAS_DISABLED_HINT_I18N }).HINT;
|
|
1176
|
+
var CONFIG_CMD_MESSAGES_I18N = {
|
|
369
1177
|
/** 配置已恢复为默认值 */
|
|
370
|
-
CONFIG_RESET_SUCCESS:
|
|
1178
|
+
CONFIG_RESET_SUCCESS: {
|
|
1179
|
+
en: "\u2713 Configuration reset to defaults",
|
|
1180
|
+
"zh-CN": "\u2713 \u914D\u7F6E\u5DF2\u6062\u590D\u4E3A\u9ED8\u8BA4\u503C"
|
|
1181
|
+
},
|
|
371
1182
|
/** 配置项设置成功 */
|
|
372
|
-
CONFIG_SET_SUCCESS:
|
|
1183
|
+
CONFIG_SET_SUCCESS: {
|
|
1184
|
+
en: (key, value) => `\u2713 ${key} set to ${value}`,
|
|
1185
|
+
"zh-CN": (key, value) => `\u2713 ${key} \u5DF2\u8BBE\u7F6E\u4E3A ${value}`
|
|
1186
|
+
},
|
|
373
1187
|
/** 获取配置值显示 */
|
|
374
|
-
CONFIG_GET_VALUE:
|
|
1188
|
+
CONFIG_GET_VALUE: {
|
|
1189
|
+
en: (key, value) => `${key} = ${value}`,
|
|
1190
|
+
"zh-CN": (key, value) => `${key} = ${value}`
|
|
1191
|
+
},
|
|
375
1192
|
/** 无效配置项名称 */
|
|
376
|
-
CONFIG_INVALID_KEY:
|
|
377
|
-
|
|
1193
|
+
CONFIG_INVALID_KEY: {
|
|
1194
|
+
en: (key, validKeys) => `Invalid config key: ${key}
|
|
1195
|
+
Available keys: ${validKeys.join(", ")}`,
|
|
1196
|
+
"zh-CN": (key, validKeys) => `\u65E0\u6548\u7684\u914D\u7F6E\u9879: ${key}
|
|
1197
|
+
\u53EF\u7528\u7684\u914D\u7F6E\u9879: ${validKeys.join(", ")}`
|
|
1198
|
+
},
|
|
378
1199
|
/** 布尔类型值无效 */
|
|
379
|
-
CONFIG_INVALID_BOOLEAN:
|
|
1200
|
+
CONFIG_INVALID_BOOLEAN: {
|
|
1201
|
+
en: (key) => `Config key ${key} is boolean, only accepts true or false`,
|
|
1202
|
+
"zh-CN": (key) => `\u914D\u7F6E\u9879 ${key} \u4E3A\u5E03\u5C14\u7C7B\u578B\uFF0C\u4EC5\u63A5\u53D7 true \u6216 false`
|
|
1203
|
+
},
|
|
380
1204
|
/** 数字类型值无效 */
|
|
381
|
-
CONFIG_INVALID_NUMBER:
|
|
1205
|
+
CONFIG_INVALID_NUMBER: {
|
|
1206
|
+
en: (key) => `Config key ${key} is numeric, please enter a valid number`,
|
|
1207
|
+
"zh-CN": (key) => `\u914D\u7F6E\u9879 ${key} \u4E3A\u6570\u5B57\u7C7B\u578B\uFF0C\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57`
|
|
1208
|
+
},
|
|
382
1209
|
/** 枚举类型配置项值无效(通用版) */
|
|
383
|
-
CONFIG_INVALID_ENUM:
|
|
1210
|
+
CONFIG_INVALID_ENUM: {
|
|
1211
|
+
en: (key, validValues) => `Config key ${key} only accepts: ${validValues.join(", ")}`,
|
|
1212
|
+
"zh-CN": (key, validValues) => `\u914D\u7F6E\u9879 ${key} \u4EC5\u63A5\u53D7\u4EE5\u4E0B\u503C: ${validValues.join(", ")}`
|
|
1213
|
+
},
|
|
384
1214
|
/** 交互式选择配置项提示 */
|
|
385
|
-
CONFIG_SELECT_PROMPT:
|
|
1215
|
+
CONFIG_SELECT_PROMPT: {
|
|
1216
|
+
en: "Select a config key to modify",
|
|
1217
|
+
"zh-CN": "\u9009\u62E9\u8981\u4FEE\u6539\u7684\u914D\u7F6E\u9879"
|
|
1218
|
+
},
|
|
386
1219
|
/** 交互式输入新值提示 */
|
|
387
|
-
CONFIG_INPUT_PROMPT:
|
|
1220
|
+
CONFIG_INPUT_PROMPT: {
|
|
1221
|
+
en: (key) => `Enter new value for ${key}`,
|
|
1222
|
+
"zh-CN": (key) => `\u8F93\u5165 ${key} \u7684\u65B0\u503C`
|
|
1223
|
+
},
|
|
388
1224
|
/** 缺少 value 参数提示 */
|
|
389
|
-
CONFIG_MISSING_VALUE:
|
|
1225
|
+
CONFIG_MISSING_VALUE: {
|
|
1226
|
+
en: (key) => `Missing value, usage: clawt config set ${key} <value>`,
|
|
1227
|
+
"zh-CN": (key) => `\u7F3A\u5C11\u914D\u7F6E\u503C\uFF0C\u7528\u6CD5: clawt config set ${key} <value>`
|
|
1228
|
+
}
|
|
390
1229
|
};
|
|
1230
|
+
var CONFIG_CMD_MESSAGES = createMessages(CONFIG_CMD_MESSAGES_I18N);
|
|
391
1231
|
|
|
392
1232
|
// src/constants/messages/status.ts
|
|
393
|
-
var
|
|
1233
|
+
var STATUS_MESSAGES_I18N = {
|
|
394
1234
|
/** status 命令标题 */
|
|
395
|
-
STATUS_TITLE:
|
|
1235
|
+
STATUS_TITLE: {
|
|
1236
|
+
en: (projectName) => `Project Status Overview: ${projectName}`,
|
|
1237
|
+
"zh-CN": (projectName) => `\u9879\u76EE\u72B6\u6001\u603B\u89C8: ${projectName}`
|
|
1238
|
+
},
|
|
396
1239
|
/** status 主 worktree 区块标题 */
|
|
397
|
-
STATUS_MAIN_SECTION:
|
|
1240
|
+
STATUS_MAIN_SECTION: {
|
|
1241
|
+
en: "Main Worktree",
|
|
1242
|
+
"zh-CN": "\u4E3B Worktree"
|
|
1243
|
+
},
|
|
398
1244
|
/** status worktrees 区块标题 */
|
|
399
|
-
STATUS_WORKTREES_SECTION:
|
|
1245
|
+
STATUS_WORKTREES_SECTION: {
|
|
1246
|
+
en: "Worktrees",
|
|
1247
|
+
"zh-CN": "Worktree \u5217\u8868"
|
|
1248
|
+
},
|
|
400
1249
|
/** status 快照区块标题 */
|
|
401
|
-
STATUS_SNAPSHOTS_SECTION:
|
|
1250
|
+
STATUS_SNAPSHOTS_SECTION: {
|
|
1251
|
+
en: "Validate Snapshots",
|
|
1252
|
+
"zh-CN": "Validate \u5FEB\u7167"
|
|
1253
|
+
},
|
|
402
1254
|
/** status 无 worktree */
|
|
403
|
-
STATUS_NO_WORKTREES:
|
|
1255
|
+
STATUS_NO_WORKTREES: {
|
|
1256
|
+
en: "(No active worktrees)",
|
|
1257
|
+
"zh-CN": "(\u65E0\u6D3B\u8DC3 worktree)"
|
|
1258
|
+
},
|
|
404
1259
|
/** status 无未清理快照 */
|
|
405
|
-
STATUS_NO_SNAPSHOTS:
|
|
1260
|
+
STATUS_NO_SNAPSHOTS: {
|
|
1261
|
+
en: "(No pending snapshots)",
|
|
1262
|
+
"zh-CN": "(\u65E0\u672A\u6E05\u7406\u7684\u5FEB\u7167)"
|
|
1263
|
+
},
|
|
406
1264
|
/** status 变更状态:已提交 */
|
|
407
|
-
STATUS_CHANGE_COMMITTED:
|
|
1265
|
+
STATUS_CHANGE_COMMITTED: {
|
|
1266
|
+
en: "Committed",
|
|
1267
|
+
"zh-CN": "\u5DF2\u63D0\u4EA4"
|
|
1268
|
+
},
|
|
408
1269
|
/** status 变更状态:未提交修改 */
|
|
409
|
-
STATUS_CHANGE_UNCOMMITTED:
|
|
1270
|
+
STATUS_CHANGE_UNCOMMITTED: {
|
|
1271
|
+
en: "Uncommitted changes",
|
|
1272
|
+
"zh-CN": "\u672A\u63D0\u4EA4\u4FEE\u6539"
|
|
1273
|
+
},
|
|
410
1274
|
/** status 变更状态:合并冲突 */
|
|
411
|
-
STATUS_CHANGE_CONFLICT:
|
|
1275
|
+
STATUS_CHANGE_CONFLICT: {
|
|
1276
|
+
en: "Merge conflict",
|
|
1277
|
+
"zh-CN": "\u5408\u5E76\u51B2\u7A81"
|
|
1278
|
+
},
|
|
412
1279
|
/** status 变更状态:无变更 */
|
|
413
|
-
STATUS_CHANGE_CLEAN:
|
|
1280
|
+
STATUS_CHANGE_CLEAN: {
|
|
1281
|
+
en: "No changes",
|
|
1282
|
+
"zh-CN": "\u65E0\u53D8\u66F4"
|
|
1283
|
+
},
|
|
414
1284
|
/** status 快照对应 worktree 已不存在 */
|
|
415
|
-
STATUS_SNAPSHOT_ORPHANED:
|
|
1285
|
+
STATUS_SNAPSHOT_ORPHANED: {
|
|
1286
|
+
en: (count) => `${count} snapshot(s) reference worktrees that no longer exist`,
|
|
1287
|
+
"zh-CN": (count) => `\u5176\u4E2D ${count} \u4E2A\u5FEB\u7167\u5BF9\u5E94\u7684 worktree \u5DF2\u4E0D\u5B58\u5728`
|
|
1288
|
+
},
|
|
416
1289
|
/** status 分支创建时间标签 */
|
|
417
|
-
STATUS_CREATED_AT:
|
|
1290
|
+
STATUS_CREATED_AT: {
|
|
1291
|
+
en: (relativeTime) => `Created ${relativeTime}`,
|
|
1292
|
+
"zh-CN": (relativeTime) => `\u521B\u5EFA\u4E8E ${relativeTime}`
|
|
1293
|
+
},
|
|
418
1294
|
/** status 分支无分叉提交时的提示 */
|
|
419
|
-
STATUS_NO_DIVERGED_COMMITS:
|
|
1295
|
+
STATUS_NO_DIVERGED_COMMITS: {
|
|
1296
|
+
en: "No diverged commits yet",
|
|
1297
|
+
"zh-CN": "\u5C1A\u65E0\u5206\u53C9\u63D0\u4EA4"
|
|
1298
|
+
},
|
|
420
1299
|
/** status 上次验证时间标签 */
|
|
421
|
-
STATUS_LAST_VALIDATED:
|
|
1300
|
+
STATUS_LAST_VALIDATED: {
|
|
1301
|
+
en: (relativeTime) => `Last validated: ${relativeTime}`,
|
|
1302
|
+
"zh-CN": (relativeTime) => `\u4E0A\u6B21\u9A8C\u8BC1: ${relativeTime}`
|
|
1303
|
+
},
|
|
422
1304
|
/** status 未验证警示 */
|
|
423
|
-
STATUS_NOT_VALIDATED:
|
|
1305
|
+
STATUS_NOT_VALIDATED: {
|
|
1306
|
+
en: "\u2717 Not validated",
|
|
1307
|
+
"zh-CN": "\u2717 \u672A\u9A8C\u8BC1"
|
|
1308
|
+
},
|
|
424
1309
|
/** status 配置的主工作分支(正常状态) */
|
|
425
|
-
STATUS_CONFIGURED_BRANCH:
|
|
1310
|
+
STATUS_CONFIGURED_BRANCH: {
|
|
1311
|
+
en: (branchName) => `Main work branch: ${branchName}`,
|
|
1312
|
+
"zh-CN": (branchName) => `\u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}`
|
|
1313
|
+
},
|
|
426
1314
|
/** status 配置的主工作分支已不存在 */
|
|
427
|
-
STATUS_CONFIGURED_BRANCH_DELETED:
|
|
1315
|
+
STATUS_CONFIGURED_BRANCH_DELETED: {
|
|
1316
|
+
en: (branchName) => `\u2717 Main work branch: ${branchName} (no longer exists, run clawt init to reset)`,
|
|
1317
|
+
"zh-CN": (branchName) => `\u2717 \u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}\uFF08\u5DF2\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6267\u884C clawt init \u91CD\u65B0\u8BBE\u7F6E\uFF09`
|
|
1318
|
+
},
|
|
428
1319
|
/** status 当前分支与配置的主工作分支不一致 */
|
|
429
|
-
STATUS_CONFIGURED_BRANCH_MISMATCH:
|
|
1320
|
+
STATUS_CONFIGURED_BRANCH_MISMATCH: {
|
|
1321
|
+
en: (branchName) => `\u26A0 Main work branch: ${branchName} (current branch mismatch, run clawt init to update)`,
|
|
1322
|
+
"zh-CN": (branchName) => `\u26A0 \u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}\uFF08\u5F53\u524D\u5206\u652F\u4E0D\u4E00\u81F4\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u6267\u884C clawt init\uFF09`
|
|
1323
|
+
}
|
|
430
1324
|
};
|
|
1325
|
+
var STATUS_MESSAGES = createMessages(STATUS_MESSAGES_I18N);
|
|
431
1326
|
|
|
432
1327
|
// src/constants/messages/alias.ts
|
|
433
|
-
var
|
|
1328
|
+
var ALIAS_MESSAGES_I18N = {
|
|
434
1329
|
/** 别名列表为空 */
|
|
435
|
-
ALIAS_LIST_EMPTY:
|
|
1330
|
+
ALIAS_LIST_EMPTY: {
|
|
1331
|
+
en: "(No aliases)",
|
|
1332
|
+
"zh-CN": "(\u65E0\u522B\u540D)"
|
|
1333
|
+
},
|
|
436
1334
|
/** 别名设置成功 */
|
|
437
|
-
ALIAS_SET_SUCCESS:
|
|
1335
|
+
ALIAS_SET_SUCCESS: {
|
|
1336
|
+
en: (alias, command) => `\u2713 Alias set: ${alias} \u2192 ${command}`,
|
|
1337
|
+
"zh-CN": (alias, command) => `\u2713 \u5DF2\u8BBE\u7F6E\u522B\u540D: ${alias} \u2192 ${command}`
|
|
1338
|
+
},
|
|
438
1339
|
/** 别名移除成功 */
|
|
439
|
-
ALIAS_REMOVE_SUCCESS:
|
|
1340
|
+
ALIAS_REMOVE_SUCCESS: {
|
|
1341
|
+
en: (alias) => `\u2713 Alias removed: ${alias}`,
|
|
1342
|
+
"zh-CN": (alias) => `\u2713 \u5DF2\u79FB\u9664\u522B\u540D: ${alias}`
|
|
1343
|
+
},
|
|
440
1344
|
/** 别名不存在 */
|
|
441
|
-
ALIAS_NOT_FOUND:
|
|
1345
|
+
ALIAS_NOT_FOUND: {
|
|
1346
|
+
en: (alias) => `Alias "${alias}" does not exist`,
|
|
1347
|
+
"zh-CN": (alias) => `\u522B\u540D "${alias}" \u4E0D\u5B58\u5728`
|
|
1348
|
+
},
|
|
442
1349
|
/** 别名与内置命令冲突 */
|
|
443
|
-
ALIAS_CONFLICTS_BUILTIN:
|
|
1350
|
+
ALIAS_CONFLICTS_BUILTIN: {
|
|
1351
|
+
en: (alias) => `Alias "${alias}" conflicts with a built-in command. Overriding built-in commands is not allowed`,
|
|
1352
|
+
"zh-CN": (alias) => `\u522B\u540D "${alias}" \u4E0E\u5185\u7F6E\u547D\u4EE4\u51B2\u7A81\uFF0C\u4E0D\u5141\u8BB8\u8986\u76D6\u5185\u7F6E\u547D\u4EE4`
|
|
1353
|
+
},
|
|
444
1354
|
/** 目标命令不存在 */
|
|
445
|
-
ALIAS_TARGET_NOT_FOUND:
|
|
1355
|
+
ALIAS_TARGET_NOT_FOUND: {
|
|
1356
|
+
en: (command) => `Target command "${command}" does not exist. Please specify a registered built-in command name`,
|
|
1357
|
+
"zh-CN": (command) => `\u76EE\u6807\u547D\u4EE4 "${command}" \u4E0D\u5B58\u5728\uFF0C\u8BF7\u6307\u5B9A\u5DF2\u6CE8\u518C\u7684\u5185\u7F6E\u547D\u4EE4\u540D`
|
|
1358
|
+
},
|
|
446
1359
|
/** 别名列表标题 */
|
|
447
|
-
ALIAS_LIST_TITLE:
|
|
1360
|
+
ALIAS_LIST_TITLE: {
|
|
1361
|
+
en: "Current aliases:",
|
|
1362
|
+
"zh-CN": "\u5F53\u524D\u522B\u540D\u5217\u8868\uFF1A"
|
|
1363
|
+
}
|
|
448
1364
|
};
|
|
1365
|
+
var ALIAS_MESSAGES = createMessages(ALIAS_MESSAGES_I18N);
|
|
449
1366
|
|
|
450
1367
|
// src/constants/messages/projects.ts
|
|
451
|
-
var
|
|
1368
|
+
var PROJECTS_MESSAGES_I18N = {
|
|
452
1369
|
/** projects 命令全局概览标题 */
|
|
453
|
-
PROJECTS_OVERVIEW_TITLE:
|
|
1370
|
+
PROJECTS_OVERVIEW_TITLE: {
|
|
1371
|
+
en: "Project Overview",
|
|
1372
|
+
"zh-CN": "\u9879\u76EE\u6982\u89C8"
|
|
1373
|
+
},
|
|
454
1374
|
/** projects 命令指定项目详情标题 */
|
|
455
|
-
PROJECTS_DETAIL_TITLE:
|
|
1375
|
+
PROJECTS_DETAIL_TITLE: {
|
|
1376
|
+
en: (projectName) => `Project Details: ${projectName}`,
|
|
1377
|
+
"zh-CN": (projectName) => `\u9879\u76EE\u8BE6\u60C5: ${projectName}`
|
|
1378
|
+
},
|
|
456
1379
|
/** 无项目提示 */
|
|
457
|
-
PROJECTS_NO_PROJECTS:
|
|
1380
|
+
PROJECTS_NO_PROJECTS: {
|
|
1381
|
+
en: "(No projects, worktrees directory is empty)",
|
|
1382
|
+
"zh-CN": "(\u6682\u65E0\u9879\u76EE\uFF0Cworktrees \u76EE\u5F55\u4E3A\u7A7A)"
|
|
1383
|
+
},
|
|
458
1384
|
/** 项目不存在提示 */
|
|
459
|
-
PROJECTS_NOT_FOUND:
|
|
1385
|
+
PROJECTS_NOT_FOUND: {
|
|
1386
|
+
en: (name) => `Project ${name} does not exist`,
|
|
1387
|
+
"zh-CN": (name) => `\u9879\u76EE ${name} \u4E0D\u5B58\u5728`
|
|
1388
|
+
},
|
|
460
1389
|
/** worktree 数量标签 */
|
|
461
|
-
PROJECTS_WORKTREE_COUNT:
|
|
1390
|
+
PROJECTS_WORKTREE_COUNT: {
|
|
1391
|
+
en: (count) => `${count} worktree(s)`,
|
|
1392
|
+
"zh-CN": (count) => `${count} \u4E2A worktree`
|
|
1393
|
+
},
|
|
462
1394
|
/** 最近活跃时间标签 */
|
|
463
|
-
PROJECTS_LAST_ACTIVE:
|
|
1395
|
+
PROJECTS_LAST_ACTIVE: {
|
|
1396
|
+
en: (relativeTime) => `Last active: ${relativeTime}`,
|
|
1397
|
+
"zh-CN": (relativeTime) => `\u6700\u8FD1\u6D3B\u8DC3: ${relativeTime}`
|
|
1398
|
+
},
|
|
464
1399
|
/** 磁盘占用标签 */
|
|
465
|
-
PROJECTS_DISK_USAGE:
|
|
1400
|
+
PROJECTS_DISK_USAGE: {
|
|
1401
|
+
en: (size) => `Disk usage: ${size}`,
|
|
1402
|
+
"zh-CN": (size) => `\u78C1\u76D8\u5360\u7528: ${size}`
|
|
1403
|
+
},
|
|
466
1404
|
/** 总磁盘占用标签 */
|
|
467
|
-
PROJECTS_TOTAL_DISK_USAGE:
|
|
1405
|
+
PROJECTS_TOTAL_DISK_USAGE: {
|
|
1406
|
+
en: (size) => `Total: ${size}`,
|
|
1407
|
+
"zh-CN": (size) => `\u603B\u5360\u7528: ${size}`
|
|
1408
|
+
},
|
|
468
1409
|
/** projects 详情无 worktree */
|
|
469
|
-
PROJECTS_DETAIL_NO_WORKTREES:
|
|
1410
|
+
PROJECTS_DETAIL_NO_WORKTREES: {
|
|
1411
|
+
en: "(No worktrees in this project)",
|
|
1412
|
+
"zh-CN": "(\u8BE5\u9879\u76EE\u4E0B\u65E0 worktree)"
|
|
1413
|
+
},
|
|
470
1414
|
/** 路径标签 */
|
|
471
|
-
PROJECTS_PATH:
|
|
1415
|
+
PROJECTS_PATH: {
|
|
1416
|
+
en: (path) => `Path: ${path}`,
|
|
1417
|
+
"zh-CN": (path) => `\u8DEF\u5F84: ${path}`
|
|
1418
|
+
},
|
|
472
1419
|
/** 最后修改时间标签 */
|
|
473
|
-
PROJECTS_LAST_MODIFIED:
|
|
1420
|
+
PROJECTS_LAST_MODIFIED: {
|
|
1421
|
+
en: (relativeTime) => `Last modified: ${relativeTime}`,
|
|
1422
|
+
"zh-CN": (relativeTime) => `\u6700\u540E\u4FEE\u6539: ${relativeTime}`
|
|
1423
|
+
}
|
|
474
1424
|
};
|
|
1425
|
+
var PROJECTS_MESSAGES = createMessages(PROJECTS_MESSAGES_I18N);
|
|
475
1426
|
|
|
476
1427
|
// src/constants/messages/completion.ts
|
|
477
|
-
var
|
|
1428
|
+
var COMPLETION_MESSAGES_I18N = {
|
|
478
1429
|
/** completion 命令的主描述 */
|
|
479
|
-
COMPLETION_COMMAND_DESC:
|
|
1430
|
+
COMPLETION_COMMAND_DESC: {
|
|
1431
|
+
en: "Provide shell auto-completion for terminal (bash/zsh)",
|
|
1432
|
+
"zh-CN": "\u4E3A\u7EC8\u7AEF\u63D0\u4F9B shell \u81EA\u52A8\u8865\u5168\u529F\u80FD\uFF08bash/zsh\uFF09"
|
|
1433
|
+
},
|
|
480
1434
|
/** bash 子命令描述 */
|
|
481
|
-
COMPLETION_BASH_DESC:
|
|
1435
|
+
COMPLETION_BASH_DESC: {
|
|
1436
|
+
en: "Output bash auto-completion script",
|
|
1437
|
+
"zh-CN": "\u8F93\u51FA bash \u81EA\u52A8\u8865\u5168\u811A\u672C"
|
|
1438
|
+
},
|
|
482
1439
|
/** zsh 子命令描述 */
|
|
483
|
-
COMPLETION_ZSH_DESC:
|
|
1440
|
+
COMPLETION_ZSH_DESC: {
|
|
1441
|
+
en: "Output zsh auto-completion script",
|
|
1442
|
+
"zh-CN": "\u8F93\u51FA zsh \u81EA\u52A8\u8865\u5168\u811A\u672C"
|
|
1443
|
+
},
|
|
484
1444
|
/** install 子命令描述 */
|
|
485
|
-
COMPLETION_INSTALL_DESC:
|
|
1445
|
+
COMPLETION_INSTALL_DESC: {
|
|
1446
|
+
en: "Auto-install completion script to current user shell config",
|
|
1447
|
+
"zh-CN": "\u81EA\u52A8\u5B89\u88C5\u8865\u5168\u811A\u672C\u5230\u5F53\u524D\u7528\u6237\u7684 shell \u914D\u7F6E\u6587\u4EF6"
|
|
1448
|
+
},
|
|
486
1449
|
/** 安装成功提示 */
|
|
487
|
-
COMPLETION_INSTALL_SUCCESS:
|
|
1450
|
+
COMPLETION_INSTALL_SUCCESS: {
|
|
1451
|
+
en: "Auto-completion config written successfully",
|
|
1452
|
+
"zh-CN": "\u81EA\u52A8\u8865\u5168\u914D\u7F6E\u5DF2\u6210\u529F\u5199\u5165"
|
|
1453
|
+
},
|
|
488
1454
|
/** 安装失败或未知的 shell 提示 */
|
|
489
|
-
COMPLETION_INSTALL_UNKNOWN_SHELL:
|
|
1455
|
+
COMPLETION_INSTALL_UNKNOWN_SHELL: {
|
|
1456
|
+
en: "Unknown shell or unable to auto-install. Please configure manually.",
|
|
1457
|
+
"zh-CN": "\u672A\u77E5\u7684 Shell \u73AF\u5883\u6216\u65E0\u6CD5\u81EA\u52A8\u5B89\u88C5\uFF0C\u8BF7\u624B\u52A8\u914D\u7F6E\u3002"
|
|
1458
|
+
},
|
|
490
1459
|
/** 补全配置已存在提示 */
|
|
491
|
-
COMPLETION_INSTALL_EXISTS:
|
|
1460
|
+
COMPLETION_INSTALL_EXISTS: {
|
|
1461
|
+
en: "Auto-completion config already exists in target file",
|
|
1462
|
+
"zh-CN": "\u81EA\u52A8\u8865\u5168\u914D\u7F6E\u5DF2\u5B58\u5728\u4E8E\u76EE\u6807\u6587\u4EF6\u4E2D"
|
|
1463
|
+
},
|
|
492
1464
|
/** 提示用户重启生效 */
|
|
493
|
-
COMPLETION_INSTALL_RESTART:
|
|
1465
|
+
COMPLETION_INSTALL_RESTART: {
|
|
1466
|
+
en: (filePath) => `Please restart your terminal or run \`source ${filePath}\` for completion to take effect.`,
|
|
1467
|
+
"zh-CN": (filePath) => `\u8BF7\u91CD\u542F\u7EC8\u7AEF\u6216\u8FD0\u884C \`source ${filePath}\` \u4EE5\u4F7F\u8865\u5168\u751F\u6548\u3002`
|
|
1468
|
+
},
|
|
494
1469
|
/** 安装写入失败提示 */
|
|
495
|
-
COMPLETION_INSTALL_WRITE_ERROR:
|
|
1470
|
+
COMPLETION_INSTALL_WRITE_ERROR: {
|
|
1471
|
+
en: (filePath) => `Cannot write file ${filePath}, please check file permissions or configure manually.`,
|
|
1472
|
+
"zh-CN": (filePath) => `\u65E0\u6CD5\u5199\u5165\u6587\u4EF6 ${filePath}\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650\u6216\u624B\u52A8\u914D\u7F6E\u3002`
|
|
1473
|
+
}
|
|
496
1474
|
};
|
|
1475
|
+
var COMPLETION_MESSAGES = createMessages(COMPLETION_MESSAGES_I18N);
|
|
1476
|
+
|
|
1477
|
+
// src/constants/messages/update.ts
|
|
1478
|
+
var UPDATE_COMMANDS_I18N = {
|
|
1479
|
+
npm: {
|
|
1480
|
+
en: "npm i -g clawt",
|
|
1481
|
+
"zh-CN": "npm i -g clawt"
|
|
1482
|
+
},
|
|
1483
|
+
pnpm: {
|
|
1484
|
+
en: "pnpm add -g clawt",
|
|
1485
|
+
"zh-CN": "pnpm add -g clawt"
|
|
1486
|
+
},
|
|
1487
|
+
yarn: {
|
|
1488
|
+
en: "yarn global add clawt",
|
|
1489
|
+
"zh-CN": "yarn global add clawt"
|
|
1490
|
+
}
|
|
1491
|
+
};
|
|
1492
|
+
var UPDATE_COMMANDS = createMessages(UPDATE_COMMANDS_I18N);
|
|
1493
|
+
var UPDATE_MESSAGES_I18N = {
|
|
1494
|
+
/** 版本更新提示 */
|
|
1495
|
+
UPDATE_AVAILABLE: {
|
|
1496
|
+
en: (currentVersion, latestVersion) => `clawt update available: ${currentVersion} \u2192 ${latestVersion}`,
|
|
1497
|
+
"zh-CN": (currentVersion, latestVersion) => `clawt \u6709\u65B0\u7248\u672C\u53EF\u7528: ${currentVersion} \u2192 ${latestVersion}`
|
|
1498
|
+
},
|
|
1499
|
+
/** 更新操作提示 */
|
|
1500
|
+
UPDATE_HINT: {
|
|
1501
|
+
en: (command) => `Run ${command} to update`,
|
|
1502
|
+
"zh-CN": (command) => `\u6267\u884C ${command} \u8FDB\u884C\u66F4\u65B0`
|
|
1503
|
+
}
|
|
1504
|
+
};
|
|
1505
|
+
var UPDATE_MESSAGES = createMessages(UPDATE_MESSAGES_I18N);
|
|
497
1506
|
|
|
498
1507
|
// src/constants/messages/init.ts
|
|
499
|
-
var
|
|
1508
|
+
var INIT_MESSAGES_I18N = {
|
|
500
1509
|
/** init 成功 */
|
|
501
|
-
INIT_SUCCESS:
|
|
1510
|
+
INIT_SUCCESS: {
|
|
1511
|
+
en: (branch) => `\u2713 Project initialized, main work branch set to: ${branch}`,
|
|
1512
|
+
"zh-CN": (branch) => `\u2713 \u9879\u76EE\u521D\u59CB\u5316\u6210\u529F\uFF0C\u4E3B\u5DE5\u4F5C\u5206\u652F\u8BBE\u7F6E\u4E3A: ${branch}`
|
|
1513
|
+
},
|
|
502
1514
|
/** init 更新 */
|
|
503
|
-
INIT_UPDATED:
|
|
1515
|
+
INIT_UPDATED: {
|
|
1516
|
+
en: (oldBranch, newBranch) => `\u2713 Main work branch updated from ${oldBranch} to ${newBranch}`,
|
|
1517
|
+
"zh-CN": (oldBranch, newBranch) => `\u2713 \u5DF2\u5C06\u4E3B\u5DE5\u4F5C\u5206\u652F\u4ECE ${oldBranch} \u66F4\u65B0\u4E3A ${newBranch}`
|
|
1518
|
+
},
|
|
504
1519
|
/** init show 查看当前项目完整配置(JSON 格式) */
|
|
505
|
-
INIT_SHOW:
|
|
1520
|
+
INIT_SHOW: {
|
|
1521
|
+
en: (configJson) => `${configJson}`,
|
|
1522
|
+
"zh-CN": (configJson) => `${configJson}`
|
|
1523
|
+
},
|
|
506
1524
|
/** init 未初始化 */
|
|
507
|
-
INIT_NOT_INITIALIZED:
|
|
1525
|
+
INIT_NOT_INITIALIZED: {
|
|
1526
|
+
en: "Project not initialized. Please run clawt init to set the main work branch",
|
|
1527
|
+
"zh-CN": "\u9879\u76EE\u5C1A\u672A\u521D\u59CB\u5316\uFF0C\u8BF7\u5148\u6267\u884C clawt init \u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F"
|
|
1528
|
+
},
|
|
508
1529
|
/** 项目未初始化(requireProjectConfig 使用) */
|
|
509
|
-
PROJECT_NOT_INITIALIZED:
|
|
1530
|
+
PROJECT_NOT_INITIALIZED: {
|
|
1531
|
+
en: "Project not initialized. Please run clawt init to set the main work branch",
|
|
1532
|
+
"zh-CN": "\u9879\u76EE\u5C1A\u672A\u521D\u59CB\u5316\uFF0C\u8BF7\u5148\u6267\u884C clawt init \u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F"
|
|
1533
|
+
},
|
|
510
1534
|
/** 项目配置缺少 clawtMainWorkBranch 字段 */
|
|
511
|
-
PROJECT_CONFIG_MISSING_BRANCH:
|
|
1535
|
+
PROJECT_CONFIG_MISSING_BRANCH: {
|
|
1536
|
+
en: "Project config missing main work branch info. Please run clawt init to set the main work branch",
|
|
1537
|
+
"zh-CN": "\u9879\u76EE\u914D\u7F6E\u7F3A\u5C11\u4E3B\u5DE5\u4F5C\u5206\u652F\u4FE1\u606F\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C clawt init \u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F"
|
|
1538
|
+
},
|
|
512
1539
|
/** init show 交互式面板选择配置项提示 */
|
|
513
|
-
INIT_SELECT_PROMPT:
|
|
1540
|
+
INIT_SELECT_PROMPT: {
|
|
1541
|
+
en: "Select project config item to modify",
|
|
1542
|
+
"zh-CN": "\u9009\u62E9\u8981\u4FEE\u6539\u7684\u9879\u76EE\u914D\u7F6E\u9879"
|
|
1543
|
+
},
|
|
514
1544
|
/** init show 交互式面板配置项修改成功 */
|
|
515
|
-
INIT_SET_SUCCESS:
|
|
1545
|
+
INIT_SET_SUCCESS: {
|
|
1546
|
+
en: (key, value) => `\u2713 Project config ${key} set to ${value}`,
|
|
1547
|
+
"zh-CN": (key, value) => `\u2713 \u9879\u76EE\u914D\u7F6E ${key} \u5DF2\u8BBE\u7F6E\u4E3A ${value}`
|
|
1548
|
+
}
|
|
516
1549
|
};
|
|
1550
|
+
var INIT_MESSAGES = createMessages(INIT_MESSAGES_I18N);
|
|
517
1551
|
|
|
518
1552
|
// src/constants/messages/cover-validate.ts
|
|
519
|
-
var
|
|
1553
|
+
var COVER_VALIDATE_MESSAGES_I18N = {
|
|
520
1554
|
/** 当前不在验证分支上 */
|
|
521
|
-
COVER_VALIDATE_NOT_ON_VALIDATE_BRANCH:
|
|
1555
|
+
COVER_VALIDATE_NOT_ON_VALIDATE_BRANCH: {
|
|
1556
|
+
en: "Current branch is not a validate branch (must start with clawt-validate-)\n Please run clawt validate first to switch to a validate branch",
|
|
1557
|
+
"zh-CN": "\u5F53\u524D\u5206\u652F\u4E0D\u662F\u9A8C\u8BC1\u5206\u652F\uFF08\u9700\u4EE5 clawt-validate- \u5F00\u5934\uFF09\n \u8BF7\u5148\u901A\u8FC7 clawt validate \u5207\u6362\u5230\u9A8C\u8BC1\u5206\u652F"
|
|
1558
|
+
},
|
|
522
1559
|
/** 无增量修改 */
|
|
523
|
-
COVER_VALIDATE_NO_CHANGES:
|
|
1560
|
+
COVER_VALIDATE_NO_CHANGES: {
|
|
1561
|
+
en: "No incremental changes on validate branch relative to snapshot, nothing to cover",
|
|
1562
|
+
"zh-CN": "\u9A8C\u8BC1\u5206\u652F\u4E0A\u6CA1\u6709\u76F8\u5BF9\u4E8E\u5FEB\u7167\u7684\u589E\u91CF\u4FEE\u6539\uFF0C\u65E0\u9700\u8986\u76D6"
|
|
1563
|
+
},
|
|
524
1564
|
/** 目标 worktree 不存在 */
|
|
525
|
-
COVER_VALIDATE_TARGET_NOT_FOUND:
|
|
1565
|
+
COVER_VALIDATE_TARGET_NOT_FOUND: {
|
|
1566
|
+
en: (branch) => `Worktree for branch ${branch} not found. Please confirm the worktree has not been removed`,
|
|
1567
|
+
"zh-CN": (branch) => `\u672A\u627E\u5230\u5206\u652F ${branch} \u5BF9\u5E94\u7684 worktree\uFF0C\u8BF7\u786E\u8BA4\u8BE5 worktree \u5C1A\u672A\u88AB\u79FB\u9664`
|
|
1568
|
+
},
|
|
526
1569
|
/** 无快照,提示先执行 validate */
|
|
527
|
-
COVER_VALIDATE_NO_SNAPSHOT:
|
|
528
|
-
|
|
1570
|
+
COVER_VALIDATE_NO_SNAPSHOT: {
|
|
1571
|
+
en: (branch) => `No validate snapshot found for branch ${branch}
|
|
1572
|
+
Please run clawt validate -b ${branch} to create a snapshot`,
|
|
1573
|
+
"zh-CN": (branch) => `\u672A\u627E\u5230\u5206\u652F ${branch} \u7684 validate \u5FEB\u7167
|
|
1574
|
+
\u8BF7\u5148\u6267\u884C clawt validate -b ${branch} \u521B\u5EFA\u5FEB\u7167`
|
|
1575
|
+
},
|
|
529
1576
|
/** 覆盖失败(tree checkout/clean 失败) */
|
|
530
|
-
COVER_VALIDATE_COVER_FAILED:
|
|
531
|
-
|
|
1577
|
+
COVER_VALIDATE_COVER_FAILED: {
|
|
1578
|
+
en: (branch) => `Failed to cover changes to worktree ${branch}: tree checkout or cleanup error
|
|
1579
|
+
Please check the target worktree status and retry`,
|
|
1580
|
+
"zh-CN": (branch) => `\u8986\u76D6\u53D8\u66F4\u5230 worktree ${branch} \u5931\u8D25\uFF1Atree checkout \u6216\u6E05\u7406\u64CD\u4F5C\u51FA\u9519
|
|
1581
|
+
\u8BF7\u68C0\u67E5\u76EE\u6807 worktree \u72B6\u6001\u540E\u91CD\u8BD5`
|
|
1582
|
+
},
|
|
532
1583
|
/** 工作区和暂存区无修改,可能为误操作 */
|
|
533
|
-
COVER_VALIDATE_WORKING_DIR_CLEAN:
|
|
1584
|
+
COVER_VALIDATE_WORKING_DIR_CLEAN: {
|
|
1585
|
+
en: "Working tree and staging area on current validate branch have no changes, possibly a mistaken operation",
|
|
1586
|
+
"zh-CN": "\u5F53\u524D\u9A8C\u8BC1\u5206\u652F\u7684\u5DE5\u4F5C\u533A\u548C\u6682\u5B58\u533A\u6CA1\u6709\u4EFB\u4F55\u4FEE\u6539\uFF0C\u53EF\u80FD\u4E3A\u8BEF\u64CD\u4F5C"
|
|
1587
|
+
},
|
|
534
1588
|
/** 覆盖成功 */
|
|
535
|
-
COVER_VALIDATE_SUCCESS:
|
|
1589
|
+
COVER_VALIDATE_SUCCESS: {
|
|
1590
|
+
en: (branch) => `\u2713 Changes on validate branch covered to worktree => ${branch}`,
|
|
1591
|
+
"zh-CN": (branch) => `\u2713 \u5DF2\u5C06\u9A8C\u8BC1\u5206\u652F\u4E0A\u7684\u4FEE\u6539\u8986\u76D6\u5230 worktree => ${branch}`
|
|
1592
|
+
}
|
|
536
1593
|
};
|
|
1594
|
+
var COVER_VALIDATE_MESSAGES = createMessages(COVER_VALIDATE_MESSAGES_I18N);
|
|
537
1595
|
|
|
538
1596
|
// src/constants/messages/home.ts
|
|
539
|
-
var
|
|
1597
|
+
var HOME_MESSAGES_I18N = {
|
|
540
1598
|
/** 已在主工作分支上 */
|
|
541
|
-
HOME_ALREADY_ON_MAIN:
|
|
1599
|
+
HOME_ALREADY_ON_MAIN: {
|
|
1600
|
+
en: (branch) => `Already on main work branch ${branch}, no switch needed`,
|
|
1601
|
+
"zh-CN": (branch) => `\u5DF2\u5728\u4E3B\u5DE5\u4F5C\u5206\u652F ${branch} \u4E0A\uFF0C\u65E0\u9700\u5207\u6362`
|
|
1602
|
+
},
|
|
542
1603
|
/** 切换成功 */
|
|
543
|
-
HOME_SWITCH_SUCCESS:
|
|
1604
|
+
HOME_SWITCH_SUCCESS: {
|
|
1605
|
+
en: (from, to) => `\u2713 Switched from ${from} to main work branch ${to}`,
|
|
1606
|
+
"zh-CN": (from, to) => `\u2713 \u5DF2\u4ECE ${from} \u5207\u6362\u5230\u4E3B\u5DE5\u4F5C\u5206\u652F ${to}`
|
|
1607
|
+
},
|
|
544
1608
|
/** 当前在子 worktree,提示用户手动 cd 到主 worktree */
|
|
545
|
-
HOME_NOT_IN_MAIN_WORKTREE:
|
|
1609
|
+
HOME_NOT_IN_MAIN_WORKTREE: {
|
|
1610
|
+
en: (mainPath) => `Not in main worktree. Please switch to main worktree:
|
|
1611
|
+
|
|
1612
|
+
cd ${mainPath}`,
|
|
1613
|
+
"zh-CN": (mainPath) => `\u5F53\u524D\u4E0D\u5728\u4E3B worktree\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u4E3B worktree\uFF1A
|
|
546
1614
|
|
|
547
1615
|
cd ${mainPath}`
|
|
1616
|
+
}
|
|
548
1617
|
};
|
|
1618
|
+
var HOME_MESSAGES = createMessages(HOME_MESSAGES_I18N);
|
|
549
1619
|
|
|
550
1620
|
// src/constants/messages/tasks.ts
|
|
551
|
-
var
|
|
1621
|
+
var TASKS_CMD_MESSAGES_I18N = {
|
|
552
1622
|
/** 任务模板文件已存在 */
|
|
553
|
-
TASK_INIT_FILE_EXISTS:
|
|
1623
|
+
TASK_INIT_FILE_EXISTS: {
|
|
1624
|
+
en: (path) => `File already exists: ${path}, delete it first to overwrite`,
|
|
1625
|
+
"zh-CN": (path) => `\u6587\u4EF6\u5DF2\u5B58\u5728: ${path}\uFF0C\u5982\u9700\u8986\u76D6\u8BF7\u5148\u5220\u9664`
|
|
1626
|
+
},
|
|
554
1627
|
/** 任务模板生成成功 */
|
|
555
|
-
TASK_INIT_SUCCESS:
|
|
1628
|
+
TASK_INIT_SUCCESS: {
|
|
1629
|
+
en: (path) => `\u2713 Task template generated: ${path}`,
|
|
1630
|
+
"zh-CN": (path) => `\u2713 \u4EFB\u52A1\u6A21\u677F\u5DF2\u751F\u6210: ${path}`
|
|
1631
|
+
},
|
|
556
1632
|
/** 任务模板使用提示(分行列出 run 和 resume 两种用法) */
|
|
557
|
-
TASK_INIT_HINT:
|
|
1633
|
+
TASK_INIT_HINT: {
|
|
1634
|
+
en: (path) => `Run task:
|
|
1635
|
+
clawt run -f ${path} # Create worktree and execute (branch name must not exist)
|
|
1636
|
+
clawt resume -f ${path} # Resume in existing worktree (branch name must exist)`,
|
|
1637
|
+
"zh-CN": (path) => `\u6267\u884C\u4EFB\u52A1:
|
|
558
1638
|
clawt run -f ${path} # \u521B\u5EFA worktree \u5E76\u6267\u884C\uFF08\u5206\u652F\u540D\u9700\u4E0D\u5B58\u5728\uFF09
|
|
559
1639
|
clawt resume -f ${path} # \u5728\u5DF2\u6709 worktree \u4E2D\u8FFD\u95EE\uFF08\u5206\u652F\u540D\u9700\u5DF2\u5B58\u5728\uFF09`
|
|
1640
|
+
}
|
|
560
1641
|
};
|
|
1642
|
+
var TASKS_CMD_MESSAGES = createMessages(TASKS_CMD_MESSAGES_I18N);
|
|
561
1643
|
|
|
562
1644
|
// src/constants/messages/post-create.ts
|
|
563
|
-
var
|
|
1645
|
+
var POST_CREATE_MESSAGES_I18N = {
|
|
564
1646
|
/** hook 执行跳过(--no-post-create) */
|
|
565
|
-
HOOK_SKIPPED:
|
|
1647
|
+
HOOK_SKIPPED: {
|
|
1648
|
+
en: "Skipped postCreate hook (--no-post-create)",
|
|
1649
|
+
"zh-CN": "\u5DF2\u8DF3\u8FC7 postCreate hook\uFF08--no-post-create\uFF09"
|
|
1650
|
+
},
|
|
566
1651
|
/** 无 hook 配置 */
|
|
567
|
-
HOOK_NOT_CONFIGURED:
|
|
1652
|
+
HOOK_NOT_CONFIGURED: {
|
|
1653
|
+
en: "postCreate hook not configured, skipping",
|
|
1654
|
+
"zh-CN": "\u672A\u914D\u7F6E postCreate hook\uFF0C\u8DF3\u8FC7"
|
|
1655
|
+
},
|
|
568
1656
|
/** hook 来源提示 */
|
|
569
|
-
HOOK_SOURCE_INFO:
|
|
1657
|
+
HOOK_SOURCE_INFO: {
|
|
1658
|
+
en: (source) => `postCreate hook source: ${source}`,
|
|
1659
|
+
"zh-CN": (source) => `postCreate hook \u6765\u6E90: ${source}`
|
|
1660
|
+
},
|
|
570
1661
|
/** hook 开始执行 */
|
|
571
|
-
HOOK_EXECUTING:
|
|
1662
|
+
HOOK_EXECUTING: {
|
|
1663
|
+
en: (branch, command) => `[${branch}] Executing postCreate hook: ${command}`,
|
|
1664
|
+
"zh-CN": (branch, command) => `[${branch}] \u6B63\u5728\u6267\u884C postCreate hook: ${command}`
|
|
1665
|
+
},
|
|
572
1666
|
/** hook 执行成功 */
|
|
573
|
-
HOOK_SUCCESS:
|
|
1667
|
+
HOOK_SUCCESS: {
|
|
1668
|
+
en: (branch) => `[${branch}] postCreate hook executed successfully`,
|
|
1669
|
+
"zh-CN": (branch) => `[${branch}] postCreate hook \u6267\u884C\u6210\u529F`
|
|
1670
|
+
},
|
|
574
1671
|
/** hook 执行失败 */
|
|
575
|
-
HOOK_FAILED:
|
|
1672
|
+
HOOK_FAILED: {
|
|
1673
|
+
en: (branch, error) => `[${branch}] postCreate hook execution failed: ${error}`,
|
|
1674
|
+
"zh-CN": (branch, error) => `[${branch}] postCreate hook \u6267\u884C\u5931\u8D25: ${error}`
|
|
1675
|
+
},
|
|
576
1676
|
/** hook 执行汇总 */
|
|
577
|
-
HOOK_SUMMARY:
|
|
1677
|
+
HOOK_SUMMARY: {
|
|
1678
|
+
en: (succeeded, failed) => `postCreate hook completed: ${succeeded} succeeded, ${failed} failed`,
|
|
1679
|
+
"zh-CN": (succeeded, failed) => `postCreate hook \u6267\u884C\u5B8C\u6210: ${succeeded} \u6210\u529F, ${failed} \u5931\u8D25`
|
|
1680
|
+
},
|
|
578
1681
|
/** hook 后台执行中提示 */
|
|
579
|
-
HOOK_BACKGROUND_START:
|
|
1682
|
+
HOOK_BACKGROUND_START: {
|
|
1683
|
+
en: (count, command) => `postCreate hook running in background (${count} worktree(s)): ${command}`,
|
|
1684
|
+
"zh-CN": (count, command) => `postCreate hook \u6B63\u5728\u540E\u53F0\u6267\u884C (${count} \u4E2A worktree): ${command}`
|
|
1685
|
+
},
|
|
580
1686
|
/** postCreate.sh 自动添加执行权限 */
|
|
581
|
-
POST_CREATE_SCRIPT_AUTO_CHMOD:
|
|
1687
|
+
POST_CREATE_SCRIPT_AUTO_CHMOD: {
|
|
1688
|
+
en: (path) => `${path} is not executable, auto-added execute permission`,
|
|
1689
|
+
"zh-CN": (path) => `${path} \u4E0D\u53EF\u6267\u884C\uFF0C\u5DF2\u81EA\u52A8\u6DFB\u52A0\u6267\u884C\u6743\u9650`
|
|
1690
|
+
},
|
|
582
1691
|
/** postCreate.sh 不可执行(自动 chmod 失败时降级提示) */
|
|
583
|
-
POST_CREATE_SCRIPT_NOT_EXECUTABLE:
|
|
1692
|
+
POST_CREATE_SCRIPT_NOT_EXECUTABLE: {
|
|
1693
|
+
en: (path) => `Detected ${path} but not executable, auto-chmod failed. Please run chmod +x ${path} manually`,
|
|
1694
|
+
"zh-CN": (path) => `\u68C0\u6D4B\u5230 ${path} \u4F46\u4E0D\u53EF\u6267\u884C\uFF0C\u81EA\u52A8\u6DFB\u52A0\u6743\u9650\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u6267\u884C chmod +x ${path}`
|
|
1695
|
+
}
|
|
584
1696
|
};
|
|
1697
|
+
var POST_CREATE_MESSAGES = createMessages(POST_CREATE_MESSAGES_I18N);
|
|
585
1698
|
|
|
586
1699
|
// src/constants/messages/interactive-panel.ts
|
|
587
|
-
import
|
|
1700
|
+
import chalk2 from "chalk";
|
|
588
1701
|
|
|
589
1702
|
// src/constants/interactive-panel.ts
|
|
590
1703
|
var PANEL_SHORTCUT_KEYS = {
|
|
@@ -607,7 +1720,17 @@ var PANEL_SHORTCUT_KEYS = {
|
|
|
607
1720
|
};
|
|
608
1721
|
|
|
609
1722
|
// src/constants/messages/interactive-panel.ts
|
|
610
|
-
var
|
|
1723
|
+
var SHORTCUT_LABELS_EN = {
|
|
1724
|
+
VALIDATE: "Validate",
|
|
1725
|
+
MERGE: "Merge",
|
|
1726
|
+
DELETE: "Delete",
|
|
1727
|
+
RESUME: "Resume",
|
|
1728
|
+
SYNC: "Sync",
|
|
1729
|
+
COVER: "Cover",
|
|
1730
|
+
REFRESH: "Refresh",
|
|
1731
|
+
QUIT: "Quit"
|
|
1732
|
+
};
|
|
1733
|
+
var SHORTCUT_LABELS_ZH = {
|
|
611
1734
|
VALIDATE: "\u9A8C\u8BC1",
|
|
612
1735
|
MERGE: "\u5408\u5E76",
|
|
613
1736
|
DELETE: "\u5220\u9664",
|
|
@@ -617,11 +1740,226 @@ var SHORTCUT_LABELS = {
|
|
|
617
1740
|
REFRESH: "\u5237\u65B0",
|
|
618
1741
|
QUIT: "\u9000\u51FA"
|
|
619
1742
|
};
|
|
620
|
-
var
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
1743
|
+
var PANEL_FOOTER_SHORTCUTS_I18N = {
|
|
1744
|
+
PANEL_FOOTER_SHORTCUTS: {
|
|
1745
|
+
en: Object.entries(SHORTCUT_LABELS_EN).map(([key, label]) => `[${chalk2.cyan(PANEL_SHORTCUT_KEYS[key])}]${label}`).join(" "),
|
|
1746
|
+
"zh-CN": Object.entries(SHORTCUT_LABELS_ZH).map(([key, label]) => `[${chalk2.cyan(PANEL_SHORTCUT_KEYS[key])}]${label}`).join(" ")
|
|
1747
|
+
}
|
|
1748
|
+
};
|
|
1749
|
+
var PANEL_FOOTER_SHORTCUTS = createMessages(PANEL_FOOTER_SHORTCUTS_I18N).PANEL_FOOTER_SHORTCUTS;
|
|
1750
|
+
var PANEL_FOOTER_COUNTDOWN_I18N = {
|
|
1751
|
+
PANEL_FOOTER_COUNTDOWN: {
|
|
1752
|
+
en: (seconds) => chalk2.gray(`(refresh in ${seconds}s)`),
|
|
1753
|
+
"zh-CN": (seconds) => chalk2.gray(`(${seconds}s \u540E\u5237\u65B0)`)
|
|
1754
|
+
}
|
|
1755
|
+
};
|
|
1756
|
+
var PANEL_FOOTER_COUNTDOWN = createMessages(PANEL_FOOTER_COUNTDOWN_I18N).PANEL_FOOTER_COUNTDOWN;
|
|
1757
|
+
var PANEL_OVERFLOW_DOWN_HINT_I18N = {
|
|
1758
|
+
PANEL_OVERFLOW_DOWN_HINT: {
|
|
1759
|
+
en: chalk2.gray("\u2193 more worktrees..."),
|
|
1760
|
+
"zh-CN": chalk2.gray("\u2193 \u66F4\u591A worktree...")
|
|
1761
|
+
}
|
|
1762
|
+
};
|
|
1763
|
+
var PANEL_OVERFLOW_DOWN_HINT = createMessages(PANEL_OVERFLOW_DOWN_HINT_I18N).PANEL_OVERFLOW_DOWN_HINT;
|
|
1764
|
+
var PANEL_OVERFLOW_UP_HINT_I18N = {
|
|
1765
|
+
PANEL_OVERFLOW_UP_HINT: {
|
|
1766
|
+
en: chalk2.gray("\u2191 more worktrees..."),
|
|
1767
|
+
"zh-CN": chalk2.gray("\u2191 \u66F4\u591A worktree...")
|
|
1768
|
+
}
|
|
1769
|
+
};
|
|
1770
|
+
var PANEL_OVERFLOW_UP_HINT = createMessages(PANEL_OVERFLOW_UP_HINT_I18N).PANEL_OVERFLOW_UP_HINT;
|
|
1771
|
+
var PANEL_SNAPSHOT_SUMMARY_I18N = {
|
|
1772
|
+
PANEL_SNAPSHOT_SUMMARY: {
|
|
1773
|
+
en: (total, orphaned) => {
|
|
1774
|
+
const base = `Snapshots: ${total}`;
|
|
1775
|
+
if (orphaned > 0) {
|
|
1776
|
+
return `${base} (${chalk2.yellow(`${orphaned} orphaned`)})`;
|
|
1777
|
+
}
|
|
1778
|
+
return base;
|
|
1779
|
+
},
|
|
1780
|
+
"zh-CN": (total, orphaned) => {
|
|
1781
|
+
const base = `\u5FEB\u7167: ${total} \u4E2A`;
|
|
1782
|
+
if (orphaned > 0) {
|
|
1783
|
+
return `${base}\uFF08${chalk2.yellow(`${orphaned} \u4E2A\u5B64\u7ACB`)}\uFF09`;
|
|
1784
|
+
}
|
|
1785
|
+
return base;
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
};
|
|
1789
|
+
var PANEL_SNAPSHOT_SUMMARY = createMessages(PANEL_SNAPSHOT_SUMMARY_I18N).PANEL_SNAPSHOT_SUMMARY;
|
|
1790
|
+
var PANEL_NO_WORKTREES_I18N = {
|
|
1791
|
+
PANEL_NO_WORKTREES: {
|
|
1792
|
+
en: "(No active worktrees)",
|
|
1793
|
+
"zh-CN": "(\u65E0\u6D3B\u8DC3 worktree)"
|
|
1794
|
+
}
|
|
1795
|
+
};
|
|
1796
|
+
var PANEL_NO_WORKTREES = createMessages(PANEL_NO_WORKTREES_I18N).PANEL_NO_WORKTREES;
|
|
1797
|
+
var PANEL_PRESS_ENTER_TO_RETURN_I18N = {
|
|
1798
|
+
PANEL_PRESS_ENTER_TO_RETURN: {
|
|
1799
|
+
en: chalk2.gray("\nPress Enter to return to panel..."),
|
|
1800
|
+
"zh-CN": chalk2.gray("\n\u6309 Enter \u8FD4\u56DE\u9762\u677F...")
|
|
1801
|
+
}
|
|
1802
|
+
};
|
|
1803
|
+
var PANEL_PRESS_ENTER_TO_RETURN = createMessages(PANEL_PRESS_ENTER_TO_RETURN_I18N).PANEL_PRESS_ENTER_TO_RETURN;
|
|
1804
|
+
var PANEL_NOT_TTY_I18N = {
|
|
1805
|
+
PANEL_NOT_TTY: {
|
|
1806
|
+
en: "Interactive panel requires a TTY terminal. Please run clawt status -i directly in a terminal",
|
|
1807
|
+
"zh-CN": "\u4EA4\u4E92\u5F0F\u9762\u677F\u9700\u8981 TTY \u7EC8\u7AEF\u73AF\u5883\uFF0C\u8BF7\u76F4\u63A5\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C clawt status -i"
|
|
1808
|
+
}
|
|
1809
|
+
};
|
|
1810
|
+
var PANEL_NOT_TTY = createMessages(PANEL_NOT_TTY_I18N).PANEL_NOT_TTY;
|
|
1811
|
+
var PANEL_TITLE_I18N = {
|
|
1812
|
+
PANEL_TITLE: {
|
|
1813
|
+
en: (projectName) => chalk2.bold.cyan(`Project Status: ${projectName}`),
|
|
1814
|
+
"zh-CN": (projectName) => chalk2.bold.cyan(`\u9879\u76EE\u72B6\u6001\u603B\u89C8: ${projectName}`)
|
|
1815
|
+
}
|
|
1816
|
+
};
|
|
1817
|
+
var PANEL_TITLE = createMessages(PANEL_TITLE_I18N).PANEL_TITLE;
|
|
1818
|
+
var PANEL_CONFIGURED_BRANCH_I18N = {
|
|
1819
|
+
PANEL_CONFIGURED_BRANCH: {
|
|
1820
|
+
en: (branchName) => chalk2.gray(`Main work branch: ${branchName}`),
|
|
1821
|
+
"zh-CN": (branchName) => chalk2.gray(`\u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}`)
|
|
1822
|
+
}
|
|
1823
|
+
};
|
|
1824
|
+
var PANEL_CONFIGURED_BRANCH = createMessages(PANEL_CONFIGURED_BRANCH_I18N).PANEL_CONFIGURED_BRANCH;
|
|
1825
|
+
var PANEL_CONFIGURED_BRANCH_DELETED_I18N = {
|
|
1826
|
+
PANEL_CONFIGURED_BRANCH_DELETED: {
|
|
1827
|
+
en: (branchName) => chalk2.red(`\u2717 Main work branch: ${branchName} (deleted)`),
|
|
1828
|
+
"zh-CN": (branchName) => chalk2.red(`\u2717 \u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}\uFF08\u5DF2\u4E0D\u5B58\u5728\uFF09`)
|
|
1829
|
+
}
|
|
1830
|
+
};
|
|
1831
|
+
var PANEL_CONFIGURED_BRANCH_DELETED = createMessages(PANEL_CONFIGURED_BRANCH_DELETED_I18N).PANEL_CONFIGURED_BRANCH_DELETED;
|
|
1832
|
+
var PANEL_CONFIGURED_BRANCH_MISMATCH_I18N = {
|
|
1833
|
+
PANEL_CONFIGURED_BRANCH_MISMATCH: {
|
|
1834
|
+
en: (branchName) => chalk2.red(`\u26A0 Main work branch: ${branchName} (mismatch)`),
|
|
1835
|
+
"zh-CN": (branchName) => chalk2.red(`\u26A0 \u4E3B\u5DE5\u4F5C\u5206\u652F: ${branchName}\uFF08\u4E0D\u4E00\u81F4\uFF09`)
|
|
1836
|
+
}
|
|
1837
|
+
};
|
|
1838
|
+
var PANEL_CONFIGURED_BRANCH_MISMATCH = createMessages(PANEL_CONFIGURED_BRANCH_MISMATCH_I18N).PANEL_CONFIGURED_BRANCH_MISMATCH;
|
|
1839
|
+
var PANEL_NOT_INITIALIZED_I18N = {
|
|
1840
|
+
PANEL_NOT_INITIALIZED: {
|
|
1841
|
+
en: chalk2.gray("Not initialized (run clawt init to set main work branch)"),
|
|
1842
|
+
"zh-CN": chalk2.gray("\u672A\u521D\u59CB\u5316\uFF08\u6267\u884C clawt init \u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F\uFF09")
|
|
1843
|
+
}
|
|
1844
|
+
};
|
|
1845
|
+
var PANEL_NOT_INITIALIZED = createMessages(PANEL_NOT_INITIALIZED_I18N).PANEL_NOT_INITIALIZED;
|
|
1846
|
+
var PANEL_UNKNOWN_DATE_I18N = {
|
|
1847
|
+
PANEL_UNKNOWN_DATE: {
|
|
1848
|
+
en: "Unknown date",
|
|
1849
|
+
"zh-CN": "\u672A\u77E5\u65E5\u671F"
|
|
1850
|
+
}
|
|
1851
|
+
};
|
|
1852
|
+
var PANEL_UNKNOWN_DATE = createMessages(PANEL_UNKNOWN_DATE_I18N).PANEL_UNKNOWN_DATE;
|
|
1853
|
+
var PANEL_SYNCED_WITH_MAIN_I18N = {
|
|
1854
|
+
PANEL_SYNCED_WITH_MAIN: {
|
|
1855
|
+
en: "Synced with main branch",
|
|
1856
|
+
"zh-CN": "\u4E0E\u4E3B\u5206\u652F\u540C\u6B65"
|
|
1857
|
+
}
|
|
1858
|
+
};
|
|
1859
|
+
var PANEL_SYNCED_WITH_MAIN = createMessages(PANEL_SYNCED_WITH_MAIN_I18N).PANEL_SYNCED_WITH_MAIN;
|
|
1860
|
+
var PANEL_COMMITS_AHEAD_I18N = {
|
|
1861
|
+
PANEL_COMMITS_AHEAD: {
|
|
1862
|
+
en: (count) => `${count} local commit(s)`,
|
|
1863
|
+
"zh-CN": (count) => `${count} \u4E2A\u672C\u5730\u63D0\u4EA4`
|
|
1864
|
+
}
|
|
1865
|
+
};
|
|
1866
|
+
var PANEL_COMMITS_AHEAD = createMessages(PANEL_COMMITS_AHEAD_I18N).PANEL_COMMITS_AHEAD;
|
|
1867
|
+
var PANEL_COMMITS_BEHIND_I18N = {
|
|
1868
|
+
PANEL_COMMITS_BEHIND: {
|
|
1869
|
+
en: (count) => `${count} commit(s) behind main`,
|
|
1870
|
+
"zh-CN": (count) => `\u843D\u540E\u4E3B\u5206\u652F ${count} \u4E2A\u63D0\u4EA4`
|
|
1871
|
+
}
|
|
1872
|
+
};
|
|
1873
|
+
var PANEL_COMMITS_BEHIND = createMessages(PANEL_COMMITS_BEHIND_I18N).PANEL_COMMITS_BEHIND;
|
|
1874
|
+
|
|
1875
|
+
// src/constants/messages/cli-descriptions.ts
|
|
1876
|
+
var CLI_DESCRIPTIONS_I18N = {
|
|
1877
|
+
// 主程序
|
|
1878
|
+
PROGRAM_DESC: {
|
|
1879
|
+
en: "Run multiple Claude Code Agent tasks in parallel based on Git Worktree",
|
|
1880
|
+
"zh-CN": "\u672C\u5730\u5E76\u884C\u6267\u884C\u591A\u4E2AClaude Code Agent\u4EFB\u52A1\uFF0C\u878D\u5408 Git Worktree \u4E0E Claude Code CLI \u7684\u547D\u4EE4\u884C\u5DE5\u5177"
|
|
1881
|
+
},
|
|
1882
|
+
OPTION_DEBUG: {
|
|
1883
|
+
en: "Output debug information to terminal",
|
|
1884
|
+
"zh-CN": "\u8F93\u51FA\u8BE6\u7EC6\u8C03\u8BD5\u4FE1\u606F\u5230\u7EC8\u7AEF"
|
|
1885
|
+
},
|
|
1886
|
+
OPTION_YES: {
|
|
1887
|
+
en: "Skip all interactive confirmations, suitable for scripts/CI",
|
|
1888
|
+
"zh-CN": "\u8DF3\u8FC7\u6240\u6709\u4EA4\u4E92\u5F0F\u786E\u8BA4\uFF0C\u9002\u7528\u4E8E\u811A\u672C/CI \u73AF\u5883"
|
|
1889
|
+
},
|
|
1890
|
+
// config 命令
|
|
1891
|
+
CONFIG_DESC: { en: "Interactively view and modify global configuration", "zh-CN": "\u4EA4\u4E92\u5F0F\u67E5\u770B\u548C\u4FEE\u6539\u5168\u5C40\u914D\u7F6E" },
|
|
1892
|
+
CONFIG_RESET_DESC: { en: "Reset configuration to defaults", "zh-CN": "\u5C06\u914D\u7F6E\u6062\u590D\u4E3A\u9ED8\u8BA4\u503C" },
|
|
1893
|
+
CONFIG_SET_DESC: { en: "Set a configuration item (interactive without args)", "zh-CN": "\u4FEE\u6539\u914D\u7F6E\u9879\uFF08\u65E0\u53C2\u6570\u8FDB\u5165\u4EA4\u4E92\u5F0F\u914D\u7F6E\uFF09" },
|
|
1894
|
+
CONFIG_GET_DESC: { en: "Get a configuration item value", "zh-CN": "\u83B7\u53D6\u5355\u4E2A\u914D\u7F6E\u9879\u7684\u503C" },
|
|
1895
|
+
// init 命令
|
|
1896
|
+
INIT_DESC: { en: "Initialize project-level configuration, set main work branch", "zh-CN": "\u521D\u59CB\u5316\u9879\u76EE\u7EA7\u914D\u7F6E\uFF0C\u8BBE\u7F6E\u4E3B\u5DE5\u4F5C\u5206\u652F" },
|
|
1897
|
+
INIT_OPTION_BRANCH: { en: "Specify main work branch name (defaults to current branch)", "zh-CN": "\u6307\u5B9A\u4E3B\u5DE5\u4F5C\u5206\u652F\u540D\uFF08\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D\u5206\u652F\uFF09" },
|
|
1898
|
+
INIT_SHOW_DESC: { en: "Interactively view and modify project configuration (supports --json)", "zh-CN": "\u4EA4\u4E92\u5F0F\u67E5\u770B\u548C\u4FEE\u6539\u9879\u76EE\u914D\u7F6E\uFF08\u652F\u6301 --json \u683C\u5F0F\u8F93\u51FA\uFF09" },
|
|
1899
|
+
INIT_OPTION_JSON: { en: "Output in JSON format", "zh-CN": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA" },
|
|
1900
|
+
// create 命令
|
|
1901
|
+
CREATE_DESC: { en: "Batch create worktrees and branches (with validate branches)", "zh-CN": "\u6279\u91CF\u521B\u5EFA worktree \u53CA\u5BF9\u5E94\u5206\u652F\uFF08\u542B\u9A8C\u8BC1\u5206\u652F\uFF09" },
|
|
1902
|
+
CREATE_OPTION_NUMBER: { en: "Number of worktrees to create", "zh-CN": "\u521B\u5EFA\u6570\u91CF" },
|
|
1903
|
+
CREATE_OPTION_POST_CREATE: { en: "Run postCreate hook (default on, --no-post-create to skip)", "zh-CN": "\u6267\u884C postCreate hook\uFF08\u9ED8\u8BA4\u5F00\u542F\uFF0C--no-post-create \u8DF3\u8FC7\uFF09" },
|
|
1904
|
+
// run 命令
|
|
1905
|
+
RUN_DESC: { en: "Batch create worktrees + run Claude Code tasks (supports task files)", "zh-CN": "\u6279\u91CF\u521B\u5EFA worktree + \u542F\u52A8 Claude Code \u6267\u884C\u4EFB\u52A1\uFF08\u652F\u6301\u4EFB\u52A1\u6587\u4EF6\uFF09" },
|
|
1906
|
+
RUN_OPTION_BRANCH: { en: "Branch name", "zh-CN": "\u5206\u652F\u540D" },
|
|
1907
|
+
RUN_OPTION_TASKS: { en: "Task list (can be specified multiple times)", "zh-CN": "\u4EFB\u52A1\u5217\u8868\uFF08\u53EF\u591A\u6B21\u6307\u5B9A\uFF09\uFF0C\u4E0D\u4F20\u5219\u5728 worktree \u4E2D\u6253\u5F00 Claude Code \u4EA4\u4E92\u5F0F\u754C\u9762" },
|
|
1908
|
+
RUN_OPTION_CONCURRENCY: { en: "Max concurrency, 0 means unlimited", "zh-CN": "\u6700\u5927\u5E76\u53D1\u6570\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236" },
|
|
1909
|
+
RUN_OPTION_FILE: { en: "Read task list from file (mutually exclusive with --tasks)", "zh-CN": "\u4ECE\u4EFB\u52A1\u6587\u4EF6\u8BFB\u53D6\u4EFB\u52A1\u5217\u8868\uFF08\u4E0E --tasks \u4E92\u65A5\uFF09" },
|
|
1910
|
+
RUN_OPTION_DRY_RUN: { en: "Preview mode, show task plan without executing", "zh-CN": "\u9884\u89C8\u6A21\u5F0F\uFF0C\u4EC5\u5C55\u793A\u4EFB\u52A1\u8BA1\u5212\u4E0D\u5B9E\u9645\u6267\u884C" },
|
|
1911
|
+
RUN_OPTION_POST_CREATE: { en: "Run postCreate hook (default on, --no-post-create to skip)", "zh-CN": "\u6267\u884C postCreate hook\uFF08\u9ED8\u8BA4\u5F00\u542F\uFF0C--no-post-create \u8DF3\u8FC7\uFF09" },
|
|
1912
|
+
// validate 命令
|
|
1913
|
+
VALIDATE_DESC: { en: "Validate a worktree branch changes in the main worktree", "zh-CN": "\u5728\u4E3B worktree \u9A8C\u8BC1\u67D0\u4E2A worktree \u5206\u652F\u7684\u53D8\u66F4\uFF08\u901A\u8FC7\u9A8C\u8BC1\u5206\u652F\uFF09" },
|
|
1914
|
+
VALIDATE_OPTION_BRANCH: { en: "Branch name to validate (supports fuzzy match)", "zh-CN": "\u8981\u9A8C\u8BC1\u7684\u5206\u652F\u540D\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D\uFF0C\u4E0D\u4F20\u5219\u5217\u51FA\u6240\u6709\u5206\u652F\uFF09" },
|
|
1915
|
+
VALIDATE_OPTION_CLEAN: { en: "Clean up validate state (reset main worktree and delete snapshots)", "zh-CN": "\u6E05\u7406 validate \u72B6\u6001\uFF08\u91CD\u7F6E\u4E3B worktree \u5E76\u5220\u9664\u5FEB\u7167\uFF09" },
|
|
1916
|
+
VALIDATE_OPTION_RUN: { en: "Command to run in main worktree after successful validation", "zh-CN": "validate \u6210\u529F\u540E\u5728\u4E3B worktree \u4E2D\u6267\u884C\u7684\u547D\u4EE4" },
|
|
1917
|
+
// merge 命令
|
|
1918
|
+
MERGE_DESC: { en: "Merge a validated worktree branch into the main worktree", "zh-CN": "\u5408\u5E76\u67D0\u4E2A\u5DF2\u9A8C\u8BC1\u7684 worktree \u5206\u652F\u5230\u4E3B worktree" },
|
|
1919
|
+
MERGE_OPTION_BRANCH: { en: "Branch to merge (supports fuzzy match)", "zh-CN": "\u8981\u5408\u5E76\u7684\u5206\u652F\u540D\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D\uFF0C\u4E0D\u4F20\u5219\u5217\u51FA\u6240\u6709\u5206\u652F\u4F9B\u9009\u62E9\uFF09" },
|
|
1920
|
+
MERGE_OPTION_MESSAGE: { en: "Commit message (required if target worktree has modifications)", "zh-CN": "\u63D0\u4EA4\u4FE1\u606F\uFF08\u76EE\u6807 worktree \u5DE5\u4F5C\u533A\u6709\u4FEE\u6539\u65F6\u5FC5\u586B\uFF09" },
|
|
1921
|
+
MERGE_OPTION_AUTO: { en: "Auto-resolve conflicts with AI without asking", "zh-CN": "\u9047\u5230\u51B2\u7A81\u76F4\u63A5\u8C03\u7528 AI \u89E3\u51B3\uFF0C\u4E0D\u518D\u8BE2\u95EE" },
|
|
1922
|
+
// remove 命令
|
|
1923
|
+
REMOVE_DESC: { en: "Remove worktree (supports fuzzy match/multi-select/all)", "zh-CN": "\u79FB\u9664 worktree\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D/\u591A\u9009/\u5168\u90E8\uFF09" },
|
|
1924
|
+
REMOVE_OPTION_ALL: { en: "Remove all worktrees for the current project", "zh-CN": "\u79FB\u9664\u5F53\u524D\u9879\u76EE\u4E0B\u6240\u6709 worktree" },
|
|
1925
|
+
REMOVE_OPTION_BRANCH: { en: "Branch name (supports fuzzy match)", "zh-CN": "\u6307\u5B9A\u5206\u652F\u540D\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D\uFF0C\u4E0D\u4F20\u5219\u5217\u51FA\u6240\u6709\u5206\u652F\uFF09" },
|
|
1926
|
+
// resume 命令
|
|
1927
|
+
RESUME_DESC: { en: "Resume a Claude Code session in an existing worktree", "zh-CN": "\u5728\u5DF2\u6709 worktree \u4E2D\u6062\u590D Claude Code \u4F1A\u8BDD\uFF08\u652F\u6301\u591A\u9009\u6279\u91CF\u6062\u590D\uFF09" },
|
|
1928
|
+
RESUME_OPTION_BRANCH: { en: "Branch to resume (supports fuzzy match)", "zh-CN": "\u8981\u6062\u590D\u7684\u5206\u652F\u540D\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D\uFF0C\u4E0D\u4F20\u5219\u5217\u51FA\u6240\u6709\u5206\u652F\uFF09" },
|
|
1929
|
+
RESUME_OPTION_PROMPT: { en: "Non-interactive follow-up (requires -b)", "zh-CN": "\u975E\u4EA4\u4E92\u5F0F\u8FFD\u95EE\uFF08\u9700\u914D\u5408 -b \u6307\u5B9A\u5206\u652F\uFF09" },
|
|
1930
|
+
RESUME_OPTION_FILE: { en: "Batch follow-up from task file (matches by branch name)", "zh-CN": "\u4ECE\u4EFB\u52A1\u6587\u4EF6\u6279\u91CF\u8FFD\u95EE\uFF08\u901A\u8FC7 branch \u540D\u5339\u914D\u5DF2\u6709 worktree\uFF09" },
|
|
1931
|
+
RESUME_OPTION_CONCURRENCY: { en: "Max concurrency for batch follow-up, 0 means unlimited", "zh-CN": "\u6279\u91CF\u8FFD\u95EE\u6700\u5927\u5E76\u53D1\u6570\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236" },
|
|
1932
|
+
// sync 命令
|
|
1933
|
+
SYNC_DESC: { en: "Sync main branch code to target worktree", "zh-CN": "\u5C06\u4E3B\u5206\u652F\u6700\u65B0\u4EE3\u7801\u540C\u6B65\u5230\u76EE\u6807 worktree" },
|
|
1934
|
+
SYNC_OPTION_BRANCH: { en: "Branch to sync (supports fuzzy match)", "zh-CN": "\u8981\u540C\u6B65\u7684\u5206\u652F\u540D\uFF08\u652F\u6301\u6A21\u7CCA\u5339\u914D\uFF0C\u4E0D\u4F20\u5219\u5217\u51FA\u6240\u6709\u5206\u652F\uFF09" },
|
|
1935
|
+
// status 命令
|
|
1936
|
+
STATUS_DESC: { en: "Show project status overview (supports --json)", "zh-CN": "\u663E\u793A\u9879\u76EE\u5168\u5C40\u72B6\u6001\u603B\u89C8\uFF08\u652F\u6301 --json \u683C\u5F0F\u8F93\u51FA\uFF09" },
|
|
1937
|
+
STATUS_OPTION_JSON: { en: "Output in JSON format", "zh-CN": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA" },
|
|
1938
|
+
STATUS_OPTION_INTERACTIVE: { en: "Interactive panel mode", "zh-CN": "\u4EA4\u4E92\u5F0F\u9762\u677F\u6A21\u5F0F" },
|
|
1939
|
+
// list 命令
|
|
1940
|
+
LIST_DESC: { en: "List all worktrees (supports --json)", "zh-CN": "\u5217\u51FA\u5F53\u524D\u9879\u76EE\u6240\u6709 worktree\uFF08\u652F\u6301 --json \u683C\u5F0F\u8F93\u51FA\uFF09" },
|
|
1941
|
+
LIST_OPTION_JSON: { en: "Output in JSON format", "zh-CN": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA" },
|
|
1942
|
+
// reset 命令
|
|
1943
|
+
RESET_DESC: { en: "Reset main worktree working directory and staging area", "zh-CN": "\u91CD\u7F6E\u4E3B worktree \u5DE5\u4F5C\u533A\u548C\u6682\u5B58\u533A\uFF08\u4FDD\u7559 validate \u5FEB\u7167\uFF09" },
|
|
1944
|
+
// home 命令
|
|
1945
|
+
HOME_DESC: { en: "Switch back to the main work branch", "zh-CN": "\u5207\u6362\u56DE\u4E3B\u5DE5\u4F5C\u5206\u652F" },
|
|
1946
|
+
// projects 命令
|
|
1947
|
+
PROJECTS_DESC: { en: "Show worktree overview across projects", "zh-CN": "\u5C55\u793A\u6240\u6709\u9879\u76EE\u7684 worktree \u6982\u89C8\uFF0C\u6216\u67E5\u770B\u6307\u5B9A\u9879\u76EE\u7684 worktree \u8BE6\u60C5" },
|
|
1948
|
+
PROJECTS_OPTION_JSON: { en: "Output in JSON format", "zh-CN": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA" },
|
|
1949
|
+
// alias 命令
|
|
1950
|
+
ALIAS_DESC: { en: "Manage command aliases (list / set / remove)", "zh-CN": "\u7BA1\u7406\u547D\u4EE4\u522B\u540D\uFF08\u5217\u51FA / \u8BBE\u7F6E / \u79FB\u9664\uFF09" },
|
|
1951
|
+
ALIAS_LIST_DESC: { en: "List all aliases", "zh-CN": "\u5217\u51FA\u6240\u6709\u522B\u540D" },
|
|
1952
|
+
ALIAS_SET_DESC: { en: "Set a command alias", "zh-CN": "\u8BBE\u7F6E\u547D\u4EE4\u522B\u540D" },
|
|
1953
|
+
ALIAS_REMOVE_DESC: { en: "Remove a command alias", "zh-CN": "\u79FB\u9664\u547D\u4EE4\u522B\u540D" },
|
|
1954
|
+
// completion 命令
|
|
1955
|
+
COMPLETION_DESC: { en: "Internal dynamic completion method (not public)", "zh-CN": "\u5185\u90E8\u4F7F\u7528\u7684\u52A8\u6001\u8865\u5168\u65B9\u6CD5\uFF0C\u4E0D\u5BF9\u5916\u516C\u5F00" },
|
|
1956
|
+
// tasks 命令
|
|
1957
|
+
TASKS_DESC: { en: "Task file management", "zh-CN": "\u4EFB\u52A1\u6587\u4EF6\u7BA1\u7406" },
|
|
1958
|
+
TASKS_INIT_DESC: { en: "Generate task template file", "zh-CN": "\u751F\u6210\u4EFB\u52A1\u6A21\u677F\u6587\u4EF6" },
|
|
1959
|
+
// cover 命令
|
|
1960
|
+
COVER_DESC: { en: "Cover validate branch changes back to target worktree", "zh-CN": "\u5C06\u9A8C\u8BC1\u5206\u652F\u4E0A\u7684\u4FEE\u6539\u8986\u76D6\u56DE\u76EE\u6807 worktree\uFF08\u81EA\u52A8\u63A8\u5BFC\u76EE\u6807\u5206\u652F\uFF09" }
|
|
1961
|
+
};
|
|
1962
|
+
var CLI_DESCRIPTIONS = createMessages(CLI_DESCRIPTIONS_I18N);
|
|
625
1963
|
|
|
626
1964
|
// src/constants/messages/index.ts
|
|
627
1965
|
var MESSAGES = {
|
|
@@ -651,6 +1989,11 @@ var VALID_TERMINAL_APPS = ["auto", "iterm2", "terminal", "cmux"];
|
|
|
651
1989
|
|
|
652
1990
|
// src/constants/config.ts
|
|
653
1991
|
var CONFIG_DEFINITIONS = {
|
|
1992
|
+
language: {
|
|
1993
|
+
defaultValue: "en",
|
|
1994
|
+
description: "\u754C\u9762\u8BED\u8A00\uFF1Aen\uFF08\u82F1\u6587\uFF09\u3001zh-CN\uFF08\u4E2D\u6587\uFF09",
|
|
1995
|
+
allowedValues: ["en", "zh-CN"]
|
|
1996
|
+
},
|
|
654
1997
|
autoDeleteBranch: {
|
|
655
1998
|
defaultValue: false,
|
|
656
1999
|
description: "\u79FB\u9664 worktree \u65F6\u662F\u5426\u81EA\u52A8\u5220\u9664\u5BF9\u5E94\u672C\u5730\u5206\u652F"
|
|
@@ -754,8 +2097,8 @@ var EXEC_MAX_BUFFER = 200 * 1024 * 1024;
|
|
|
754
2097
|
var UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
|
|
755
2098
|
|
|
756
2099
|
// src/constants/prompt.ts
|
|
757
|
-
import
|
|
758
|
-
var UNKNOWN_DATE_SEPARATOR_LABEL = `\u2550\u2550\u2550\u2550 ${
|
|
2100
|
+
import chalk3 from "chalk";
|
|
2101
|
+
var UNKNOWN_DATE_SEPARATOR_LABEL = `\u2550\u2550\u2550\u2550 ${chalk3.bold.hex("#FF8C00")("\u672A\u77E5\u65E5\u671F")} \u2550\u2550\u2550\u2550`;
|
|
759
2102
|
|
|
760
2103
|
// src/constants/pre-checks.ts
|
|
761
2104
|
var PRE_CHECK_CREATE = {
|
|
@@ -768,16 +2111,16 @@ var PRE_CHECK_RUN = { ...PRE_CHECK_CREATE };
|
|
|
768
2111
|
|
|
769
2112
|
// scripts/postinstall.ts
|
|
770
2113
|
function ensureDirectory(dirPath) {
|
|
771
|
-
if (!
|
|
772
|
-
|
|
2114
|
+
if (!existsSync4(dirPath)) {
|
|
2115
|
+
mkdirSync3(dirPath, { recursive: true });
|
|
773
2116
|
}
|
|
774
2117
|
}
|
|
775
2118
|
function loadExistingConfig(configPath) {
|
|
776
|
-
if (!
|
|
2119
|
+
if (!existsSync4(configPath)) {
|
|
777
2120
|
return null;
|
|
778
2121
|
}
|
|
779
2122
|
try {
|
|
780
|
-
const raw =
|
|
2123
|
+
const raw = readFileSync2(configPath, "utf-8");
|
|
781
2124
|
return JSON.parse(raw);
|
|
782
2125
|
} catch {
|
|
783
2126
|
return null;
|
|
@@ -790,19 +2133,19 @@ function mergeConfig(existing, defaults) {
|
|
|
790
2133
|
}
|
|
791
2134
|
return merged;
|
|
792
2135
|
}
|
|
793
|
-
function
|
|
794
|
-
|
|
2136
|
+
function writeConfig2(configPath, config, message) {
|
|
2137
|
+
writeFileSync2(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
795
2138
|
console.log(message);
|
|
796
2139
|
}
|
|
797
2140
|
function syncConfig(configPath, defaultConfig) {
|
|
798
2141
|
const existing = loadExistingConfig(configPath);
|
|
799
2142
|
if (!existing) {
|
|
800
|
-
|
|
2143
|
+
writeConfig2(configPath, defaultConfig, `\u2713 \u5DF2\u521B\u5EFA\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6: ${configPath}`);
|
|
801
2144
|
return;
|
|
802
2145
|
}
|
|
803
2146
|
const merged = mergeConfig(existing, defaultConfig);
|
|
804
2147
|
if (JSON.stringify(existing) !== JSON.stringify(merged)) {
|
|
805
|
-
|
|
2148
|
+
writeConfig2(configPath, merged, `\u2713 \u5DF2\u66F4\u65B0\u914D\u7F6E\u6587\u4EF6: ${configPath}`);
|
|
806
2149
|
}
|
|
807
2150
|
}
|
|
808
2151
|
function init() {
|