hjworktree-cli 2.4.0 → 2.5.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.
@@ -0,0 +1,95 @@
1
+ # Context Snapshot
2
+
3
+ ## Session Metadata
4
+ - **Created**: 2025-01-07T22:15:30+09:00
5
+ - **CLI**: Claude Code
6
+ - **Project**: /Users/hyungju-lee/workspace/work/new/utils/hjWorktree-cli
7
+
8
+ ## Conversation Summary
9
+
10
+ ### User Requests
11
+ 1. AI agent 선택 기능 제거 (Codex CLI, Claude Code, Gemini CLI 선택 단계 삭제)
12
+ 2. 새로고침 시 세션 중복 버그 수정 (터미널 6개로 늘어나는 문제)
13
+ 3. npm publish를 위한 버전 업데이트 및 README.md 수정
14
+
15
+ ### Completed Tasks
16
+ 1. **AI Agent 선택 기능 제거**
17
+ - 4단계 wizard → 3단계 wizard (Branch → Count → Running)
18
+ - AgentStep.tsx, AgentSelector.tsx 컴포넌트 삭제
19
+ - 관련 타입, 상수, 상태 관리 코드 정리
20
+ - 터미널이 순수 shell로 열리도록 변경
21
+
22
+ 2. **세션 중복 버그 수정**
23
+ - `addTerminal()`에 중복 체크 로직 추가
24
+ - `restoreExistingWorktrees()`에 조건 체크 추가
25
+
26
+ 3. **버전 업데이트 및 문서화**
27
+ - 버전 2.3.0 → 2.4.0 업데이트
28
+ - README.md에 변경사항 반영
29
+
30
+ ### Modified Files
31
+ - `shared/types/index.ts` - AgentId, AgentType 제거, NavigationStep에서 'agent' 제거
32
+ - `shared/constants.ts` - AI_AGENTS 배열 제거, APP_VERSION 업데이트
33
+ - `web/src/App.tsx` - AgentStep import 및 렌더링 제거
34
+ - `web/src/stores/useAppStore.ts` - selectedAgent 상태/액션 제거, 중복 체크 추가
35
+ - `web/src/components/Steps/WorktreeStep.tsx` - agent 표시 제거
36
+ - `web/src/components/Modals/AddWorktreeModal.tsx` - agent 선택 UI 제거
37
+ - `web/src/components/Terminal/SplitTerminalView.tsx` - agent 라벨 제거
38
+ - `web/src/components/Terminal/XTerminal.tsx` - agentType prop 제거
39
+ - `web/src/components/Layout/LeftNavBar.tsx` - agent step 및 표시 제거
40
+ - `server/socketHandlers.ts` - agent 자동실행 제거
41
+ - `web/src/styles/global.css` - agent 관련 CSS 제거
42
+ - `package.json` - 버전 2.4.0
43
+ - `README.md` - 문서 업데이트
44
+
45
+ ### Deleted Files
46
+ - `web/src/components/Steps/AgentStep.tsx`
47
+ - `web/src/components/Setup/AgentSelector.tsx`
48
+
49
+ ## Technical Context
50
+
51
+ ### Key Concepts
52
+ - Git worktree 관리
53
+ - Zustand 상태 관리
54
+ - Socket.IO 실시간 터미널 통신
55
+ - node-pty 터미널 에뮬레이션
56
+ - React 컴포넌트 라이프사이클
57
+
58
+ ### Important Changes
59
+
60
+ **web/src/stores/useAppStore.ts**
61
+ ```typescript
62
+ // 중복 체크 추가
63
+ addTerminal: (terminal) => set((state) => {
64
+ if (state.terminals.some(t => t.sessionId === terminal.sessionId)) {
65
+ return state;
66
+ }
67
+ return { terminals: [...state.terminals, terminal] };
68
+ }),
69
+
70
+ // 조건 체크 추가
71
+ restoreExistingWorktrees: async () => {
72
+ const { terminals } = get();
73
+ if (terminals.length > 0) {
74
+ return;
75
+ }
76
+ // ...
77
+ }
78
+ ```
79
+
80
+ **server/socketHandlers.ts**
81
+ - agent 자동 실행 코드 제거
82
+ - 순수 shell만 열리도록 변경
83
+
84
+ ### Issues Resolved
85
+ 1. **세션 중복 버그**: 새로고침 시 `restoreExistingWorktrees()`가 무조건 실행되어 `addTerminal()`이 중복 호출됨
86
+ - 해결: 두 함수에 중복/조건 체크 추가
87
+
88
+ ## Git Commits
89
+ 1. `159f6499` - refactor: remove AI agent selection feature
90
+ 2. `d382c1f7` - fix: prevent session duplication on page refresh
91
+ 3. `8258b0f2` - chore: bump version to 2.4.0 for npm release
92
+
93
+ ## Next Steps
94
+ - `npm publish`로 v2.4.0 배포
95
+ - 배포 후 실제 환경에서 테스트
package/README.md CHANGED
@@ -14,6 +14,7 @@ Web-based git worktree manager for running multiple AI coding agents in parallel
14
14
  - Individual and bulk session deletion
