@dungsil/dsh-plugin-ui-worktree 0.1.0 → 0.2.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 CHANGED
@@ -1,22 +1,34 @@
1
1
  # @dungsil/dsh-plugin-ui-worktree
2
2
 
3
- DSH 입력창의 권한 선택 옆에 **Worktree** 버튼을 추가합니다. Git 처리를 직접 구현하지 않는 **UI 전용 플러그인**입니다. 선택한 작업을 현재 세션의 모델에게 별도 메시지로 요청하며, 작성 중인 메시지·파일 참조·첨부는 그대로 유지합니다.
3
+ DSH 입력창의 권한 선택 옆에 **Worktree 선택 상자**를 추가합니다. 현재 체크아웃과 기존 Git worktree 목록을 표시하고, Git worktree를 생성하거나 세션의 작업 경로를 전환합니다. 모델은 브랜치 이름을 비워 둔 경우에만 이름을 정하며, 작성 중인 메시지·파일 참조·첨부는 그대로 유지합니다.
4
4
 
5
5
  ## 사용법
6
6
 
7
- 1. 새 worktree를 만들려면 DSH의 **플러그인 → 공식 → Git worktrees**에서 `@deepseek-ai/dsh-experimental-tool-worktree`를 켭니다.
8
- 2. 입력창의 **Worktree**를 누르고 **새로 만들기** 또는 **기존 경로 사용**을 선택합니다.
9
- 3. 브랜치 이름이나 기존 worktree 경로를 입력하고 **모델에 요청**을 누릅니다. 새 브랜치 이름을 비워 두면 기존 도구가 이름을 생성합니다.
10
- 4. 기존 경로를 모르면 **목록 요청**으로 대화에서 목록을 확인한 다음, 사용할 경로를 입력합니다.
11
- 5. 실제 생성·전환 결과와 오류는 대화에서 확인합니다. 요청 전송 성공은 worktree 생성 완료를 뜻하지 않습니다.
7
+ 1. 플러그인 관리 화면에서 **Git Worktree UI**를 활성화합니다. 공식 모델용 Git worktrees 도구를 따로 켤 필요가 없습니다.
8
+ 2. 입력창의 선택 상자에서 현재 체크아웃과 기존 worktree의 이름을 확인합니다. 접두사와 경로는 표시하지 않습니다.
9
+ 3. **신규 워크트리**를 선택하고 브랜치 이름을 입력한 뒤 생성합니다. 이름을 비우면 모델이 대화의 마지막 사용자 메시지 최대 8개를 바탕으로 이름만 정합니다.
10
+ 4. 기존 worktree를 선택하면 같은 저장소에 등록된 경로인지 확인한 뒤 현재 세션의 작업 경로를 전환합니다.
11
+ 5. 오류가 발생하면 **조회 실패** 또는 **변경 확인 필요** 버튼을 눌러 상세 창을 엽니다. 원인 안내와 오류 코드를 확인하고 **워크트리 새로고침**으로 목록을 다시 조회합니다. 생성이나 전환이 실패한 뒤에는 실제 상태를 확인하기 전까지 같은 작업을 반복하지 않습니다.
12
12
 
13
13
  ## 동작 범위
14
14
 
