dsh-composer-plus 1.24.0 → 1.24.1
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.de.md +5 -5
- package/README.es.md +5 -5
- package/README.fr.md +5 -5
- package/README.hi.md +5 -5
- package/README.id.md +5 -5
- package/README.ja.md +5 -5
- package/README.ko.md +5 -5
- package/README.md +5 -5
- package/README.pt-BR.md +5 -5
- package/README.ru.md +5 -5
- package/README.tr.md +5 -5
- package/README.vi.md +5 -5
- package/README.zh.md +5 -5
- package/client.js +3 -3
- package/index.js +4 -3
- package/package.json +1 -1
- package/release-notes.json +14 -14
package/README.ko.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
그런 다음 dsh를 다시 시작하세요. (CLI는 데스크톱 프로필에 설치할 수 없습니다. 데스크톱 프로필은 앱이 관리합니다.)
|
|
31
31
|
|
|
32
|
-
> dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.24.
|
|
32
|
+
> dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.24.1`.
|
|
33
33
|
|
|
34
34
|
## 기능
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
75
75
|
| **보호된 파일** | <a id="feature-protectedfiles"></a>기본적으로 켜져 있습니다. 에이전트 자체의 파일 도구는 지정한 패턴과 일치하는 파일을 읽거나 바꿀 수 없습니다. **읽기와 쓰기** 패턴에서는 파일에 대한 `read`, `read_image`, `grep`이 거부되고, 두 종류 모두에서 `write`, `edit`, `str_replace_editor`가 거부됩니다. 에이전트는 이유를 읽고 사용자에게 물어보라는 안내를 받습니다. 기본 패턴은 `.env*`, `*.pem`, `*.key`입니다. 설정 → Composer Plus → **보호된 파일**: 패턴을 추가하고(예: `published/**` 또는 `config/*.yml`), 종류를 클릭해 **읽기와 쓰기**와 **쓰기만** 사이에서 전환하고, ✕로 삭제하거나 **기본값 사용**을 클릭하세요. `/`가 없는 패턴은 모든 폴더의 파일 이름과 일치합니다. 이것은 가드레일이며 샌드박스가 아닙니다. 셸 명령(`cat .env`), 스크립트, MCP 도구는 여전히 파일에 접근할 수 있습니다(제한 사항 참고). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="스크린샷: 보호된 파일"></a> |
|
|
76
76
|
| **차단된 명령** | <a id="feature-blockedcommands"></a>기본적으로 켜져 있으며, 목록은 비어 있습니다. 에이전트의 셸 명령(`bash`, `pwsh`)은 지정한 규칙과 일치하는 명령을 실행할 수 없습니다. **차단** 규칙은 호출을 거부하고(에이전트는 이유를 읽고 사용자에게 물어보라는 안내를 받습니다), **먼저 묻기** 규칙은 dsh의 승인 카드를 표시하며, 명령은 사용자가 허용할 때만 실행됩니다. 설정 → Composer Plus → **차단된 명령**: 규칙을 입력하고(예: `npm publish`, `git push --force` 또는 `ssh *192.168.2.19`), 종류를 클릭해 **차단**과 **먼저 묻기** 사이에서 전환한 뒤 **추가**를 클릭하세요. 규칙의 종류를 클릭하면 바꿀 수 있고, ✕로 삭제할 수 있습니다. 규칙은 명령 이름과 그 뒤에 이 순서로 와야 하는 단어입니다. `*`는 모든 텍스트와 일치합니다. `&&`, `;`, `\|` 뒤, `$(…)`, `bash -c "…"` 또는 `eval` 안, `sudo`나 `env` 뒤에 있는 명령도 찾습니다. 이것은 가드레일이며 샌드박스가 아닙니다. 변수(`$CMD`), 스크립트 파일, 다른 프로그램은 여전히 명령을 실행할 수 있습니다(제한 사항 참고). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="스크린샷: 차단된 명령"></a> |
|
|
77
77
|
| **작업 보드** | <a id="feature-taskboard"></a>왼쪽 사이드바 → **작업 보드**. dsh 어디서나 `Cmd+Shift+K`(Windows와 Linux에서는 `Ctrl+Shift+K`)를 눌러도 열립니다. 사이드바와 같은 실시간 상태를 보여 주는 dsh 채팅의 칸반 보드입니다. 승인, 답변 또는 계획 검토를 기다리는 채팅은 주황색 점과 함께 **검토**에, 실행 중인 채팅은 **진행 중**에, 아직 열지 않은 끝난 채팅은 **완료**에 있습니다(초록색). 채팅을 열면 그 카드는 **완료**에서 저절로 빠집니다. 초록색 카드 아래의 **최근 완료 (N)**을 클릭하면 읽은 끝난 채팅을 볼 수 있습니다(최신 10개, 그다음 **이전 작업 N개 보기**; 열림/닫힘 상태는 이 기기에 저장됩니다). 보드 뒤에서 열린 채로 끝난 채팅(**새 작업**)은 열 때까지 초록색으로 남습니다. 보드 위쪽의 프로젝트 이름을 클릭하면 프로젝트 목록이 열립니다. 여기서 프로젝트나 **모든 프로젝트**를 고르세요. 채팅별 브랜치 폴더는 해당 프로젝트로 취급됩니다. 목록은 고른 뒤, `Esc`를 누르거나 목록 밖을 클릭하면 닫힙니다. 목록 맨 위의 **프로젝트 검색**에 입력하면 이름으로 프로젝트를 찾을 수 있습니다(대소문자와 악센트는 구분하지 않으며, `Esc`를 누르면 입력란이 비워집니다). `Enter`를 누르면 첫 번째로 일치하는 프로젝트가 선택됩니다. **최근 2시간 내 활성**을 클릭하면 대기 중이거나 실행 중인 채팅, 확인하지 않은 채 끝난 채팅 또는 최근 2시간 안에 바뀐 채팅이 있는 프로젝트만 표시됩니다(이 설정은 이 기기에 저장됩니다). **새 작업**(또는 `n`)은 보드가 보여 주는 프로젝트에서 dsh 자체의 새 채팅을 엽니다(**모든 프로젝트**일 때는 dsh의 새 세션이 고르는 프로젝트). 그래서 다른 채팅에서처럼 파일을 추가하고, 명령을 쓰고, 모델을 고를 수 있습니다. 첫 메시지를 보내면 자동으로 보드로 돌아옵니다. 그때까지 채팅은 **진행 중**의 맨 위에서 **새 작업**으로 기다립니다. 클릭해서 첫 메시지를 쓰세요. 응답을 기다리는 채팅이 있는 프로젝트에는 프로젝트 목록에서 주황색 점이 붙습니다(어느 채팅이든 기다리는 동안에는 위쪽 프로젝트 이름에도 붙습니다). dsh가 채팅 이름을 짓고 채팅의 모델이 그 메시지에서 태그를 최대 3개 씁니다. 카드를 클릭하면 채팅이 열립니다. 주황색 카드(또는 그 카드의 **답변**)를 클릭하면 보드에서 바로 답할 수 있습니다. 채팅 전체는 패널의 **채팅 열기**로 엽니다. 승인 요청에는 **거부** 또는 **한 번 허용**, 계획에는 **승인** 또는 **변경 요청**, 질문에는 선택지와 직접 쓴 텍스트로 답합니다. 끝난 카드에서 **×** 버튼을 클릭하면 그 카드를 보드에서 뺍니다. **최근 완료**를 열고 **완료** 맨 위의 **모두 빼기**를 클릭하면 그 카드들을 보드에서 뺍니다. 먼저 어느 프로젝트의 카드가 몇 개 빠지는지 보여 주며, 읽지 않은(초록색) 카드는 남습니다. 그 뒤 8초 동안 **실행 취소**를 누르면 카드가 돌아옵니다. **완료** 아래의 **뺀 카드 (N)**에는 보드에서 뺀 카드가 나열되고, **보드에 되돌리기**는 그중 하나를 다시 **완료**에 표시합니다. 채팅은 삭제되지 않습니다. 채팅은 dsh의 사이드바에 남고, 보드는 다시 시작한 뒤에도 이를 기억하며(Tether도 같은 보드를 보여 줍니다), 다시 실행되는 채팅은 보드로 돌아옵니다. **진행 중**의 카드를 가리키면(또는 키보드 포커스를 옮기면) 진행 상황을 볼 수 있습니다. 실행된 시간, 할 일 목록의 단계, 지금 실행 중인 도구, 에이전트의 마지막 줄이 표시됩니다. 설정 → Composer Plus → 작업 보드의 **마우스를 올리면 진행 상황 표시**에서 **빠름(AI 없음)**(기본값: 채팅만 읽음) 또는 **AI 요약**(채팅의 모델을 한 번 짧게 호출해 한두 문장도 씀)을 고릅니다. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="스크린샷: 작업 보드"></a> |
|
|
78
|
-
| **어시스턴트** | <a id="feature-assistant"></a>기본적으로
|
|
78
|
+
| **어시스턴트** | <a id="feature-assistant"></a>기본적으로 켜져 있습니다(**설정 → Composer Plus**에서 끌 수 있습니다). 왼쪽 사이드바에서 **어시스턴트**(**작업 보드** 바로 아래)를 클릭하세요. ChatGPT나 Grok 채팅처럼 개인 어시스턴트로 쓰는, 오래 유지되는 채팅 하나가 열립니다. 첫 클릭은 `~/Assistant` 폴더를 만들고, 이를 “Assistant” 프로젝트로 추가하고, workspace-write 권한 모드와 dsh의 기본 모델로 채팅을 시작합니다. 이후의 클릭은 매번 같은 채팅을 엽니다(보관된 채팅은 돌아오고, 삭제된 채팅은 다시 만들어집니다). 미리 알림을 부탁하면(“2분 뒤에 물 마시라고 알려 줘”) dsh의 예약 작업을 사용합니다. 그래서 그 시각에 미리 알림이 채팅을 실행하고, 모바일 연결이 켜져 있으면 Tether가 “Turn finished” 알림을 보냅니다. 웹 검색을 부탁하거나 다른 채팅에 대해 물어볼 수도 있습니다. 모든 프로젝트의 채팅(실행 중, 사용자를 기다림, 유휴)을 나열하고 한 채팅의 최신 메시지를 읽을 수 있습니다. 또한 채팅에 메시지를 보내고, 프로젝트에서 새 채팅을 시작하고, 실행 중인 채팅을 중지하거나 채팅을 보관할 수 있습니다. 이 네 가지 작업은 각각 먼저 dsh의 승인 카드를 보여 주며(Tether에서도), **한 번 허용**을 클릭하기 전에는 아무 일도 일어나지 않습니다. 삭제 도구는 없습니다. 이 도구와 짧은 지침은 이 채팅에만 있습니다. 웹 페이지나 다른 채팅에서 읽은 텍스트는 명령이 아니라 데이터로 취급됩니다. 매번 알려 주는 대신 프로필을 이 프로젝트의 메모리(**프로젝트 메모리**, 주제 “profil”)에 저장해 두세요. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="스크린샷: 어시스턴트"></a> |
|
|
79
79
|
| **프로젝트 메모리** | <a id="feature-projectmemory"></a>기본적으로 꺼져 있습니다. **설정 → Composer Plus**에서 켜세요. 프로젝트 폴더마다 자체 메모리가 있으며, 그 프로젝트의 이후 채팅이 읽습니다. DS Bot이 Bot마다 메모리를 두는 것과 같습니다. 턴이 끝날 때마다 채팅의 모델을 한 번 호출해 새 메시지(되돌린 메시지 제외)를 읽고, 오래 유지되는 선호, 결정, 사실을 짧은 메모로 저장하며, 오래된 메모를 바꾸거나 지웁니다. 에이전트도 직접 메모를 저장, 삭제, 검색할 수 있습니다(`memory_remember`, `memory_forget`, `memory_recall`). 메모는 전역일 수도 있으며, 이때는 모든 프로젝트가 읽습니다. 새 채팅은 시스템 프롬프트에서 메모를 받습니다. 나중에 저장한 메모는 다음 채팅부터 보입니다. 파일은 dsh 홈 폴더의 Markdown(`storages/dsh-composer-plus/memory/`)이며 프로젝트 폴더에는 절대 저장되지 않습니다. 같은 줄의 **메모리 열기**는 저장된 모든 메모를 프로젝트별(및 전역 메모리)로 묶어 보여 주며 필터도 있습니다. 바꿀 내용을 자신의 말로 적고(예: "yarn 대신 pnpm을 써") **변경 미리 보기**를 누르세요. dsh의 기본 모델이 변경을 제안하고, **적용**을 눌러야만 저장됩니다. Tether에서는: 채팅 제목 메뉴 → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="스크린샷: 프로젝트 메모리"></a> |
|
|
80
80
|
| **메모리 버전 기록** | <a id="feature-memoryhistory"></a>**프로젝트 메모리** 가 켜져 있는 동안 기본으로 켜집니다. 메모리를 저장할 때마다(에이전트, 턴 후 검토, **메모리 열기**) 저장 전 메모의 사본이 보관됩니다. **메모리 열기** 에서 프로젝트나 **전역 메모리** 를 선택한 다음 **기록** 을 누르면 날짜별 버전과 각 버전 뒤에 메모리를 바꾼 주체가 표시됩니다. 버전을 선택하면 복원 시 바뀌는 내용을 diff로 보고 **복원** 할 수 있습니다. 복원 전의 메모도 보관되므로 복원을 되돌릴 수 있습니다. 메모리마다 최신 50개 버전이 남습니다. Tether에서는: 채팅 제목 메뉴 → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="스크린샷: 메모리 버전 기록"></a> |
|
|
81
81
|
| **메모리를 AGENTS.md로 내보내기** | <a id="feature-memoryexport"></a>**메모리 열기** 에서 프로젝트를 선택한 다음 **AGENTS.md로 내보내기** 를 누르면 그 프로젝트의 메모가 폴더의 `AGENTS.md` 에 있는 표시된 섹션에 기록됩니다. 커밋해서 팀이나 다른 에이전트 도구와 공유할 수 있습니다. 먼저 변경 내용을 diff로 보고, **AGENTS.md 쓰기** 를 눌러야만 저장됩니다. 다음 내보내기는 이 섹션만 바꿉니다. 전역 메모리, 출처, 날짜는 넣지 않습니다. Tether에서는: 채팅 제목 메뉴 → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="스크린샷: 메모리를 AGENTS.md로 내보내기"></a> |
|
|
@@ -226,7 +226,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
|
|
|
226
226
|
- **채팅 행에 브랜치 배지가 없음:** 사이드바가 “하나의 목록” 보기가 아니거나(“작업 공간”과 “작업 공간 트리”에서는 어떤 채팅 행에도 배지가 없음), 이 버전을 설치한 뒤 그 채팅에 턴이 없었거나, 폴더가 git 저장소가 아니거나, **채팅 행의 Git 브랜치**가 꺼져 있습니다. 업데이트한 뒤에는 dsh를 다시 시작하세요(브랜치는 Host 쪽이 기록합니다).
|
|
227
227
|
- **목표 확인에 테스트가 종료 코드 127 또는 "not found"로 끝났다고 표시됨:** Finder나 Dock에서 시작한 dsh는 터미널보다 PATH가 짧을 수 있어서 `npm`, `pnpm`, `cargo`를 찾지 못합니다. 터미널에서 dsh를 시작하거나, **목표 확인** → **편집**에서 전체 경로를 쓴 테스트 명령을 직접 정하세요. **지금 실행**을 누르면 결과가 바로 표시됩니다.
|
|
228
228
|
- **목표가 닫히지 않고 에이전트가 계속 작업함:** **목표 확인**이 실패한 테스트나 남은 작업을 찾았습니다. 목표 아래의 행에 이유가 표시됩니다(자세한 내용은 결과에 포인터를 올려 보세요). 원인이나 테스트 명령을 고치거나, `/goal` 또는 목표 바로 목표를 직접 완료하세요(이 완료는 확인하지 않습니다).
|
|
229
|
-
- **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.24.
|
|
229
|
+
- **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.24.1`). 위의 설치 안내를 참고하세요.
|
|
230
230
|
- **지금 백업에서 "다른 백업 작업이 실행 중입니다"라고 표시됨:** 다른 dsh 창이나 복구 콘솔에서 작업이 실행 중입니다(둘은 백업 폴더의 잠금 파일 `.composer-plus.lock`을 함께 씁니다). 작업이 끝날 때까지 기다리세요. 실행 중인 작업이 없으면, 다음에 클릭할 때 종료된 프로세스의 잠금을 넘겨받습니다.
|
|
231
231
|
- **복구 콘솔에 "dsh is running"이라고 표시됨:** 먼저 dsh를 종료하세요. dsh가 정말 닫혀 있다면, 메시지에 나온 파일은 비정상 종료로 남은 것입니다. 그 파일을 삭제하고 다시 시도하세요.
|
|
232
232
|
- **복원 후 dsh가 시작되지 않거나 플러그인이 없음:** 프로필의 플러그인 패키지를 다시 설치해야 합니다. 복구 콘솔이 복원 후에 이를 제안합니다. 또는 콘솔이 나열하는 `$DSH_HOME/profiles/` 아래의 각 폴더에서 `pnpm install`을 실행하세요. vault에 없던 비밀 값(다른 컴퓨터)은 다시 입력해야 합니다. 콘솔이 그 목록을 보여 줍니다.
|
|
@@ -350,7 +350,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
|
|
|
350
350
|
|
|
351
351
|
**모든 채팅을 칸반 보드로 보고 거기서 새 채팅을 시작할 수 있나요?** 네, **작업 보드**(기본적으로 켜짐)로 가능합니다. 왼쪽 사이드바에서 여세요. 각 채팅은 **진행 중**, **검토**(사용자를 기다림) 또는 **완료**에 있는 카드입니다. **새 작업**은 프로젝트에서 dsh의 새 채팅을 열고, 첫 메시지를 보내면 보드로 돌아옵니다. 주황색 카드에서 **답변**을 클릭하면 채팅을 열지 않고 답할 수 있습니다. **완료**의 **모두 빼기**는 먼저 확인을 묻고, 읽은 끝난 카드를 보드에서 뺍니다. **실행 취소**와 **뺀 카드 (N)**로 카드를 되돌릴 수 있으며, 채팅은 dsh에 남습니다.
|
|
352
352
|
|
|
353
|
-
**알림을 주고 다른 채팅도 관리해 주는 개인 어시스턴트 채팅을 쓸 수 있나요?** 네, **어시스턴트**(기본적으로
|
|
353
|
+
**알림을 주고 다른 채팅도 관리해 주는 개인 어시스턴트 채팅을 쓸 수 있나요?** 네, **어시스턴트**(기본적으로 켜짐)로 가능합니다. 왼쪽 사이드바에서 **어시스턴트**를 클릭하세요. dsh의 예약 작업으로 미리 알림을 설정하고, 웹을 검색하고, 채팅을 나열하고 읽습니다. 채팅에 메시지를 보내거나 채팅을 시작, 중지, 보관하는 일은 사용자가 승인한 뒤에만 합니다. 프로필은 그 프로젝트 메모리에 “profil” 주제로 저장해 두세요.
|
|
354
354
|
|
|
355
355
|
**dsh-backup처럼 dsh에서 채팅과 설정을 백업할 수 있나요?** 네. **설정 → Composer Plus → 백업 → 지금 백업**을 사용하세요. 같은 아카이브 형식으로 같은 폴더(`~/Desktop/dsh-backups`)에 쓰므로, dsh-backup의 아카이브도 표시되고 복원할 수 있으며, dsh-backup은 삭제해도 됩니다. 정해진 일정으로 백업하려면 **자동 백업**을 켜세요.
|
|
356
356
|
|
|
@@ -504,7 +504,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
505
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
506
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
507
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
508
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
509
509
|
```
|
|
510
510
|
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
27
27
|
|
|
28
28
|
Then restart dsh. (The CLI can't install into the desktop profile; the app manages it.)
|
|
29
29
|
|
|
30
|
-
> dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.24.
|
|
30
|
+
> dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.24.1`.
|
|
31
31
|
|
|
32
32
|
## Features
|
|
33
33
|
|
|
@@ -73,7 +73,7 @@ Then restart dsh. (The CLI can't install into the desktop profile; the app manag
|
|
|
73
73
|
| **Protected files** | <a id="feature-protectedfiles"></a>On by default. The agent's own file tools cannot read or change files that match your patterns: `read`, `read_image` and `grep` on a file are refused for **read and write** patterns, and `write`, `edit` and `str_replace_editor` for both kinds. The agent reads why and is told to ask you. The defaults are `.env*`, `*.pem` and `*.key`. Settings → Composer Plus → **Protected files**: add a pattern (for example `published/**` or `config/*.yml`), click its kind to switch between **read and write** and **write only**, remove it with ✕, or **Use the defaults**. A pattern without `/` matches a file name in any folder. This is a guard rail, not a sandbox: a shell command (`cat .env`), a script or an MCP tool can still reach the file (see Limits). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Screenshot: Protected files"></a> |
|
|
74
74
|
| **Blocked commands** | <a id="feature-blockedcommands"></a>On by default, with an empty list. The agent's shell commands (`bash`, `pwsh`) cannot run a command that matches your rules: a **block** rule refuses the call (the agent reads why and is told to ask you), an **ask first** rule shows dsh's approval card, and the command runs only when you allow it. Settings → Composer Plus → **Blocked commands**: type a rule (for example `npm publish`, `git push --force` or `ssh *192.168.2.19`), click the kind to switch between **block** and **ask first**, then **Add**; click a rule's kind to change it, remove it with ✕. A rule is a command name and words that must come after it in this order; `*` matches any text. It also finds the command after `&&`, `;`, `\|`, inside `$(…)`, `bash -c "…"` or `eval`, and after `sudo` or `env`. This is a guard rail, not a sandbox: a variable (`$CMD`), a script file or another program can still run the command (see Limits). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Screenshot: Blocked commands"></a> |
|
|
75
75
|
| **Task board** | <a id="feature-taskboard"></a>Left sidebar → **Task board**, or press `Cmd+Shift+K` (`Ctrl+Shift+K` on Windows and Linux) anywhere in dsh. A kanban board of your dsh chats with the live state that the sidebar shows: a chat that waits for your approval, answer or plan review is in **Review** with an orange dot, a running chat is in **Doing**, a finished chat that you did not open yet is in **Done** (green). When you open a chat, its card leaves **Done** by itself; click **Recently finished (N)** under the green cards to see the finished chats that you read (the newest 10, then **Show N older**; open or closed is kept on this device). A chat that finishes while it is open behind the board (a **New task**) stays green until you open it. Click the project name at the top of the board to open the project list, then pick a project or **All projects**; a Branch per chat folder counts as its project. The list closes after the pick, with `Esc` or with a click outside it. Type in **Search projects** at the top of the list to find a project by its name (case and accents do not matter; `Esc` empties the box) and press `Enter` to pick the first match, and click **Active in the last 2 hours** to show only projects with a chat that waits, runs, finished unseen or changed in the last 2 hours (kept on this device). **New task** (or `n`) opens dsh's own new chat in the project that the board shows (with **All projects**, the project that dsh's New session picks), so you can add files, use commands and pick the model as in any chat. When your first message goes, the board comes back by itself. Until then the chat waits at the top of **Doing** as **New task**: click it to write the first message. A project with a chat that waits for you has an orange dot in the project list (the project name at the top has it too while any chat waits). dsh names the chat and the chat's model writes up to 3 tags from that message. Click a card to open its chat. Click an orange card (or its **Answer**) to answer it on the board; the panel has **Open chat** for the whole chat: **Reject** or **Allow once**, **Approve** or **Request changes** for a plan, or the options and your own text for a question. Click **×** on a finished card to take it off the board, or open **Recently finished** and click **Clear all** at the top of **Done** to take those cards off it: it first shows how many cards of which project go, and unread (green) cards stay. For 8 seconds after, **Undo** puts the cards back; **Removed (N)** under **Done** lists the cards that are off the board, and **Put back** shows one in **Done** again. No chat is deleted: the chats stay in dsh's sidebar, the board remembers this after a restart (Tether shows the same board), and a chat that runs again comes back. Point at a card in **Doing** (or move the keyboard focus to it) to see its progress: how long it runs, the step of its todo list, the tool that runs now and the agent's last line. In Settings → Composer Plus → Task board, **Progress on hover** picks **Fast (no AI)** (the default: it reads the chat only) or **AI summary** (one short call to the chat's model also writes one or two sentences). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Screenshot: Task board"></a> |
|
|
76
|
-
| **Assistant** | <a id="feature-assistant"></a>
|
|
76
|
+
| **Assistant** | <a id="feature-assistant"></a>On by default (switch it off in **Settings → Composer Plus**). Click **Assistant** in the left sidebar (right under **Task board**): it opens one lasting chat that you use as your personal assistant, like a ChatGPT or Grok chat. The first click makes the folder `~/Assistant`, adds it as the project "Assistant" and starts the chat with the workspace-write permission mode and dsh's default model; each later click opens the same chat (an archived one comes back, a deleted one is made again). Ask it to remind you ("remind me to drink water in 2 minutes"): it uses dsh's scheduled tasks, so the reminder runs the chat at that time, and Tether sends its "Turn finished" notification when Mobile connect is on. Ask it to search the web, or about your other chats: it can list the chats of all projects (running, waiting for you or idle) and read the newest messages of one. It can also send a message to a chat, start a new chat in a project, stop a running chat or archive one: each of these four actions shows dsh's approval card first (also in Tether), and nothing happens until you click **Allow once**. It has no delete tool. Only this chat has these tools and its short instructions; text that it reads in a web page or another chat counts as data, not as an order. Keep your profile in this project's memory (**Project memory**, topic "profil") instead of telling it each time. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Screenshot: Assistant"></a> |
|
|
77
77
|
| **Project memory** | <a id="feature-projectmemory"></a>Off by default: switch it on in **Settings → Composer Plus**. Each project folder gets its own memory, which later chats of that project read, as DS Bot keeps one per Bot. After each finished turn, one call to the chat's model reads the new messages (not rolled-back ones) and keeps your lasting preferences, decisions and facts as short notes, and changes or removes old ones. The agent can also save, remove and search notes itself (`memory_remember`, `memory_forget`, `memory_recall`). A note can also be global: every project reads it. A new chat gets the notes in its system prompt; a note saved later shows from the next chat. The files are Markdown under the dsh home (`storages/dsh-composer-plus/memory/`), never in the project folder. **Open memory** in the same row shows every saved note, grouped by project (and the global memory), with a filter. Write what to change in your own words (for example "I switched from yarn to pnpm"), then **Preview changes**: dsh's default model proposes the changes, and only **Apply** saves them. In Tether: chat title menu → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Screenshot: Project memory"></a> |
|
|
78
78
|
| **Memory version history** | <a id="feature-memoryhistory"></a>On by default while **Project memory** is on. Before each save of the memory (the agent, the review after a turn, **Open memory**), a copy of the notes as they were is kept. In **Open memory**, select a project or **Global memory**, then **History**: the versions by date and who changed the memory after each one. Select a version to see what a restore changes as a diff, then **Restore**. The notes before a restore are kept too, so you can undo it. The newest 50 versions of each memory stay. In Tether: chat title menu → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Screenshot: Memory version history"></a> |
|
|
79
79
|
| **Export memory to AGENTS.md** | <a id="feature-memoryexport"></a>In **Open memory**, select a project, then **Export to AGENTS.md**: the notes of that project go into a marked section of `AGENTS.md` in its folder, so you can commit them and share them with your team and other agent tools. You see the change as a diff first; only **Write AGENTS.md** saves it. The next export replaces only that section. The global memory, sources and dates stay out. In Tether: chat title menu → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Screenshot: Export memory to AGENTS.md"></a> |
|
|
@@ -224,7 +224,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
|
|
|
224
224
|
- **No branch pill on a chat row:** the sidebar is not in “In one list” (in “WorkSpace” and “Workspace Tree”, no chat row shows a pill), the chat had no turn since you installed this version, its folder is not a git repository, or **Git branch on chat rows** is off. After an update, restart dsh (the Host half records the branch).
|
|
225
225
|
- **Goal check says the test exited with code 127 or "not found":** dsh started from the Finder or the Dock can have a shorter PATH than your terminal, so it does not find `npm`, `pnpm` or `cargo`. Start dsh from a terminal, or set your own test command with the full path under **Goal check** → **Edit**. **Run now** shows the result at once.
|
|
226
226
|
- **The goal does not close and the agent keeps working:** **Goal check** found a failing test or missing work; the row under the goal shows why (hover the result for the details). Fix the cause or the test command, or complete the goal yourself with `/goal` or the goal bar (that is not checked).
|
|
227
|
-
- **Install fails right after a release:** add the version (`dsh-composer-plus@1.24.
|
|
227
|
+
- **Install fails right after a release:** add the version (`dsh-composer-plus@1.24.1`), see the install note above.
|
|
228
228
|
- **Back up now says "another backup action is running":** an action runs in another dsh window or in the rescue console (they share a lock file, `.composer-plus.lock`, in the backup folder). Wait for it. If no action runs, the lock of a closed process is taken over at the next click.
|
|
229
229
|
- **The rescue console says "dsh is running":** quit dsh first. If dsh is really closed, the file named in the message is left from a crash: remove it and try again.
|
|
230
230
|
- **After a restore, dsh does not start or a plugin is missing:** the plugin packages of a profile must be installed again. The rescue console offers it after a restore; or run `pnpm install` in each folder under `$DSH_HOME/profiles/` that it lists. Secrets that were not in the vault (another computer) must be entered again: the console lists them.
|
|
@@ -348,7 +348,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
|
|
|
348
348
|
|
|
349
349
|
**Can I see all my chats as a kanban board and start new ones from it?** Yes, with **Task board** (on by default): open it in the left sidebar. Each chat is a card in **Doing**, **Review** (it waits for you) or **Done**. **New task** opens dsh's new chat in the project, and the board comes back when your first message goes; click **Answer** on an orange card to answer it without opening the chat. **Clear all** in **Done** asks first and takes the finished cards that you read off the board; **Undo** and **Removed (N)** bring them back, and the chats stay in dsh.
|
|
350
350
|
|
|
351
|
-
**Can I have a personal assistant chat that reminds me and manages my other chats?** Yes, with **Assistant** (
|
|
351
|
+
**Can I have a personal assistant chat that reminds me and manages my other chats?** Yes, with **Assistant** (on by default): click **Assistant** in the left sidebar. It sets reminders with dsh's scheduled tasks, searches the web, lists and reads your chats, and sends a message to a chat or starts, stops or archives one only after you approve it. Keep your profile in its project memory, topic "profil".
|
|
352
352
|
|
|
353
353
|
**Can dsh back up my chats and settings, like dsh-backup?** Yes: **Settings → Composer Plus → Backup → Back up now**. It writes the same archive format into the same folder (`~/Desktop/dsh-backups`), so dsh-backup's archives show and restore too, and you can remove dsh-backup. Switch on **Automatic backup** for a schedule.
|
|
354
354
|
|
|
@@ -502,7 +502,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
502
502
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
503
503
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
505
|
-
# Assistant:
|
|
505
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
506
506
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
507
507
|
```
|
|
508
508
|
|
package/README.pt-BR.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem gerencia esse perfil é o app.)
|
|
31
31
|
|
|
32
|
-
> O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.24.
|
|
32
|
+
> O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.24.1`.
|
|
33
33
|
|
|
34
34
|
## Recursos
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
|
|
|
75
75
|
| **Arquivos protegidos** | <a id="feature-protectedfiles"></a>Ativado por padrão. As ferramentas de arquivo do próprio agente não podem ler nem alterar arquivos que correspondem aos seus padrões: `read`, `read_image` e `grep` em um arquivo são recusados para padrões de **leitura e gravação**, e `write`, `edit` e `str_replace_editor` para os dois tipos. O agente lê o motivo e é orientado a perguntar a você. Os padrões iniciais são `.env*`, `*.pem` e `*.key`. Configurações → Composer Plus → **Arquivos protegidos**: adicione um padrão (por exemplo `published/**` ou `config/*.yml`), clique no tipo dele para alternar entre **leitura e gravação** e **somente gravação**, remova-o com ✕ ou clique em **Usar os valores padrão**. Um padrão sem `/` corresponde a um nome de arquivo em qualquer pasta. Isto é uma barreira de proteção, não um sandbox: um comando de shell (`cat .env`), um script ou uma ferramenta MCP ainda podem acessar o arquivo (veja Limites). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Captura de tela: Arquivos protegidos"></a> |
|
|
76
76
|
| **Comandos bloqueados** | <a id="feature-blockedcommands"></a>Ativado por padrão, com a lista vazia. Os comandos de shell do agente (`bash`, `pwsh`) não podem executar um comando que corresponda às suas regras: uma regra **bloquear** recusa a chamada (o agente lê o motivo e é orientado a perguntar a você), uma regra **perguntar antes** mostra o cartão de aprovação do dsh, e o comando só é executado quando você permite. Configurações → Composer Plus → **Comandos bloqueados**: digite uma regra (por exemplo `npm publish`, `git push --force` ou `ssh *192.168.2.19`), clique no tipo para alternar entre **bloquear** e **perguntar antes** e depois clique em **Adicionar**; clique no tipo de uma regra para mudá-lo e remova-a com ✕. Uma regra é um nome de comando e palavras que precisam vir depois dele nesta ordem; `*` corresponde a qualquer texto. A verificação também encontra o comando depois de `&&`, `;`, `\|`, dentro de `$(…)`, `bash -c "…"` ou `eval`, e depois de `sudo` ou `env`. Isto é uma barreira de proteção, não um sandbox: uma variável (`$CMD`), um arquivo de script ou outro programa ainda podem executar o comando (veja Limites). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Captura de tela: Comandos bloqueados"></a> |
|
|
77
77
|
| **Quadro de tarefas** | <a id="feature-taskboard"></a>Barra lateral esquerda → **Quadro de tarefas**, ou pressione `Cmd+Shift+K` (`Ctrl+Shift+K` no Windows e no Linux) em qualquer lugar do dsh. Um quadro kanban dos seus chats do dsh com o estado ao vivo que a barra lateral mostra: um chat que espera sua aprovação, sua resposta ou a revisão de um plano fica em **Em revisão** com um ponto laranja, um chat em execução fica em **Fazendo** e um chat concluído que você ainda não abriu fica em **Concluído** (verde). Quando você abre um chat, o cartão dele sai de **Concluído** sozinho; clique em **Concluídos recentemente (N)**, abaixo dos cartões verdes, para ver os chats concluídos que você já leu (os 10 mais recentes e depois **Mostrar N mais antigas**; aberto ou fechado fica salvo neste dispositivo). Um chat que termina enquanto está aberto atrás do quadro (uma **Nova tarefa**) fica verde até você abri-lo. Clique no nome do projeto, no topo do quadro, para abrir a lista de projetos e escolha um projeto ou **Todos os projetos**; uma pasta de “Um branch por chat” conta como o projeto dela. A lista fecha após a escolha, com `Esc` ou com um clique fora dela. Digite em **Buscar projetos**, no topo da lista, para encontrar um projeto pelo nome (maiúsculas e acentos não importam; `Esc` limpa a caixa), pressione `Enter` para escolher a primeira correspondência e clique em **Ativos nas últimas 2 horas** para mostrar só os projetos com um chat que espera, está em execução, terminou sem ser visto ou mudou nas últimas 2 horas (fica salvo neste dispositivo). **Nova tarefa** (ou `n`) abre o próprio novo chat do dsh no projeto que o quadro mostra (com **Todos os projetos**, o projeto que a Nova sessão do dsh escolhe), então você pode adicionar arquivos, usar comandos e escolher o modelo como em qualquer chat. Quando a sua primeira mensagem é enviada, o quadro volta sozinho. Até lá, o chat espera no topo de **Fazendo** como **Nova tarefa**: clique nele para escrever a primeira mensagem. Um projeto com um chat que espera por você tem um ponto laranja na lista de projetos (o nome do projeto no topo também tem, enquanto algum chat espera). O dsh dá nome ao chat e o modelo do chat escreve até 3 etiquetas a partir dessa mensagem. Clique em um cartão para abrir o chat dele. Clique em um cartão laranja (ou em **Responder**) para responder no quadro; o painel tem **Abrir chat** para ver o chat inteiro: **Rejeitar** ou **Permitir uma vez**, **Aprovar** ou **Solicitar alterações** para um plano, ou as opções e o seu próprio texto para uma pergunta. Clique em **×** em um cartão concluído para tirá-lo do quadro, ou abra **Concluídos recentemente** e clique em **Limpar tudo**, no topo de **Concluído**, para tirar esses cartões do quadro: primeiro ele mostra quantos cartões de qual projeto saem, e os cartões não lidos (verdes) ficam. Nos 8 segundos seguintes, **Desfazer** devolve os cartões; **Retirados (N)**, abaixo de **Concluído**, lista os cartões que estão fora do quadro, e **Devolver** mostra um deles de novo em **Concluído**. Nenhum chat é apagado: os chats continuam na barra lateral do dsh, o quadro se lembra disso depois de reiniciar (o Tether mostra o mesmo quadro) e um chat que é executado de novo volta ao quadro. Aponte para um cartão em **Fazendo** (ou mova o foco do teclado até ele) para ver o progresso: há quanto tempo ele está em execução, a etapa da sua lista de tarefas pendentes, a ferramenta que está em execução agora e a última linha do agente. Em Configurações → Composer Plus → Quadro de tarefas, **Progresso ao passar o cursor** escolhe **Rápido (sem IA)** (o padrão: só lê o chat) ou **Resumo com IA** (uma chamada curta ao modelo do chat também escreve uma ou duas frases). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Captura de tela: Quadro de tarefas"></a> |
|
|
78
|
-
| **Assistente** | <a id="feature-assistant"></a>
|
|
78
|
+
| **Assistente** | <a id="feature-assistant"></a>Ativado por padrão (desative em **Configurações → Composer Plus**). Clique em **Assistente** na barra lateral esquerda (logo abaixo de **Quadro de tarefas**): ele abre um chat permanente que você usa como seu assistente pessoal, como um chat do ChatGPT ou do Grok. O primeiro clique cria a pasta `~/Assistant`, a adiciona como o projeto "Assistant" e inicia o chat com o modo de permissão workspace-write e o modelo padrão do dsh; cada clique seguinte abre o mesmo chat (um chat arquivado volta, um excluído é criado de novo). Peça um lembrete (“me lembre de beber água daqui a 2 minutos”): ele usa as tarefas agendadas do dsh, então o lembrete executa o chat nessa hora, e o Tether envia a notificação "Turn finished" quando a Conexão móvel está ativada. Peça uma pesquisa na web ou pergunte sobre seus outros chats: ele pode listar os chats de todos os projetos (em execução, esperando por você ou ociosos) e ler as mensagens mais recentes de um deles. Ele também pode enviar uma mensagem a um chat, iniciar um novo chat em um projeto, parar um chat em execução ou arquivar um: cada uma dessas quatro ações mostra primeiro o cartão de aprovação do dsh (também no Tether), e nada acontece até você clicar em **Permitir uma vez**. Ele não tem ferramenta de exclusão. Só este chat tem essas ferramentas e suas instruções curtas; um texto que ele lê em uma página web ou em outro chat conta como dado, não como ordem. Guarde seu perfil na memória deste projeto (**Memória do projeto**, tema "profil") em vez de contar a ele toda vez. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Captura de tela: Assistente"></a> |
|
|
79
79
|
| **Memória do projeto** | <a id="feature-projectmemory"></a>Desativado por padrão: ative em **Configurações → Composer Plus**. Cada pasta de projeto tem a própria memória, que os chats seguintes desse projeto leem, como o DS Bot guarda uma por Bot. Depois de cada turno concluído, uma chamada ao modelo do chat lê as mensagens novas (não as revertidas), guarda suas preferências, decisões e fatos duradouros como notas curtas, e muda ou remove as antigas. O agente também pode salvar, remover e buscar notas sozinho (`memory_remember`, `memory_forget`, `memory_recall`). Uma nota também pode ser global: todos os projetos a leem. Um chat novo recebe as notas no prompt de sistema; uma nota salva depois aparece a partir do chat seguinte. Os arquivos são Markdown na pasta inicial do dsh (`storages/dsh-composer-plus/memory/`), nunca na pasta do projeto. **Abrir memória**, na mesma linha, mostra todas as notas salvas agrupadas por projeto (e a memória global), com um filtro. Escreva com suas palavras o que mudar (por exemplo "troquei yarn por pnpm") e toque em **Ver prévia das mudanças**: o modelo padrão do dsh propõe as mudanças e só **Aplicar** as salva. No Tether: menu do título do chat → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Captura de tela: Memória do projeto"></a> |
|
|
80
80
|
| **Histórico de versões da memória** | <a id="feature-memoryhistory"></a>Ativado por padrão enquanto **Memória do projeto** está ativada. Antes de cada gravação da memória (o agente, a revisão após um turno, **Abrir memória**), uma cópia das notas como estavam é guardada. Em **Abrir memória**, selecione um projeto ou **Memória global** e depois **Histórico**: as versões por data e quem mudou a memória depois de cada uma. Selecione uma versão para ver como diff o que uma restauração muda e depois **Restaurar**. As notas de antes de uma restauração também são guardadas, então você pode desfazê-la. As 50 versões mais recentes de cada memória ficam guardadas. No Tether: menu do título do chat → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Captura de tela: Histórico de versões da memória"></a> |
|
|
81
81
|
| **Exportar a memória para AGENTS.md** | <a id="feature-memoryexport"></a>Em **Abrir memória**, selecione um projeto e depois **Exportar para AGENTS.md**: as notas desse projeto vão para uma seção marcada de `AGENTS.md` na pasta dele, para você fazer commit e compartilhar com a equipe e outras ferramentas de agentes. Primeiro você vê a mudança como diff; só **Gravar AGENTS.md** salva. A próxima exportação substitui só essa seção. A memória global, as fontes e as datas ficam de fora. No Tether: menu do título do chat → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Captura de tela: Exportar a memória para AGENTS.md"></a> |
|
|
@@ -226,7 +226,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
226
226
|
- **Nenhuma etiqueta de branch em uma linha de chat:** a barra lateral não está em “Em uma única lista” (em “Workspace” e “Árvore de workspaces”, nenhuma linha de chat mostra uma etiqueta), o chat não teve nenhum turno desde que você instalou esta versão, a pasta dele não é um repositório git, ou **Branch do Git nas linhas de chat** está desativado. Depois de uma atualização, reinicie o dsh (a parte Host registra o branch).
|
|
227
227
|
- **Verificação da meta diz que o teste saiu com o código 127 ou "not found":** o dsh iniciado pelo Finder ou pelo Dock pode ter um PATH mais curto que o do seu terminal, então ele não encontra `npm`, `pnpm` ou `cargo`. Inicie o dsh a partir de um terminal ou defina o seu próprio comando de teste com o caminho completo em **Verificação da meta** → **Editar**. **Executar agora** mostra o resultado na hora.
|
|
228
228
|
- **A meta não fecha e o agente continua trabalhando:** **Verificação da meta** encontrou um teste com falha ou trabalho faltando; a linha abaixo da meta mostra o motivo (passe o mouse sobre o resultado para ver os detalhes). Corrija a causa ou o comando de teste, ou conclua a meta você mesmo com `/goal` ou com a barra da meta (isso não é verificado).
|
|
229
|
-
- **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.24.
|
|
229
|
+
- **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.24.1`); veja a nota de instalação acima.
|
|
230
230
|
- **Fazer backup agora diz "Outra ação de backup está em andamento":** uma ação está em execução em outra janela do dsh ou no console de resgate (eles compartilham um arquivo de bloqueio, `.composer-plus.lock`, na pasta de backups). Aguarde até ela terminar. Se nenhuma ação estiver em execução, o próximo clique assume o bloqueio de um processo encerrado.
|
|
231
231
|
- **O console de resgate diz "dsh is running":** feche o dsh primeiro. Se o dsh estiver mesmo fechado, o arquivo citado na mensagem sobrou de uma falha: remova-o e tente de novo.
|
|
232
232
|
- **Depois de uma restauração, o dsh não inicia ou falta um plugin:** os pacotes de plugin de um perfil precisam ser instalados de novo. O console de resgate oferece isso depois de uma restauração; ou execute `pnpm install` em cada pasta de `$DSH_HOME/profiles/` que ele listar. Os segredos que não estavam no vault (outro computador) precisam ser informados de novo: o console os lista.
|
|
@@ -350,7 +350,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
350
350
|
|
|
351
351
|
**Posso ver todos os meus chats como um quadro kanban e iniciar novos chats a partir dele?** Sim, com **Quadro de tarefas** (ativado por padrão): abra-o na barra lateral esquerda. Cada chat é um cartão em **Fazendo**, **Em revisão** (ele espera por você) ou **Concluído**. **Nova tarefa** abre o novo chat do dsh no projeto, e o quadro volta quando a sua primeira mensagem é enviada; clique em **Responder** em um cartão laranja para responder sem abrir o chat. **Limpar tudo**, em **Concluído**, pergunta antes e tira do quadro os cartões concluídos que você leu; **Desfazer** e **Retirados (N)** os trazem de volta, e os chats continuam no dsh.
|
|
352
352
|
|
|
353
|
-
**Posso ter um chat de assistente pessoal que me lembra de coisas e gerencia meus outros chats?** Sim, com **Assistente** (
|
|
353
|
+
**Posso ter um chat de assistente pessoal que me lembra de coisas e gerencia meus outros chats?** Sim, com **Assistente** (ativado por padrão): clique em **Assistente** na barra lateral esquerda. Ele cria lembretes com as tarefas agendadas do dsh, pesquisa na web, lista e lê seus chats, e envia uma mensagem a um chat ou inicia, para ou arquiva um só depois que você aprova. Guarde seu perfil na memória do projeto dele, tema "profil".
|
|
354
354
|
|
|
355
355
|
**O dsh consegue fazer backup dos meus chats e configurações, como o dsh-backup?** Sim: **Configurações → Composer Plus → Backup → Fazer backup agora**. Ele grava o mesmo formato de arquivo compactado na mesma pasta (`~/Desktop/dsh-backups`), então os arquivos compactados do dsh-backup também aparecem e podem ser restaurados, e você pode remover o dsh-backup. Ative **Backup automático** para ter backups agendados.
|
|
356
356
|
|
|
@@ -504,7 +504,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
505
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
506
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
507
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
508
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
509
509
|
```
|
|
510
510
|
|
package/README.ru.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
|
|
31
31
|
|
|
32
|
-
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.24.
|
|
32
|
+
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.24.1`.
|
|
33
33
|
|
|
34
34
|
## Функции
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
75
75
|
| **Защищённые файлы** | <a id="feature-protectedfiles"></a>Включено по умолчанию. Собственные файловые инструменты агента не могут читать или изменять файлы, подходящие под ваши шаблоны: `read`, `read_image` и `grep` по файлу отклоняются для шаблонов **чтение и запись**, а `write`, `edit` и `str_replace_editor` — для обоих видов. Агент читает причину, и ему предлагается спросить вас. Шаблоны по умолчанию: `.env*`, `*.pem` и `*.key`. Настройки → Composer Plus → **Защищённые файлы**: добавьте шаблон (например, `published/**` или `config/*.yml`), нажмите на его вид, чтобы переключить между **чтение и запись** и **только запись**, удалите его кнопкой ✕ или нажмите **Использовать значения по умолчанию**. Шаблон без `/` подходит к имени файла в любой папке. Это ограждение, а не песочница: команда оболочки (`cat .env`), скрипт или инструмент MCP всё равно могут добраться до файла (см. «Ограничения»). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Снимок экрана: Защищённые файлы"></a> |
|
|
76
76
|
| **Заблокированные команды** | <a id="feature-blockedcommands"></a>Включено по умолчанию, список изначально пуст. Команды оболочки агента (`bash`, `pwsh`) не могут запустить команду, подходящую под ваши правила: правило **блокировать** отклоняет вызов (агент читает причину, и ему предлагается спросить вас), правило **сначала спросить** показывает карточку одобрения dsh, и команда запускается, только когда вы её разрешите. Настройки → Composer Plus → **Заблокированные команды**: введите правило (например, `npm publish`, `git push --force` или `ssh *192.168.2.19`), нажмите на вид, чтобы переключить между **блокировать** и **сначала спросить**, затем нажмите **Добавить**; нажмите на вид правила, чтобы изменить его, удалите правило кнопкой ✕. Правило — это имя команды и слова, которые должны идти после него в этом порядке; `*` подходит к любому тексту. Функция также находит команду после `&&`, `;`, `\|`, внутри `$(…)`, `bash -c "…"` или `eval`, а также после `sudo` или `env`. Это ограждение, а не песочница: переменная (`$CMD`), файл скрипта или другая программа всё равно могут запустить команду (см. «Ограничения»). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Снимок экрана: Заблокированные команды"></a> |
|
|
77
77
|
| **Доска задач** | <a id="feature-taskboard"></a>Левая боковая панель → **Доска задач** или `Cmd+Shift+K` (`Ctrl+Shift+K` в Windows и Linux) в любом месте dsh. Канбан-доска ваших чатов dsh с тем же живым состоянием, что показывает боковая панель: чат, который ждёт вашего одобрения, ответа или проверки плана, находится в **На проверке** с оранжевой точкой, работающий чат — в **В работе**, завершённый чат, который вы ещё не открыли, — в **Готово** (зелёный). Когда вы открываете чат, его карточка сама уходит из **Готово**; нажмите **Недавно завершённые (N)** под зелёными карточками, чтобы увидеть прочитанные завершённые чаты (10 самых новых, затем **Показать более старые: N**; открыто или закрыто — запоминается на этом устройстве). Чат, который завершился, пока был открыт за доской (**Новая задача**), остаётся зелёным, пока вы его не откроете. Нажмите на название проекта вверху доски, чтобы открыть список проектов, и выберите проект или **Все проекты**; папка ветки для каждого чата считается частью своего проекта. Список закрывается после выбора, по `Esc` или по щелчку вне его. Введите текст в **Поиск проектов** вверху списка, чтобы найти проект по названию (регистр и диакритические знаки не важны; `Esc` очищает поле), нажмите `Enter`, чтобы выбрать первое совпадение, и нажмите **Активные за последние 2 часа**, чтобы показать только проекты с чатом, который ждёт, работает, завершился и ещё не просмотрен или изменился за последние 2 часа (настройка хранится на этом устройстве). **Новая задача** (или `n`) открывает собственный новый чат dsh в проекте, который показывает доска (при **Все проекты** — в проекте, который выбирает «Новый сеанс» dsh), поэтому вы можете добавлять файлы, использовать команды и выбирать модель, как в любом чате. Когда ваше первое сообщение отправлено, доска возвращается сама. До этого чат ждёт в самом верху столбца **В работе** как **Новая задача**: нажмите на него, чтобы написать первое сообщение. У проекта с чатом, который ждёт вас, в списке проектов есть оранжевая точка (пока какой-либо чат ждёт, она есть и у названия проекта вверху). dsh даёт чату название, а модель чата пишет до 3 тегов по этому сообщению. Нажмите на карточку, чтобы открыть её чат. Нажмите на оранжевую карточку (или на её **Ответить**), чтобы ответить прямо на доске; в панели есть **Открыть чат**, чтобы увидеть весь чат: **Отклонить** или **Разрешить один раз**, **Одобрить** или **Запросить изменения** для плана, либо варианты и ваш собственный текст для вопроса. Нажмите **×** на завершённой карточке, чтобы убрать её с доски, или откройте **Недавно завершённые** и нажмите **Очистить всё** вверху столбца **Готово**, чтобы убрать эти карточки с доски: сначала окно показывает, сколько карточек какого проекта уйдёт, а непрочитанные (зелёные) карточки остаются. В течение 8 секунд после этого кнопка **Отменить** возвращает карточки; **Убранные (N)** под столбцом **Готово** показывает список карточек, убранных с доски, а **Вернуть на доску** снова показывает одну из них в **Готово**. Ни один чат не удаляется: чаты остаются на боковой панели dsh, доска помнит это и после перезапуска (Tether показывает ту же доску), а чат, который снова запускается, возвращается на доску. Наведите указатель на карточку в **В работе** (или переведите на неё фокус клавиатуры), чтобы увидеть ход работы: сколько времени работает чат, шаг его списка задач, инструмент, который работает сейчас, и последнюю строку агента. В разделе Настройки → Composer Plus → Доска задач параметр **Ход работы при наведении** выбирает **Быстро (без ИИ)** (по умолчанию: только читает чат) или **Сводка ИИ** (один короткий вызов модели чата дополнительно пишет одно-два предложения). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Снимок экрана: Доска задач"></a> |
|
|
78
|
-
| **Ассистент** | <a id="feature-assistant"></a>По умолчанию
|
|
78
|
+
| **Ассистент** | <a id="feature-assistant"></a>По умолчанию включено (выключить можно в **Настройки → Composer Plus**). Нажмите **Ассистент** на левой боковой панели (сразу под **Доска задач**): откроется один постоянный чат, которым вы пользуетесь как личным ассистентом, как чатом ChatGPT или Grok. Первое нажатие создаёт папку `~/Assistant`, добавляет её как проект "Assistant" и запускает чат с режимом разрешений workspace-write и моделью dsh по умолчанию; каждое следующее нажатие открывает тот же чат (архивированный возвращается, удалённый создаётся заново). Попросите его напомнить вам что-нибудь («напомни мне выпить воды через 2 минуты»): он использует запланированные задачи dsh, поэтому в нужное время напоминание запускает чат, а Tether присылает своё уведомление "Turn finished", когда включено «Мобильное подключение». Попросите его поискать в интернете или спросите о ваших других чатах: он может показать список чатов всех проектов (выполняется, ждёт вас или простаивает) и прочитать последние сообщения одного из них. Он также может отправить сообщение в чат, начать новый чат в проекте, остановить выполняющийся чат или архивировать чат: перед каждым из этих четырёх действий сначала появляется карточка подтверждения dsh (также в Tether), и ничего не происходит, пока вы не нажмёте **Разрешить один раз**. Инструмента для удаления у него нет. Эти инструменты и короткие инструкции есть только у этого чата; текст, который он читает на веб-странице или в другом чате, считается данными, а не приказом. Храните свой профиль в памяти этого проекта (**Память проекта**, тема "profil"), чтобы не рассказывать о себе каждый раз. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Снимок экрана: Ассистент"></a> |
|
|
79
79
|
| **Память проекта** | <a id="feature-projectmemory"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. У каждой папки проекта своя память, которую читают следующие чаты этого проекта, так же как DS Bot хранит память для каждого бота. После каждого завершённого хода один вызов модели чата читает новые сообщения (без отменённых откатом), сохраняет ваши постоянные предпочтения, решения и факты как короткие заметки и изменяет или удаляет старые. Агент также может сам сохранять, удалять и искать заметки (`memory_remember`, `memory_forget`, `memory_recall`). Заметка может быть и глобальной: её читают все проекты. Новый чат получает заметки в системном промпте; заметка, сохранённая позже, появляется со следующего чата. Файлы хранятся в формате Markdown в домашней папке dsh (`storages/dsh-composer-plus/memory/`), никогда в папке проекта. Кнопка **Открыть память** в той же строке показывает все сохранённые заметки по проектам (и глобальную память), с фильтром. Опишите своими словами, что изменить (например, «я перешёл с yarn на pnpm»), затем нажмите **Предпросмотр изменений**: модель dsh по умолчанию предлагает изменения, а сохраняет их только **Применить**. В Tether: меню заголовка чата → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Снимок экрана: Память проекта"></a> |
|
|
80
80
|
| **История версий памяти** | <a id="feature-memoryhistory"></a>По умолчанию включено, пока включена **Память проекта**. Перед каждым сохранением памяти (агентом, проверкой после хода, через **Открыть память**) сохраняется копия заметок в прежнем виде. В **Открыть память** выберите проект или **Глобальная память**, затем **История**: версии по дате и кто изменил память после каждой. Выберите версию, чтобы увидеть в виде diff, что изменит восстановление, затем **Восстановить**. Заметки до восстановления тоже сохраняются, поэтому его можно отменить. Для каждой памяти остаются 50 последних версий. В Tether: меню заголовка чата → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Снимок экрана: История версий памяти"></a> |
|
|
81
81
|
| **Экспорт памяти в AGENTS.md** | <a id="feature-memoryexport"></a>В **Открыть память** выберите проект, затем **Экспорт в AGENTS.md**: заметки проекта попадут в отмеченный раздел `AGENTS.md` в его папке, чтобы вы могли закоммитить их и поделиться с командой и другими инструментами агентов. Сначала вы видите изменение в виде diff; сохраняет только **Записать AGENTS.md**. Следующий экспорт заменяет только этот раздел. Глобальная память, источники и даты не записываются. В Tether: меню заголовка чата → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Снимок экрана: Экспорт памяти в AGENTS.md"></a> |
|
|
@@ -226,7 +226,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
226
226
|
- **На строке чата нет метки ветки:** боковая панель не в режиме «Одним списком» (в режимах «По рабочей области» и «Дерево рабочих областей» ни одна строка чата не показывает метку), у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
|
|
227
227
|
- **Проверка цели сообщает, что тест завершился с кодом 127 или «not found»:** у dsh, запущенного из Finder или Dock, PATH может быть короче, чем в вашем терминале, поэтому он не находит `npm`, `pnpm` или `cargo`. Запустите dsh из терминала или задайте свою тестовую команду с полным путём в **Проверка цели** → **Изменить**. **Запустить сейчас** сразу показывает результат.
|
|
228
228
|
- **Цель не закрывается, и агент продолжает работать:** **Проверка цели** нашла непройденный тест или недоделанную работу; строка под целью показывает причину (наведите указатель на результат, чтобы увидеть подробности). Исправьте причину или тестовую команду либо завершите цель сами командой `/goal` или через панель цели (это не проверяется).
|
|
229
|
-
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.24.
|
|
229
|
+
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.24.1`), см. примечание об установке выше.
|
|
230
230
|
- **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
|
|
231
231
|
- **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
|
|
232
232
|
- **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
|
|
@@ -350,7 +350,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
350
350
|
|
|
351
351
|
**Можно ли видеть все мои чаты в виде канбан-доски и начинать с неё новые?** Да, с функцией **Доска задач** (по умолчанию включена): откройте её на левой боковой панели. Каждый чат — это карточка в **В работе**, **На проверке** (он ждёт вас) или **Готово**. **Новая задача** открывает новый чат dsh в проекте, а доска возвращается, когда ваше первое сообщение отправлено; нажмите **Ответить** на оранжевой карточке, чтобы ответить, не открывая чат. **Очистить всё** в **Готово** сначала спрашивает и убирает с доски завершённые карточки, которые вы прочитали; **Отменить** и **Убранные (N)** возвращают их, а чаты остаются в dsh.
|
|
352
352
|
|
|
353
|
-
**Можно ли завести личный чат-ассистент, который напоминает мне о делах и управляет моими другими чатами?** Да, с функцией **Ассистент** (по умолчанию
|
|
353
|
+
**Можно ли завести личный чат-ассистент, который напоминает мне о делах и управляет моими другими чатами?** Да, с функцией **Ассистент** (по умолчанию включена): нажмите **Ассистент** на левой боковой панели. Он создаёт напоминания с помощью запланированных задач dsh, ищет в интернете, показывает и читает ваши чаты, а отправляет сообщение в чат, начинает, останавливает или архивирует чат только после вашего подтверждения. Храните свой профиль в памяти его проекта, в теме "profil".
|
|
354
354
|
|
|
355
355
|
**Может ли dsh создавать резервные копии моих чатов и настроек, как dsh-backup?** Да: **Настройки → Composer Plus → Резервное копирование → Создать копию сейчас**. Он записывает архив того же формата в ту же папку (`~/Desktop/dsh-backups`), поэтому архивы dsh-backup тоже показываются и восстанавливаются, а dsh-backup можно удалить. Чтобы копии создавались по расписанию, включите **Автоматическое резервное копирование**.
|
|
356
356
|
|
|
@@ -504,7 +504,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
505
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
506
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
507
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
508
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
509
509
|
```
|
|
510
510
|
|
package/README.tr.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz; bu profili uygulama yönetir.)
|
|
31
31
|
|
|
32
|
-
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.24.
|
|
32
|
+
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.24.1`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
75
75
|
| **Korunan dosyalar** | <a id="feature-protectedfiles"></a>Varsayılan olarak açık. Ajanın kendi dosya araçları, desenlerinizle eşleşen dosyaları okuyamaz ve değiştiremez: **okuma ve yazma** desenlerinde bir dosya üzerindeki `read`, `read_image` ve `grep` reddedilir; her iki türde de `write`, `edit` ve `str_replace_editor` reddedilir. Ajan nedenini okur ve size sorması söylenir. Varsayılan desenler `.env*`, `*.pem` ve `*.key`. Ayarlar → Composer Plus → **Korunan dosyalar**: bir desen ekleyin (örneğin `published/**` ya da `config/*.yml`), türüne tıklayarak **okuma ve yazma** ile **yalnızca yazma** arasında geçin, ✕ ile kaldırın ya da **Varsayılanları kullan**. `/` içermeyen bir desen, her klasördeki dosya adıyla eşleşir. Bu bir korkuluktur, korumalı alan değildir: bir kabuk komutu (`cat .env`), bir betik ya da bir MCP aracı dosyaya yine erişebilir (bkz. Sınırlar). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ekran görüntüsü: Korunan dosyalar"></a> |
|
|
76
76
|
| **Engellenen komutlar** | <a id="feature-blockedcommands"></a>Varsayılan olarak açık, liste başta boştur. Ajanın kabuk komutları (`bash`, `pwsh`) kurallarınızla eşleşen bir komutu çalıştıramaz: bir **engelle** kuralı çağrıyı reddeder (ajan nedenini okur ve size sorması söylenir), bir **önce sor** kuralı dsh’nin onay kartını gösterir ve komut yalnızca siz izin verince çalışır. Ayarlar → Composer Plus → **Engellenen komutlar**: bir kural yazın (örneğin `npm publish`, `git push --force` ya da `ssh *192.168.2.19`), türüne tıklayarak **engelle** ile **önce sor** arasında geçin, sonra **Ekle** düğmesine tıklayın; bir kuralın türünü değiştirmek için türüne tıklayın, kuralı ✕ ile kaldırın. Bir kural, bir komut adı ve ondan sonra bu sırayla gelmesi gereken sözcüklerdir; `*` herhangi bir metinle eşleşir. Kontrol, komutu `&&`, `;`, `\|` sonrasında, `$(…)`, `bash -c "…"` ya da `eval` içinde ve `sudo` ya da `env` sonrasında da bulur. Bu bir korkuluktur, korumalı alan değildir: bir değişken (`$CMD`), bir betik dosyası ya da başka bir program komutu yine çalıştırabilir (bkz. Sınırlar). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ekran görüntüsü: Engellenen komutlar"></a> |
|
|
77
77
|
| **Görev panosu** | <a id="feature-taskboard"></a>Sol kenar çubuğu → **Görev panosu** ya da dsh’nin her yerinde `Cmd+Shift+K` (Windows ve Linux’ta `Ctrl+Shift+K`). Kenar çubuğunun gösterdiği canlı durumla dsh sohbetlerinizin kanban panosu: onayınızı, yanıtınızı ya da plan incelemenizi bekleyen sohbet turuncu bir noktayla **İncelemede** sütunundadır, çalışan sohbet **Yapılıyor** sütunundadır, henüz açmadığınız biten sohbet **Bitti** sütunundadır (yeşil). Bir sohbeti açınca kartı **Bitti** sütunundan kendiliğinden çıkar; okuduğunuz biten sohbetleri görmek için yeşil kartların altındaki **Son bitenler (N)** satırına tıklayın (en yeni 10 tanesi, sonra **Daha eski N görevi göster**; açık ya da kapalı olması bu cihazda kalır). Panonun arkasında açıkken biten sohbet (**Yeni görev**) siz açana kadar yeşil kalır. Proje listesini açmak için panonun üstündeki proje adına tıklayın, sonra bir proje ya da **Tüm projeler** seçin; “Sohbet başına dal” klasörü kendi projesinden sayılır. Liste seçimden sonra, `Esc` ile ya da dışına tıklayınca kapanır. Bir projeyi adıyla bulmak için listenin en üstündeki **Projelerde ara** kutusuna yazın (büyük/küçük harf ve aksanlar fark etmez; `Esc` kutuyu boşaltır), ilk eşleşmeyi seçmek için `Enter` tuşuna basın ve yalnız bekleyen, çalışan, görülmeden biten ya da son 2 saatte değişen bir sohbeti olan projeleri göstermek için **Son 2 saatte aktif olanlar** seçeneğine tıklayın (bu seçim bu cihazda saklanır). **Yeni görev** (ya da `n`), panonun gösterdiği projede dsh’nin kendi yeni sohbetini açar (**Tüm projeler** seçiliyken dsh’nin Yeni oturum düğmesinin seçtiği projede); böylece her sohbette olduğu gibi dosya ekleyebilir, komut kullanabilir ve modeli seçebilirsiniz. İlk mesajınız gidince pano kendiliğinden geri gelir. O zamana kadar sohbet **Yapılıyor** sütununun en üstünde **Yeni görev** olarak bekler: ilk mesajı yazmak için ona tıklayın. Sizi bekleyen bir sohbeti olan projenin yanında, proje listesinde turuncu bir nokta görünür (herhangi bir sohbet beklerken üstteki proje adında da görünür). Sohbete dsh ad verir ve sohbetin modeli o mesajdan en çok 3 etiket yazar. Sohbetini açmak için bir karta tıklayın. Turuncu bir kartı panoda yanıtlamak için karta (ya da **Yanıtla** düğmesine) tıklayın; sohbetin tamamı için paneldeki **Sohbeti aç** düğmesini kullanın: **Reddet** ya da **Bir kez izin ver**, plan için **Onayla** ya da **Değişiklik iste**, soru için seçenekler ve kendi metniniz. Bir kartı panodan kaldırmak için biten karttaki **×** düğmesine tıklayın; **Son bitenler** açıkken bu kartları panodan kaldırmak için **Bitti** sütununun üstündeki **Tümünü temizle** düğmesine tıklayın: önce hangi projeden kaç kartın kalkacağını gösterir, okunmamış (yeşil) kartlar kalır. Sonraki 8 saniye içinde **Geri al** kartları geri getirir; **Bitti** sütununun altındaki **Kaldırılanlar (N)** panodan kalkan kartları listeler, **Panoya geri koy** bir kartı yeniden **Bitti** sütununda gösterir. Hiçbir sohbet silinmez: sohbetler dsh’nin kenar çubuğunda kalır, pano bunu yeniden başlatmadan sonra da hatırlar (Tether aynı panoyu gösterir) ve yeniden çalışan bir sohbet panoya geri gelir. İlerlemesini görmek için **Yapılıyor** sütunundaki bir kartın üzerine gelin (ya da klavye odağını karta taşıyın): sohbetin ne kadar süredir çalıştığı, yapılacaklar listesindeki adımı, şu an çalışan araç ve ajanın son satırı. Ayarlar → Composer Plus → Görev panosu bölümünde **Üzerine gelince ilerleme** ile **Hızlı (AI’sız)** (varsayılan: yalnız sohbeti okur) ya da **AI özeti** (sohbetin modeline yapılan kısa bir çağrı bir iki cümle de yazar) seçilir. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ekran görüntüsü: Görev panosu"></a> |
|
|
78
|
-
| **Asistan** | <a id="feature-assistant"></a>Varsayılan olarak
|
|
78
|
+
| **Asistan** | <a id="feature-assistant"></a>Varsayılan olarak açıktır (**Ayarlar → Composer Plus** içinden kapatabilirsiniz). Sol kenar çubuğunda **Asistan**'a tıklayın (**Görev panosu**'nun hemen altında): ChatGPT ya da Grok sohbeti gibi kişisel asistanınız olarak kullandığınız tek ve kalıcı bir sohbet açılır. İlk tıklama `~/Assistant` klasörünü oluşturur, onu "Assistant" projesi olarak ekler ve sohbeti workspace-write izin modu ve dsh'nin varsayılan modeliyle başlatır. Sonraki her tıklama aynı sohbeti açar (arşivlenmiş sohbet geri gelir, silinmiş sohbet yeniden oluşur). Ondan hatırlatma isteyin ("2 dakika sonra bana su içmemi hatırlat"): dsh'nin zamanlanmış görevlerini kullanır, bu yüzden hatırlatma zamanı gelince sohbet çalışır ve Mobile connect açıksa Tether "Turn finished" bildirimini gönderir. Web'de araştırma isteyin ya da öteki sohbetlerinizi sorun: tüm projelerin sohbetlerini (çalışıyor, sizi bekliyor ya da boşta) listeleyebilir ve bir sohbetin son mesajlarını okuyabilir. Bir sohbete mesaj da gönderebilir, bir projede yeni sohbet açabilir, çalışan bir sohbeti durdurabilir ya da bir sohbeti arşivleyebilir: bu dört işlemin her biri önce dsh'nin onay kartını açar (Tether'da da), **Bir kez izin ver**'e tıklamadan hiçbir şey olmaz. Silme aracı yoktur. Bu araçlar ve kısa talimatlar yalnız bu sohbettedir. Bir web sayfasında ya da başka bir sohbette okuduğu metin emir değil, veri sayılır. Profilinizi her seferinde anlatmak yerine bu projenin hafızasında tutun (**Proje hafızası**, "profil" konusu). | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Ekran görüntüsü: Asistan"></a> |
|
|
79
79
|
| **Proje hafızası** | <a id="feature-projectmemory"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Her proje klasörünün kendi hafızası olur ve o projenin sonraki sohbetleri bu hafızayı okur. DS Bot da her Bot için böyle bir hafıza tutar. Her tur bittikten sonra sohbetin modeline bir çağrı yapılır: yeni mesajları okur (geri alınanları okumaz), kalıcı tercihlerinizi, kararlarınızı ve olguları kısa notlar olarak saklar, eski notları değiştirir ya da siler. Ajan da notları kendisi kaydedebilir, silebilir ve arayabilir (`memory_remember`, `memory_forget`, `memory_recall`). Bir not genel de olabilir: o notu her proje okur. Yeni bir sohbet notları sistem isteminde alır; sonra kaydedilen bir not bir sonraki sohbette görünür. Dosyalar dsh ana klasöründe Markdown dosyalarıdır (`storages/dsh-composer-plus/memory/`), hiçbir zaman proje klasöründe değildir. Aynı satırdaki **Hafızayı aç**, kaydedilen tüm notları proje proje (ve genel hafızayı) gösterir; notları filtreleyebilirsiniz. Neyin değişeceğini kendi sözlerinizle yazın (örneğin "yarn yerine artık pnpm kullanıyorum"), sonra **Değişiklikleri önizle**: değişiklikleri dsh’nin varsayılan modeli önerir, yalnız **Uygula** onları kaydeder. Tether’de: sohbet başlığı menüsü → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ekran görüntüsü: Proje hafızası"></a> |
|
|
80
80
|
| **Hafıza sürüm geçmişi** | <a id="feature-memoryhistory"></a>**Proje hafızası** açıkken varsayılan olarak açıktır. Hafızaya yapılan her kayıttan önce (ajan, tur sonrası gözden geçirme, **Hafızayı aç**) notların o anki bir kopyası tutulur. **Hafızayı aç** içinde bir proje ya da **Genel hafıza** seçin, sonra **Geçmiş**: sürümler tarihe göre ve her birinden sonra hafızayı kimin değiştirdiğiyle listelenir. Bir sürüm seçince geri yüklemenin neyi değiştireceğini diff olarak görürsünüz, sonra **Geri yükle**. Geri yüklemeden önceki notlar da tutulur, bu yüzden geri yüklemeyi geri alabilirsiniz. Her hafızanın en yeni 50 sürümü kalır. Tether'da: sohbet başlığı menüsü → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Ekran görüntüsü: Hafıza sürüm geçmişi"></a> |
|
|
81
81
|
| **Hafızayı AGENTS.md dosyasına aktar** | <a id="feature-memoryexport"></a>**Hafızayı aç** içinde bir proje seçin, sonra **AGENTS.md dosyasına aktar**: o projenin notları klasöründeki `AGENTS.md` dosyasında işaretli bir bölüme yazılır. Böylece notları commit edip ekibinizle ve başka ajan araçlarıyla paylaşabilirsiniz. Değişikliği önce diff olarak görürsünüz; yalnız **AGENTS.md dosyasını yaz** kaydeder. Sonraki aktarım yalnız bu bölümü değiştirir. Genel hafıza, kaynaklar ve tarihler yazılmaz. Tether'da: sohbet başlığı menüsü → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Ekran görüntüsü: Hafızayı AGENTS.md dosyasına aktar"></a> |
|
|
@@ -226,7 +226,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
226
226
|
- **Bir sohbet satırında dal etiketi yok:** kenar çubuğu “Tek listede” görünümünde değil (“Çalışma alanı” ve “Çalışma alanı ağacı” görünümlerinde hiçbir sohbet satırında etiket görünmez), bu sürümü yüklediğinizden beri sohbette hiç tur olmadı, sohbetin klasörü bir git deposu değil ya da **Sohbet satırlarında Git dalı** kapalı. Bir güncellemeden sonra dsh’yi yeniden başlatın (dalı Host tarafı kaydeder).
|
|
227
227
|
- **Hedef kontrolü, testin 127 koduyla ya da "not found" ile çıktığını söylüyor:** Finder’dan veya Dock’tan başlatılan dsh’nin PATH’i terminalinizdekinden daha kısa olabilir. Bu yüzden dsh `npm`, `pnpm` veya `cargo` aracını bulamaz. dsh’yi bir terminalden başlatın ya da **Hedef kontrolü** → **Düzenle** içinde tam yolu olan kendi test komutunuzu belirleyin. **Şimdi çalıştır** sonucu hemen gösterir.
|
|
228
228
|
- **Hedef kapanmıyor ve ajan çalışmaya devam ediyor:** **Hedef kontrolü** başarısız bir test ya da eksik bir iş buldu. Hedefin altındaki satır nedenini gösterir (ayrıntılar için imleci sonucun üzerine getirin). Nedeni ya da test komutunu düzeltin veya hedefi `/goal` ya da hedef çubuğuyla kendiniz tamamlayın (bu tamamlama kontrol edilmez).
|
|
229
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.24.
|
|
229
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.24.1`) ve yukarıdaki kurulum notuna bakın.
|
|
230
230
|
- **Şimdi yedekle, "Başka bir yedekleme işlemi sürüyor" diyor:** başka bir dsh penceresinde ya da kurtarma konsolunda bir işlem çalışıyor (ikisi, yedek klasöründeki `.composer-plus.lock` kilit dosyasını paylaşır). İşlemin bitmesini bekleyin. Çalışan bir işlem yoksa, kapanmış bir sürecin kilidi bir sonraki tıklamada devralınır.
|
|
231
231
|
- **Kurtarma konsolu "dsh is running" diyor:** önce dsh’den çıkın. dsh gerçekten kapalıysa mesajda adı geçen dosya bir çökmeden kalmıştır: dosyayı silin ve yeniden deneyin.
|
|
232
232
|
- **Geri yüklemeden sonra dsh açılmıyor ya da bir eklenti eksik:** bir profilin eklenti paketlerinin yeniden yüklenmesi gerekir. Kurtarma konsolu bunu geri yüklemeden sonra önerir. Ya da konsolun listelediği, `$DSH_HOME/profiles/` altındaki her klasörde `pnpm install` komutunu çalıştırın. Vault’ta olmayan gizli bilgiler (başka bir bilgisayar) yeniden girilmelidir: konsol bunları listeler.
|
|
@@ -350,7 +350,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
350
350
|
|
|
351
351
|
**Tüm sohbetlerimi bir kanban panosu olarak görüp panodan yeni sohbet başlatabilir miyim?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın. Her sohbet **Yapılıyor**, **İncelemede** (sizi bekler) ya da **Bitti** sütununda bir karttır. **Yeni görev** projede dsh'nin yeni sohbetini açar ve ilk mesajınız gidince pano geri gelir; bir sohbeti açmadan yanıtlamak için turuncu karttaki **Yanıtla** düğmesine tıklayın. **Bitti** sütunundaki **Tümünü temizle** önce sorar ve okuduğunuz biten kartları panodan kaldırır; **Geri al** ve **Kaldırılanlar (N)** onları geri getirir, sohbetler dsh'de kalır.
|
|
352
352
|
|
|
353
|
-
**Bana hatırlatma yapan ve öteki sohbetlerimi yöneten kişisel bir asistan sohbetim olabilir mi?** Evet, **Asistan** ile (varsayılan olarak
|
|
353
|
+
**Bana hatırlatma yapan ve öteki sohbetlerimi yöneten kişisel bir asistan sohbetim olabilir mi?** Evet, **Asistan** ile (varsayılan olarak açık): sol kenar çubuğunda **Asistan**'a tıklayın. dsh'nin zamanlanmış görevleriyle hatırlatma kurar, web'de arar, sohbetlerinizi listeler ve okur. Bir sohbete mesaj göndermek ya da sohbet açmak, durdurmak, arşivlemek için önce onayınızı ister. Profilinizi bu projenin hafızasında, "profil" konusunda tutun.
|
|
354
354
|
|
|
355
355
|
**dsh, dsh-backup gibi sohbetlerimi ve ayarlarımı yedekleyebilir mi?** Evet: **Ayarlar → Composer Plus → Yedekleme → Şimdi yedekle**. Aynı arşiv biçimini aynı klasöre (`~/Desktop/dsh-backups`) yazar. Bu yüzden dsh-backup’ın arşivleri de görünür ve geri yüklenebilir; dsh-backup’ı kaldırabilirsiniz. Zamanlanmış yedekleme için **Otomatik yedekleme** ayarını açın.
|
|
356
356
|
|
|
@@ -504,7 +504,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
505
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
506
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
507
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
508
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
509
509
|
```
|
|
510
510
|
|
package/README.vi.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sau đó khởi động lại dsh. (CLI không cài được vào profile desktop; ứng dụng tự quản lý profile này.)
|
|
31
31
|
|
|
32
|
-
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.24.
|
|
32
|
+
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.24.1`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
75
75
|
| **Tệp được bảo vệ** | <a id="feature-protectedfiles"></a>Bật theo mặc định. Các công cụ tệp riêng của tác tử không thể đọc hoặc thay đổi các tệp khớp với mẫu của bạn: `read`, `read_image` và `grep` trên một tệp bị từ chối với mẫu **đọc và ghi**, còn `write`, `edit` và `str_replace_editor` bị từ chối với cả hai loại. Tác tử đọc lý do và được yêu cầu hỏi bạn. Mẫu mặc định là `.env*`, `*.pem` và `*.key`. Cài đặt → Composer Plus → **Tệp được bảo vệ**: thêm một mẫu (ví dụ `published/**` hoặc `config/*.yml`), nhấp vào loại của mẫu để chuyển giữa **đọc và ghi** và **chỉ ghi**, xóa mẫu bằng ✕, hoặc nhấp **Dùng giá trị mặc định**. Mẫu không có `/` khớp với tên tệp trong bất kỳ thư mục nào. Đây là rào chắn bảo vệ, không phải sandbox: lệnh shell (`cat .env`), script hoặc công cụ MCP vẫn có thể truy cập tệp (xem Giới hạn). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ảnh chụp màn hình: Tệp được bảo vệ"></a> |
|
|
76
76
|
| **Lệnh bị chặn** | <a id="feature-blockedcommands"></a>Bật theo mặc định, với danh sách trống. Các lệnh shell của tác tử (`bash`, `pwsh`) không thể chạy lệnh khớp với quy tắc của bạn: quy tắc **chặn** từ chối lệnh gọi (tác tử đọc lý do và được yêu cầu hỏi bạn), quy tắc **hỏi trước** hiện thẻ phê duyệt của dsh, và lệnh chỉ chạy khi bạn cho phép. Cài đặt → Composer Plus → **Lệnh bị chặn**: nhập một quy tắc (ví dụ `npm publish`, `git push --force` hoặc `ssh *192.168.2.19`), nhấp vào loại để chuyển giữa **chặn** và **hỏi trước**, rồi nhấp **Thêm**; nhấp vào loại của một quy tắc để đổi loại, xóa quy tắc bằng ✕. Một quy tắc là tên lệnh và các từ phải đứng sau nó theo đúng thứ tự này; `*` khớp với mọi văn bản. Tính năng cũng tìm thấy lệnh sau `&&`, `;`, `\|`, bên trong `$(…)`, `bash -c "…"` hoặc `eval`, và sau `sudo` hoặc `env`. Đây là rào chắn bảo vệ, không phải sandbox: một biến (`$CMD`), một tệp script hoặc một chương trình khác vẫn có thể chạy lệnh (xem Giới hạn). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ảnh chụp màn hình: Lệnh bị chặn"></a> |
|
|
77
77
|
| **Bảng tác vụ** | <a id="feature-taskboard"></a>Thanh bên trái → **Bảng tác vụ**, hoặc nhấn `Cmd+Shift+K` (`Ctrl+Shift+K` trên Windows và Linux) ở bất kỳ đâu trong dsh. Bảng kanban các cuộc trò chuyện dsh của bạn với trạng thái trực tiếp giống thanh bên: cuộc trò chuyện đang chờ bạn phê duyệt, trả lời hoặc xem xét kế hoạch nằm ở **Đang duyệt** với chấm cam, cuộc trò chuyện đang chạy nằm ở **Đang làm**, cuộc trò chuyện đã xong mà bạn chưa mở nằm ở **Xong** (màu xanh lá). Khi bạn mở một cuộc trò chuyện, thẻ của nó tự rời **Xong**; nhấp **Vừa xong (N)** bên dưới các thẻ xanh lá để xem các cuộc trò chuyện đã xong mà bạn đã đọc (10 mục mới nhất, sau đó **Hiện N tác vụ cũ hơn**; trạng thái mở hoặc đóng được lưu trên thiết bị này). Cuộc trò chuyện xong khi đang mở phía sau bảng (một **Tác vụ mới**) vẫn màu xanh lá cho đến khi bạn mở. Nhấp vào tên dự án ở đầu bảng để mở danh sách dự án, rồi chọn một dự án hoặc **Tất cả dự án**; thư mục branch riêng của từng cuộc trò chuyện được tính là thuộc dự án của nó. Danh sách đóng sau khi bạn chọn, khi nhấn `Esc` hoặc khi nhấp ra ngoài. Gõ vào **Tìm dự án** ở đầu danh sách để tìm dự án theo tên (không phân biệt chữ hoa, chữ thường và dấu; `Esc` xóa trống ô), nhấn `Enter` để chọn kết quả khớp đầu tiên, và nhấp **Hoạt động trong 2 giờ qua** để chỉ hiện các dự án có cuộc trò chuyện đang chờ, đang chạy, đã xong mà chưa xem hoặc đã thay đổi trong 2 giờ qua (được lưu trên thiết bị này). **Tác vụ mới** (hoặc `n`) mở cuộc trò chuyện mới của chính dsh trong dự án mà bảng đang hiện (với **Tất cả dự án**, đó là dự án mà Phiên mới của dsh chọn), nên bạn có thể thêm tệp, dùng lệnh và chọn mô hình như trong mọi cuộc trò chuyện. Khi tin nhắn đầu tiên của bạn được gửi, bảng tự quay lại. Trước đó, cuộc trò chuyện chờ ở trên cùng của **Đang làm** dưới tên **Tác vụ mới**: nhấp vào nó để viết tin nhắn đầu tiên. Dự án có cuộc trò chuyện đang chờ bạn có một chấm cam trong danh sách dự án (tên dự án ở đầu bảng cũng có chấm này khi có cuộc trò chuyện đang chờ). dsh đặt tên cho cuộc trò chuyện và mô hình của cuộc trò chuyện viết tối đa 3 nhãn từ tin nhắn đó. Nhấp vào thẻ để mở cuộc trò chuyện của nó. Nhấp vào thẻ màu cam (hoặc nút **Trả lời** của nó) để trả lời ngay trên bảng; bảng này có **Mở cuộc trò chuyện** để xem cả cuộc trò chuyện: **Từ chối** hoặc **Cho phép một lần**, **Phê duyệt** hoặc **Yêu cầu thay đổi** cho một kế hoạch, hoặc các lựa chọn và văn bản của riêng bạn cho một câu hỏi. Nhấp **×** trên một thẻ đã xong để gỡ thẻ đó khỏi bảng, hoặc mở **Vừa xong** rồi nhấp **Gỡ tất cả** ở đầu cột **Xong** để gỡ các thẻ đó khỏi bảng: trước tiên một hộp thoại cho biết bao nhiêu thẻ của dự án nào sẽ bị gỡ, và các thẻ chưa đọc (màu xanh lá) vẫn ở lại. Trong 8 giây sau đó, **Hoàn tác** đưa các thẻ trở lại; **Đã gỡ (N)** bên dưới **Xong** liệt kê các thẻ đang ở ngoài bảng, và **Đưa lại lên bảng** hiện lại một thẻ trong **Xong**. Không cuộc trò chuyện nào bị xóa: các cuộc trò chuyện vẫn ở thanh bên của dsh, bảng nhớ điều này sau khi khởi động lại (Tether hiện cùng một bảng), và cuộc trò chuyện chạy lại sẽ quay lại bảng. Trỏ vào một thẻ ở **Đang làm** (hoặc chuyển tiêu điểm bàn phím đến thẻ đó) để xem tiến độ: cuộc trò chuyện đã chạy bao lâu, bước trong danh sách việc cần làm, công cụ đang chạy và dòng cuối của tác tử. Trong Cài đặt → Composer Plus → Bảng tác vụ, **Tiến độ khi di chuột** chọn **Nhanh (không dùng AI)** (mặc định: chỉ đọc cuộc trò chuyện) hoặc **Tóm tắt bằng AI** (một lệnh gọi ngắn tới mô hình của cuộc trò chuyện viết thêm một hoặc hai câu). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ảnh chụp màn hình: Bảng tác vụ"></a> |
|
|
78
|
-
| **Trợ lý** | <a id="feature-assistant"></a>Mặc định tắt
|
|
78
|
+
| **Trợ lý** | <a id="feature-assistant"></a>Mặc định bật (tắt trong **Cài đặt → Composer Plus**). Nhấp **Trợ lý** ở thanh bên trái (ngay bên dưới **Bảng tác vụ**): tính năng này mở một cuộc trò chuyện lâu dài mà bạn dùng làm trợ lý cá nhân, giống một cuộc trò chuyện ChatGPT hoặc Grok. Lần nhấp đầu tiên tạo thư mục `~/Assistant`, thêm thư mục này làm dự án “Assistant” và bắt đầu cuộc trò chuyện với chế độ quyền workspace-write và mô hình mặc định của dsh; mỗi lần nhấp sau đó mở cùng cuộc trò chuyện đó (cuộc trò chuyện đã lưu trữ sẽ quay lại, cuộc trò chuyện đã xóa sẽ được tạo lại). Nhờ trợ lý nhắc bạn (“nhắc tôi uống nước sau 2 phút”): trợ lý dùng các tác vụ theo lịch của dsh, nên lời nhắc chạy cuộc trò chuyện vào thời điểm đó, và Tether gửi thông báo “Turn finished” khi Kết nối di động đang bật. Nhờ trợ lý tìm kiếm trên web, hoặc hỏi về các cuộc trò chuyện khác của bạn: trợ lý có thể liệt kê các cuộc trò chuyện của mọi dự án (đang chạy, đang chờ bạn hoặc nhàn rỗi) và đọc các tin nhắn mới nhất của một cuộc trò chuyện. Trợ lý cũng có thể gửi tin nhắn đến một cuộc trò chuyện, bắt đầu cuộc trò chuyện mới trong một dự án, dừng một cuộc trò chuyện đang chạy hoặc lưu trữ một cuộc trò chuyện: mỗi thao tác trong bốn thao tác này đều hiện thẻ phê duyệt của dsh trước (cả trong Tether), và không có gì xảy ra cho đến khi bạn nhấp **Cho phép một lần**. Trợ lý không có công cụ xóa. Chỉ cuộc trò chuyện này có các công cụ này và chỉ dẫn ngắn của nó; văn bản mà trợ lý đọc trong một trang web hoặc một cuộc trò chuyện khác được xem là dữ liệu, không phải mệnh lệnh. Hãy lưu hồ sơ của bạn trong bộ nhớ của dự án này (**Bộ nhớ dự án**, chủ đề “profil”) thay vì phải nói lại mỗi lần. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý"></a> |
|
|
79
79
|
| **Bộ nhớ dự án** | <a id="feature-projectmemory"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Mỗi thư mục dự án có bộ nhớ riêng, các cuộc trò chuyện sau này của dự án đó sẽ đọc, giống như DS Bot giữ một bộ nhớ cho mỗi Bot. Sau mỗi lượt kết thúc, một lần gọi mô hình của cuộc trò chuyện đọc các tin nhắn mới (không đọc tin nhắn đã hoàn tác), lưu sở thích, quyết định và dữ kiện lâu dài của bạn thành ghi chú ngắn, đồng thời sửa hoặc xóa ghi chú cũ. Tác tử cũng có thể tự lưu, xóa và tìm ghi chú (`memory_remember`, `memory_forget`, `memory_recall`). Ghi chú cũng có thể là ghi chú chung: mọi dự án đều đọc. Cuộc trò chuyện mới nhận các ghi chú trong system prompt; ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo. Các tệp là Markdown trong thư mục home của dsh (`storages/dsh-composer-plus/memory/`), không bao giờ nằm trong thư mục dự án. **Mở bộ nhớ** ở cùng hàng hiển thị mọi ghi chú đã lưu, nhóm theo dự án (và bộ nhớ chung), có bộ lọc. Viết bằng lời của bạn điều cần thay đổi (ví dụ "tôi đã chuyển từ yarn sang pnpm"), rồi bấm **Xem trước thay đổi**: mô hình mặc định của dsh đề xuất các thay đổi, và chỉ **Áp dụng** mới lưu chúng. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ảnh chụp màn hình: Bộ nhớ dự án"></a> |
|
|
80
80
|
| **Lịch sử phiên bản bộ nhớ** | <a id="feature-memoryhistory"></a>Bật theo mặc định khi **Bộ nhớ dự án** đang bật. Trước mỗi lần lưu bộ nhớ (tác tử, bước xem lại sau một lượt, **Mở bộ nhớ**), một bản sao của ghi chú như trước đó được giữ lại. Trong **Mở bộ nhớ**, chọn một dự án hoặc **Bộ nhớ chung**, rồi **Lịch sử**: các phiên bản theo ngày và ai đã thay đổi bộ nhớ sau mỗi phiên bản. Chọn một phiên bản để xem dưới dạng diff những gì khôi phục sẽ thay đổi, rồi **Khôi phục**. Ghi chú trước khi khôi phục cũng được giữ, nên bạn có thể hoàn tác. 50 phiên bản mới nhất của mỗi bộ nhớ được giữ lại. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Ảnh chụp màn hình: Lịch sử phiên bản bộ nhớ"></a> |
|
|
81
81
|
| **Xuất bộ nhớ ra AGENTS.md** | <a id="feature-memoryexport"></a>Trong **Mở bộ nhớ**, chọn một dự án, rồi **Xuất ra AGENTS.md**: ghi chú của dự án đó được ghi vào một phần có đánh dấu của `AGENTS.md` trong thư mục dự án, để bạn có thể commit và chia sẻ với nhóm và các công cụ tác tử khác. Bạn xem thay đổi dưới dạng diff trước; chỉ **Ghi AGENTS.md** mới lưu. Lần xuất sau chỉ thay thế phần đó. Bộ nhớ chung, nguồn và ngày không được ghi. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Ảnh chụp màn hình: Xuất bộ nhớ ra AGENTS.md"></a> |
|
|
@@ -226,7 +226,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
226
226
|
- **Dòng cuộc trò chuyện không có nhãn branch:** thanh bên không ở chế độ xem “Trong một danh sách” (trong “Không gian làm việc” và “Cây không gian làm việc”, không dòng cuộc trò chuyện nào hiển thị nhãn), cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài phiên bản này, thư mục của nó không phải repository git, hoặc **Branch Git trên dòng cuộc trò chuyện** đang tắt. Sau khi cập nhật, hãy khởi động lại dsh (phần Host ghi lại branch).
|
|
227
227
|
- **Kiểm tra mục tiêu báo bài kiểm thử thoát với mã 127 hoặc "not found":** dsh khởi động từ Finder hoặc Dock có thể có PATH ngắn hơn terminal của bạn, nên không tìm thấy `npm`, `pnpm` hoặc `cargo`. Hãy khởi động dsh từ terminal, hoặc đặt lệnh kiểm thử của riêng bạn với đường dẫn đầy đủ trong **Kiểm tra mục tiêu** → **Sửa**. **Chạy ngay** hiện kết quả ngay lập tức.
|
|
228
228
|
- **Mục tiêu không đóng và tác tử tiếp tục làm việc:** **Kiểm tra mục tiêu** đã tìm thấy một bài kiểm thử thất bại hoặc phần việc còn thiếu; dòng bên dưới mục tiêu cho biết lý do (di chuột lên kết quả để xem chi tiết). Hãy sửa nguyên nhân hoặc lệnh kiểm thử, hoặc tự hoàn tất mục tiêu bằng `/goal` hoặc thanh mục tiêu (việc này không được kiểm tra).
|
|
229
|
-
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.24.
|
|
229
|
+
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.24.1`), xem ghi chú cài đặt ở trên.
|
|
230
230
|
- **Sao lưu ngay báo "Một thao tác sao lưu khác đang chạy":** một thao tác đang chạy trong cửa sổ dsh khác hoặc trong bảng điều khiển cứu hộ (chúng dùng chung tệp khóa `.composer-plus.lock` trong thư mục sao lưu). Hãy chờ thao tác đó xong. Nếu không có thao tác nào đang chạy, khóa của tiến trình đã đóng sẽ được tiếp quản ở lần nhấp tiếp theo.
|
|
231
231
|
- **Bảng điều khiển cứu hộ báo "dsh is running":** trước tiên hãy thoát dsh. Nếu dsh thật sự đã đóng, tệp được nêu trong thông báo là phần còn sót lại sau một sự cố: hãy xóa tệp đó rồi thử lại.
|
|
232
232
|
- **Sau khi khôi phục, dsh không khởi động hoặc thiếu một plugin:** cần cài lại các gói plugin của profile. Bảng điều khiển cứu hộ đề nghị việc này sau khi khôi phục; hoặc chạy `pnpm install` trong từng thư mục dưới `$DSH_HOME/profiles/` mà nó liệt kê. Các thông tin bí mật không có trong vault (máy tính khác) phải được nhập lại: bảng điều khiển liệt kê chúng.
|
|
@@ -350,7 +350,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
350
350
|
|
|
351
351
|
**Tôi có thể xem tất cả cuộc trò chuyện của mình dưới dạng bảng kanban và bắt đầu cuộc trò chuyện mới từ đó không?** Có, với **Bảng tác vụ** (mặc định bật): mở nó ở thanh bên trái. Mỗi cuộc trò chuyện là một thẻ trong **Đang làm**, **Đang duyệt** (đang chờ bạn) hoặc **Xong**. **Tác vụ mới** mở cuộc trò chuyện mới của dsh trong dự án, và bảng quay lại khi tin nhắn đầu tiên của bạn được gửi; nhấp **Trả lời** trên thẻ màu cam để trả lời mà không cần mở cuộc trò chuyện. **Gỡ tất cả** ở **Xong** hỏi trước rồi gỡ khỏi bảng các thẻ đã xong mà bạn đã đọc; **Hoàn tác** và **Đã gỡ (N)** đưa chúng trở lại, và các cuộc trò chuyện vẫn còn trong dsh.
|
|
352
352
|
|
|
353
|
-
**Tôi có thể có một cuộc trò chuyện trợ lý cá nhân nhắc việc cho tôi và quản lý các cuộc trò chuyện khác của tôi không?** Có, với **Trợ lý** (mặc định
|
|
353
|
+
**Tôi có thể có một cuộc trò chuyện trợ lý cá nhân nhắc việc cho tôi và quản lý các cuộc trò chuyện khác của tôi không?** Có, với **Trợ lý** (mặc định bật): nhấp **Trợ lý** ở thanh bên trái. Trợ lý đặt lời nhắc bằng các tác vụ theo lịch của dsh, tìm kiếm trên web, liệt kê và đọc các cuộc trò chuyện của bạn, và chỉ gửi tin nhắn đến một cuộc trò chuyện hoặc bắt đầu, dừng hay lưu trữ một cuộc trò chuyện sau khi bạn phê duyệt. Hãy lưu hồ sơ của bạn trong bộ nhớ dự án của nó, chủ đề “profil”.
|
|
354
354
|
|
|
355
355
|
**dsh có thể sao lưu các cuộc trò chuyện và cài đặt của tôi như dsh-backup không?** Có: **Cài đặt → Composer Plus → Sao lưu → Sao lưu ngay**. Nó ghi cùng định dạng tệp lưu trữ vào cùng thư mục (`~/Desktop/dsh-backups`), nên các tệp lưu trữ của dsh-backup cũng hiện ra và khôi phục được, và bạn có thể gỡ dsh-backup. Bật **Tự động sao lưu** để sao lưu theo lịch.
|
|
356
356
|
|
|
@@ -504,7 +504,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
504
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
505
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
506
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
507
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
508
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
509
509
|
```
|
|
510
510
|
|