15
15
  - Add new worktrees while sessions are running
16
16
  - **Modern Web UI**: React + Zustand state management
17
+ - **Auto Port Detection**: Automatically finds available port when running multiple instances
17
18
 
18
19
  ## Installation
19
20
 
@@ -34,6 +35,21 @@ hjWorktree
34
35
 
35
36
  This opens a web UI in your browser where you can:
36
37
 
38
+ ### Running Multiple Projects
39
+
40
+ You can run `hjWorktree` in multiple projects simultaneously. The CLI automatically detects available ports:
41
+
42
+ ```bash
43
+ # Project A - uses default port 3847
44
+ cd /path/to/project-a && hjWorktree
45
+
46
+ # Project B - automatically uses port 3848
47
+ cd /path/to/project-b && hjWorktree
48
+
49
+ # Or specify a custom port
50
+ PORT=5000 hjWorktree
51
+ ```
52
+
37
53
  1. **Select Branch**: Choose the base branch for worktrees
38
54
  2. **Set Worktree Count**: Specify how many parallel worktrees to create
39
55
  3. **Run**: Launch terminals in each worktree, then run your preferred AI agent
@@ -117,6 +133,11 @@ hjWorktree-cli/
117
133
 
118
134
  ## Changelog
119
135
 
136
+ ### v2.5.0
137
+ - **Auto Port Detection**: Automatically finds available port (range 3847-3856) when default port is in use
138
+ - **Multi-Project Support**: Run hjWorktree in multiple projects simultaneously without port conflicts
139
+ - **Custom Port**: Support `PORT` environment variable for explicit port specification
140
+
120
141
  ### v2.4.0
121
142
  - **Simplified Workflow**: Removed AI agent selection step (3-step wizard: Branch → Count → Run)
122
143
  - **Pure Terminal**: Terminals now open as shell, run any AI agent manually (`claude`, `codex`, `gemini`)
package/bin/cli.js CHANGED
@@ -4,13 +4,65 @@ import { spawn, execSync } from 'child_process';
4
4
  import { fileURLToPath } from 'url';
5
5
  import path from 'path';
6
6
  import fs from 'fs';
7
+ import getPort, { portNumbers } from 'get-port';
7
8
 
8
9
  const __filename = fileURLToPath(import.meta.url);
9
10
  const __dirname = path.dirname(__filename);
10
11
 
11
- const PORT = process.env.PORT || 3847;
12
+ const DEFAULT_PORT = 3847;
13
+ const PORT_RANGE_SIZE = 10;
12
14
  const CWD = process.cwd();
13
15
 
16
+ // Check if PORT is explicitly set by user
17
+ const userSpecifiedPort = process.env.PORT;
18
+
19
+ /**
20
+ * Find an available port within the configured range.
21
+ * If user explicitly set PORT env var, use that instead.
22
+ */
23
+ async function findAvailablePort() {
24
+ if (userSpecifiedPort) {
25
+ const port = parseInt(userSpecifiedPort, 10);
26
+ if (isNaN(port) || port < 1 || port > 65535) {
27
+ console.error(`Error: Invalid PORT value "${userSpecifiedPort}". Must be a number between 1 and 65535.`);
28
+ process.exit(1);
29
+ }
30
+ return {
31
+ port,
32
+ isExplicit: true,
33
+ isDefault: port === DEFAULT_PORT
34
+ };
35
+ }
36
+
37
+ const maxPort = DEFAULT_PORT + PORT_RANGE_SIZE - 1;
38
+
39
+ try {
40
+ const port = await getPort({
41
+ port: portNumbers(DEFAULT_PORT, maxPort)
42
+ });
43
+
44
+ // get-port returns a random port if none in range are available
45
+ if (port < DEFAULT_PORT || port > maxPort) {
46
+ console.error(`Error: No available ports in range ${DEFAULT_PORT}-${maxPort}.`);
47
+ console.error('All ports in the range are currently in use.');
48
+ console.error('');
49
+ console.error('Solutions:');
50
+ console.error(` 1. Free up a port in the range ${DEFAULT_PORT}-${maxPort}`);
51
+ console.error(' 2. Specify a different port: PORT=4000 hjWorktree');
52
+ process.exit(1);
53
+ }
54
+
55
+ return {
56
+ port,
57
+ isExplicit: false,
58
+ isDefault: port === DEFAULT_PORT
59
+ };
60
+ } catch (error) {
61
+ console.error('Error finding available port:', error.message);
62
+ process.exit(1);
63
+ }
64
+ }
65
+
14
66
  // Check if it's a git repository
