clawt 2.3.5 → 2.3.7

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/dist/index.js CHANGED
@@ -28,6 +28,8 @@ var MESSAGES = {
28
28
  CLAUDE_NOT_INSTALLED: "Claude Code CLI \u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u5B89\u88C5\uFF1Anpm install -g @anthropic-ai/claude-code",
29
29
  /** 分支已存在 */
30
30
  BRANCH_EXISTS: (name) => `\u5206\u652F ${name} \u5DF2\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA`,
31
+ /** 分支名清理后为空 */
32
+ BRANCH_NAME_EMPTY: (original) => `\u5206\u652F\u540D "${original}" \u4E2D\u4E0D\u5305\u542B\u5408\u6CD5\u5B57\u7B26\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5206\u652F`,
31
33
  /** 分支名被转换 */
32
34
  BRANCH_SANITIZED: (original, sanitized) => `\u5206\u652F\u540D\u5DF2\u8F6C\u6362: ${original} \u2192 ${sanitized}`,
33
35
  /** worktree 创建成功 */
@@ -438,6 +440,9 @@ function formatWorktreeStatus(status) {
438
440
  // src/utils/branch.ts
439
441
  function sanitizeBranchName(branchName) {
440
442
  const sanitized = branchName.replace(INVALID_BRANCH_CHARS, "-").replace(/-{2,}/g, "-").replace(/^-|-$/g, "");
443
+ if (!sanitized) {
444
+ throw new ClawtError(MESSAGES.BRANCH_NAME_EMPTY(branchName));
445
+ }
441
446
  if (sanitized !== branchName) {
442
447
  logger.warn(MESSAGES.BRANCH_SANITIZED(branchName, sanitized));
443
448
  printWarning(MESSAGES.BRANCH_SANITIZED(branchName, sanitized));
@@ -1,7 +1,5 @@
1
1
  // scripts/postinstall.ts
2
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
3
- import { join as join2 } from "path";
4
- import { homedir as homedir2 } from "os";
5
3
 
6
4
  // src/constants/paths.ts
7
5
  import { homedir } from "os";
@@ -43,10 +41,6 @@ var DEFAULT_CONFIG = deriveDefaultConfig(CONFIG_DEFINITIONS);
43
41
  var CONFIG_DESCRIPTIONS = deriveConfigDescriptions(CONFIG_DEFINITIONS);
44
42
 
45
43
  // scripts/postinstall.ts
46
- var CLAWT_HOME2 = join2(homedir2(), ".clawt");
47
- var CONFIG_PATH2 = join2(CLAWT_HOME2, "config.json");
48
- var LOGS_DIR2 = join2(CLAWT_HOME2, "logs");
49
- var WORKTREES_DIR2 = join2(CLAWT_HOME2, "worktrees");
50
44
  function ensureDirectory(dirPath) {
51
45
  if (!existsSync(dirPath)) {
52
46
  mkdirSync(dirPath, { recursive: true });
@@ -86,10 +80,10 @@ function syncConfig(configPath, defaultConfig) {
86
80
  }
87
81
  }
88
82
  function init() {
89
- ensureDirectory(CLAWT_HOME2);
90
- ensureDirectory(LOGS_DIR2);
91
- ensureDirectory(WORKTREES_DIR2);
92
- syncConfig(CONFIG_PATH2, DEFAULT_CONFIG);
83
+ ensureDirectory(CLAWT_HOME);
84
+ ensureDirectory(LOGS_DIR);
85
+ ensureDirectory(WORKTREES_DIR);
86
+ syncConfig(CONFIG_PATH, DEFAULT_CONFIG);
93
87
  console.log("\u2713 clawt \u521D\u59CB\u5316\u5B8C\u6210");
94
88
  }
95
89
  init();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawt",
3
- "version": "2.3.5",
3
+ "version": "2.3.7",
4
4
  "description": "本地并行执行多个Claude Code Agent任务,融合 Git Worktree 与 Claude Code CLI 的命令行工具",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3,18 +3,7 @@
3
3
  */
4
4
 
5
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
6
- import { join } from 'node:path';
7
- import { homedir } from 'node:os';
8
- import { DEFAULT_CONFIG } from '../src/constants/index.js';
9
-
10
- /** clawt 主目录 */
11
- const CLAWT_HOME = join(homedir(), '.clawt');
12
- /** 配置文件路径 */
13
- const CONFIG_PATH = join(CLAWT_HOME, 'config.json');
14
- /** 日志目录 */
15
- const LOGS_DIR = join(CLAWT_HOME, 'logs');
16
- /** worktree 目录 */
17
- const WORKTREES_DIR = join(CLAWT_HOME, 'worktrees');
6
+ import { DEFAULT_CONFIG, CLAWT_HOME, CONFIG_PATH, LOGS_DIR, WORKTREES_DIR } from '../src/constants/index.js';
18
7
 
19
8
  /**
20
9
  * 确保目录存在,不存在则递归创建
@@ -8,6 +8,9 @@ export const MESSAGES = {
8
8
  CLAUDE_NOT_INSTALLED: 'Claude Code CLI 未安装,请先安装:npm install -g @anthropic-ai/claude-code',
9
9
  /** 分支已存在 */
10
10
  BRANCH_EXISTS: (name: string) => `分支 ${name} 已存在,无法创建`,
11
+ /** 分支名清理后为空 */
12
+ BRANCH_NAME_EMPTY: (original: string) =>
13
+ `分支名 "${original}" 中不包含合法字符,无法创建分支`,
11
14
  /** 分支名被转换 */
12
15
  BRANCH_SANITIZED: (original: string, sanitized: string) =>
13
16
  `分支名已转换: ${original} → ${sanitized}`,
@@ -15,6 +15,10 @@ export function sanitizeBranchName(branchName: string): string {
15
15
  .replace(/-{2,}/g, '-')
16
16
  .replace(/^-|-$/g, '');
17
17
 
18
+ if (!sanitized) {
19
+ throw new ClawtError(MESSAGES.BRANCH_NAME_EMPTY(branchName));
20
+ }
21
+
18
22
  if (sanitized !== branchName) {
19
23
  logger.warn(MESSAGES.BRANCH_SANITIZED(branchName, sanitized));
20
24
  printWarning(MESSAGES.BRANCH_SANITIZED(branchName, sanitized));