15
- - 생성은 기존 `create_worktree` 도구를 사용하도록 요청합니다. 도구가 없으면 플러그인 활성화를 안내하고 중단하도록 요청하며, `git worktree add`로 대신 처리하지 않도록 명시합니다.
16
- - 재사용은 같은 저장소의 worktree인지 확인한 뒤 기존 `working_directory({ cd: path })` 도구를 사용하도록 요청합니다. 목록 요청은 읽기 전용이며 자동으로 경로를 바꾸지 않습니다.
17
- - 모델이 기존 도구를 실행하므로 모델 설정과 도구 권한이 필요하며, 모델 호출 비용이 발생할 수 있습니다. 플러그인이 모델의 지시 준수나 Git 작업 성공을 보장하지는 않습니다.
18
- - 실행 중이거나 세션을 불러오는 동안, 요청 전송 중이거나 메시지 전송 권한이 없을 때는 버튼을 비활성화합니다. 다른 세션으로 이동하면 입력 폼을 초기화합니다.
19
- - 영어·한국어 UI, Escape 닫기와 키보드 탐색을 지원합니다. 별도의 서버 API, Git 실행 코드, worktree 런타임, 자동 정리·삭제 기능은 추가하지 않습니다.
15
+ - `create_worktree` 도구나 `session.prompt()`를 호출하지 않습니다. 브랜치 이름을 입력하면 모델 호출이 없으며, 이름을 비운 경우에만 도구 없는 별도 모델 호출로 이름을 정합니다. 이 경우 모델 설정과 호출 비용이 필요합니다.
16
+ - **상황별 모델** 플러그인을 함께 사용하면 **설정 → 상황별 모델 → 워크트리 브랜치 이름**에서 자동 이름 생성 모델과 추론 수준을 별도로 지정할 수 있습니다. `provider`·`model`·`reasoningEffort` 설정은 이 플러그인에 저장하며 대화 모델과 제목 모델은 변경하지 않습니다. 추론 수준의 자동은 모델 기본값을 사용합니다. 모델을 지정하지 않으면 대화 모델만 따르고 대화의 추론 수준은 상속하지 않습니다. 워크트리 경로·이름 규칙을 저장해도 지정한 모델과 추론 수준은 유지됩니다.
17
+ - 소유자 전용 API로 목록을 조회하고 생성·전환합니다. 목록은 `git worktree list --porcelain -z`로 읽으며, 생성은 세션의 파일 접근 정책으로 제한한 Git 프로세스, 경로 전환은 기존 `workingDirectory` 서비스를 사용합니다. Git hook과 checkout filter는 실행하지 않습니다.
18
+ - 세션의 기존 파일 접근 정책을 유지합니다. 읽기 전용 정책에서는 생성이 거부되며, 기존 브랜치·경로는 덮어쓰지 않습니다. 커밋하지 않은 변경은 원래 체크아웃에 남습니다.
19
+ - 실행 중이거나 세션을 불러오는 동안에는 선택을 비활성화합니다. 서버에서도 세션별 중복 실행과 오래된 현재 경로를 거부하며, 유지보수 작업 중에는 새 모델 실행이 대기합니다. 경로 변경 안내는 다음 모델 입력에 반영되지만 그 자체로 모델을 실행하지 않습니다.
20
+ - 영어·한국어 UI, Escape 닫기와 키보드 탐색을 지원합니다. 다른 세션으로 이동하면 UI를 초기화하며, 자동 정리·삭제 기능은 제공하지 않습니다.
21
+ - 현재 worktree를 찾을 때 Windows 경로의 구분자와 드라이브 문자 대소문자를 맞춥니다. 실제 생성이나 전환에 쓰는 경로와 POSIX 파일 이름의 역슬래시는 바꾸지 않습니다.
22
+ - 조회 실패와 변경 결과를 확인하지 못한 상태를 구분합니다. 브라우저 콘솔의 `[dungsil-ui-worktree]` 로그에는 요청 종류와 허용된 오류 코드만 기록합니다. 서버 오류 원문, 인증 정보, 세션 식별자, 작업 경로는 기록하지 않습니다.
23
+
24
+ ## 워크트리 설정
25
+
26
+ DSH **설정 → 워크트리**에서 값을 변경하고 **저장**을 누릅니다. 설정은 현재 프로필에 저장되며 다음 생성부터 적용됩니다. 기존 worktree는 이동하거나 이름을 바꾸지 않습니다.
27
+
28
+ - **워크트리 풀 디렉터리**: 기본값은 `.agents/worktrees`입니다. 원본 체크아웃의 저장소 루트 기준 상대경로(`../worktrees` 포함) 또는 절대경로를 지정합니다. 실제 체크아웃은 이 디렉터리 아래의 브랜치 이름 경로에 생성됩니다. 설정한 경로도 세션의 파일 접근 정책을 따라야 합니다.
29
+ - **추적 중인 원격 브랜치 사용**: 기본값은 꺼짐이며 현재 HEAD를 기준으로 생성합니다. 켜면 현재 브랜치의 upstream인 `refs/remotes/...` 커밋을 사용합니다. 자동 fetch는 하지 않으며 upstream이 없거나 로컬 브랜치를 추적하면 생성을 거부합니다.
30
+ - **자동 브랜치 이름 형식**: 시멘틱(`feat/search`, `fix/login` 등), `dsh/*`, 사용자 지정 접두사(`team/`, `task-` 등)를 선택합니다. 기본값은 시멘틱이며 브랜치 이름을 직접 입력하면 이 규칙을 적용하지 않습니다.
31
+ - 다른 화면에서 설정을 변경했거나 저장 결과를 확인하지 못하면 **설정 새로고침**으로 저장된 값을 확인한 뒤 다시 수정합니다. 워크트리 작업 중에는 설정 저장을 거부하므로 작업이 끝난 뒤 새로고침합니다.
20
32
 