15
67
  try {
16
68
  execSync('git status', { cwd: CWD, stdio: 'ignore' });
@@ -20,6 +72,9 @@ try {
20
72
  process.exit(1);
21
73
  }
22
74
 
75
+ // Find available port
76
+ const { port: PORT, isExplicit, isDefault } = await findAvailablePort();
77
+
23
78
  // Find the server entry point
24
79
  let serverPath = path.join(__dirname, '../dist/server/index.js');
25
80
 
@@ -36,7 +91,14 @@ if (!fs.existsSync(serverPath)) {
36
91
 
37
92
  console.log(`Starting hjWorktree CLI...`);
38
93
  console.log(`Working directory: ${CWD}`);
39
- console.log(`Server port: ${PORT}`);
94
+
95
+ if (isExplicit) {
96
+ console.log(`Server port: ${PORT} (user specified)`);
97
+ } else if (isDefault) {
98
+ console.log(`Server port: ${PORT}`);
99
+ } else {
100
+ console.log(`Server port: ${PORT} (default port ${DEFAULT_PORT} was in use)`);
101
+ }
40
102
 
41
103
  // Start the server
42
104
  const serverArgs = serverPath.endsWith('.ts')
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWnC,QAAA,MAAM,GAAG,6CAAY,CAAC;AACtB,QAAA,MAAM,UAAU,oGAAoB,CAAC;AACrC,QAAA,MAAM,EAAE,+HAKN,CAAC;AAsDH,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWnC,QAAA,MAAM,GAAG,6CAAY,CAAC;AACtB,QAAA,MAAM,UAAU,oGAAoB,CAAC;AACrC,QAAA,MAAM,EAAE,+HAKN,CAAC;AAiEH,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC"}
@@ -44,6 +44,16 @@ process.on('SIGTERM', () => {
44
44
  killAllSessions();
45
45
  process.exit(0);
46
46
  });
47
+ // Handle port in use error (race condition protection)
48
+ httpServer.on('error', (error) => {
49
+ if (error.code === 'EADDRINUSE') {
50
+ console.error(`\nError: Port ${PORT} is already in use.`);
51
+ console.error('This may happen if another process started using the port just now.');
52
+ console.error('Please try again or specify a different port: PORT=4000 hjWorktree');
53
+ process.exit(1);
54
+ }
55
+ throw error;
56
+ });
47
57
  // Start server
48
58
  httpServer.listen(PORT, () => {
49
59
  console.log(`
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export declare const MIN_PARALLEL_COUNT = 1;
3
3
  export declare const DEFAULT_PARALLEL_COUNT = 3;
4
4
  export declare const BRANCH_POLL_INTERVAL = 5000;
5
5
  export declare const APP_NAME = "hjWorktree CLI";
6
- export declare const APP_VERSION = "2.4.0";
6
+ export declare const APP_VERSION = "2.5.0";
7
7
  export declare const DEFAULT_PORT = 3847;
8
+ export declare const PORT_RANGE_SIZE = 10;
8
9
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../shared/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,eAAO,MAAM,QAAQ,mBAAmB,CAAC;AACzC,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,YAAY,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../shared/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,eAAO,MAAM,QAAQ,mBAAmB,CAAC;AACzC,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC"}
@@ -3,6 +3,7 @@ export const MIN_PARALLEL_COUNT = 1;
3
3
  export const DEFAULT_PARALLEL_COUNT = 3;
4
4
  export const BRANCH_POLL_INTERVAL = 5000; // 5 seconds
5
5
  export const APP_NAME = 'hjWorktree CLI';
6
- export const APP_VERSION = '2.4.0';
6
+ export const APP_VERSION = '2.5.0';
7
7
  export const DEFAULT_PORT = 3847;
8
+ export const PORT_RANGE_SIZE = 10; // Will try ports 3847-3856
8
9
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,CAAC,YAAY;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,CAAC,YAAY;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,2BAA2B"}