21
33
  ## 설치
22
34
 
@@ -24,10 +36,10 @@ DSH 지원 범위는 `^0.2.1-rc.5`입니다. npm 배포 전에는 저장소에
24
36
 
25
37
  ```bash
26
38
  pnpm --filter @dungsil/dsh-plugin-ui-worktree pack --pack-destination ../../release
27
- dsh plugin --profile web add ./release/dungsil-dsh-plugin-ui-worktree-0.1.0.tgz
39
+ dsh plugin --profile web add ./release/dungsil-dsh-plugin-ui-worktree-0.1.1.tgz
28
40
  ```
29
41
 
30
- 플러그인 관리 화면에서 **Git Worktree UI**를 활성화합니다. 공식 Git worktrees 플러그인의 활성화 상태는 이 플러그인이 변경하지 않습니다.
42
+ 플러그인 관리 화면에서 **Git Worktree UI**를 활성화합니다. 공식 모델용 Git worktrees 도구는 선택 사항이며, 이 UI의 설정은 해당 도구의 설정을 바꾸지 않습니다.
31
43
 
32
44
  ## 검증
33
45
 
@@ -37,6 +49,4 @@ pnpm --filter @dungsil/dsh-plugin-ui-worktree typecheck
37
49
  pnpm --filter @dungsil/dsh-plugin-ui-worktree test
38
50
  ```
39
51
 
40
- 테스트는 실제 UI 컴포넌트를 통해 생성·목록·재사용 요청의 내용, 중복 전송 방지, 전송 오류 표시, 세션 전환 격리, 언어 전환과 비활성화 조건을 확인합니다.
41
-
42
- DSH `0.2.2-alpha.2`의 실제 웹 UI와 로컬 모델 fixture에서도 세 종류의 요청 전달, 작성 중인 메시지·첨부 보존, 전송 실패 표시, Escape 닫기, 라이트·다크 테마와 390px 너비를 검증했습니다. fixture는 요청 수신만 확인하며 Git 도구를 실행하지 않습니다.
52
+ 테스트는 실제 UI 컴포넌트의 목록·생성·전환, 초안 보존, 중복 실행 방지, 오류 표시, 세션 전환 격리, 언어 전환과 비활성화 조건을 확인합니다. 서버 테스트는 실제 Git 저장소·AgentLoop·파일 접근 정책·소유자 인증 경계를 사용해 생성과 경로 전환을 검증합니다. 실제 프로필 저장과 Loader 재적용, 상대·절대경로, 로컬 HEAD와 다른 원격 기준 커밋, 자동 이름 규칙, hook·filter 실행 차단도 확인합니다.