dsh-composer-plus 1.14.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +69 -16
- package/README.es.md +69 -16
- package/README.fr.md +69 -16
- package/README.hi.md +69 -16
- package/README.id.md +69 -16
- package/README.ja.md +69 -16
- package/README.ko.md +69 -16
- package/README.md +69 -16
- package/README.pt-BR.md +69 -16
- package/README.ru.md +69 -16
- package/README.tr.md +69 -16
- package/README.vi.md +69 -16
- package/README.zh.md +69 -16
- package/assets/features/autoBackup.webp +0 -0
- package/assets/features/backup.webp +0 -0
- package/assets/features/branchTree.webp +0 -0
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/idleSwitch.webp +0 -0
- package/assets/features/projectMemory.webp +0 -0
- package/assets/features/questionFit.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/assets/features/rescueConsole.webp +0 -0
- package/assets/features/sessionDoctor.webp +0 -0
- package/assets/features/stopSendFirst.webp +0 -0
- package/backup.mjs +1069 -0
- package/client.js +1278 -182
- package/index.js +1602 -37
- package/package.json +3 -2
- package/tether/gateway/server.mjs +1 -1
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.
|
|
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.16.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
37
37
|
|
|
38
38
|
| Tính năng | Cách dùng | Ảnh chụp màn hình |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Bảng thay đổi** | <a id="feature-changespanel"></a>Thanh bên phải → `+` → **Thay đổi**.
|
|
40
|
+
| **Bảng thay đổi** | <a id="feature-changespanel"></a>Thanh bên phải → `+` → **Thay đổi**. Trang mở ở chế độ **Cây**: bản đồ branch của repository của cuộc trò chuyện. Ba thẻ đếm các branch: tất cả, các branch đã merge và các branch đang chờ merge. Nhấp vào một thẻ để chỉ hiện các branch đó; nhấp lại để hiện tất cả. Mỗi branch là một ô kèm commit cuối cùng của nó: xanh lá khi branch chính đã có công việc của nó, cam khi chưa có, xanh dương cho branch chính. Một mũi tên đi từ mỗi branch tới branch đã nhận nó (✅ **Đã merge**) hoặc tới branch mà nó bắt đầu từ đó (⏳ **Đang chờ**, nét đứt). Nhấp vào một ô để xem các commit của branch, rồi nhấp vào một commit để xem các tệp và diff của commit đó. Nhấp **Đã merge** để xem các tệp của commit merge, hoặc **Đang chờ** để xem các tệp mà branch mang vào branch đích của nó. Branch từ xa chỉ hiện khi không có branch cục bộ nào cùng tên. Trong menu chế độ, chọn **Chưa commit**, **Chưa stage**, **Đã stage** hoặc **Branch** để xem các tệp đã thay đổi kèm số dòng `+/-`. Nhấp vào một tệp để xem diff của tệp đó. **Lượt gần nhất** mở trang xem lại của chính dsh cho lượt mới nhất. **Cuộc trò chuyện này** chỉ liệt kê các tệp mà công cụ tệp (write, edit) của cuộc trò chuyện đang mở đã ghi, trong mọi lượt của nó, cùng tổng diff kể từ tin nhắn đầu tiên. Nút **␣** ẩn các thay đổi khoảng trắng (`git diff -w`): các dòng chỉ thay đổi về thụt lề hoặc ký tự xuống dòng sẽ không hiện. Menu **…** của một tệp → **Các cuộc trò chuyện đã thay đổi tệp này** liệt kê các cuộc trò chuyện của cùng repository có công cụ ghi hoặc sửa đã thay đổi tệp đó, mới nhất ở trên cùng, kèm yêu cầu đã tạo ra thay đổi; nhấp vào sẽ mở cuộc trò chuyện đó tại yêu cầu đó. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Ảnh chụp màn hình: Bảng thay đổi"></a> |
|
|
41
41
|
| **Ý tưởng tính năng** | <a id="feature-featureideas"></a>Thanh bên phải → `+` → **Ý tưởng tính năng** → **Đề xuất tính năng**. Mô hình của chính cuộc trò chuyện đọc bản tóm tắt ngắn về dự án của cuộc trò chuyện (các tệp ở cấp cao nhất, phần đầu của README và tệp manifest, dàn ý phần còn lại của README, tiêu đề các commit gần nhất). Sau đó mô hình đề xuất tối đa 8 tính năng, hiện thành một chồng thẻ bằng ngôn ngữ giao diện của dsh. Vuốt thẻ sang phải (hoặc nhấp **✓**, hoặc nhấn `→`; trong mọi trường hợp, thẻ bay về phía tương ứng) để bắt đầu một cuộc trò chuyện mới trong cùng dự án. Cuộc trò chuyện này bắt đầu ở chế độ kế hoạch, với ý tưởng làm yêu cầu, nên không có gì thay đổi trước khi bạn phê duyệt kế hoạch. Để bỏ qua kế hoạch, nhấp **▶ Xây dựng ngay** (hoặc nhấn `↑`; thẻ bay lên trên): cuộc trò chuyện mới bắt đầu ngay với ý tưởng làm yêu cầu bình thường, và mô hình thực hiện thay đổi rồi chạy các bước kiểm tra (phê duyệt vẫn áp dụng như thường lệ). Vuốt sang trái (hoặc **✕**, hoặc `←`) để bỏ qua. **Hoàn tác** (hoặc `Z`) đưa thẻ đã bỏ qua trở lại. Nhấp **↓** (hoặc nhấn `↓`) để lưu một ý tưởng hay để làm sau. Ý tưởng đi vào danh sách **Để sau** của dự án. Mọi cuộc trò chuyện trong cùng thư mục dự án đều hiện danh sách này (kể cả sau khi khởi động lại). **Để sau (N)** mở danh sách. **Lập kế hoạch** bắt đầu cùng kiểu cuộc trò chuyện ở chế độ kế hoạch cho ý tưởng đó, còn **Xây dựng ngay** bắt đầu cuộc trò chuyện không có kế hoạch; cả hai đều gỡ ý tưởng khỏi danh sách. **Lập kế hoạch tất cả (N)** bắt đầu một cuộc trò chuyện duy nhất ở chế độ kế hoạch cho mọi ý tưởng trong danh sách, nên các phần chung chỉ cần lập kế hoạch một lần. **Xóa khỏi danh sách** xóa ý tưởng. **Sao chép dạng danh sách kiểm tra** sao chép toàn bộ danh sách vào bộ nhớ tạm dưới dạng danh sách kiểm tra Markdown (`- [ ] Title — Summary`, mỗi ý tưởng một dòng) để dùng trong trình theo dõi vấn đề hoặc tệp TODO; tính năng này không gửi gì qua mạng. **Mở issue trên GitHub** trên một ý tưởng sẽ mở một issue với tiêu đề và tóm tắt của ý tưởng (và lý do nó quan trọng) trong repository GitHub của dự án, bằng đăng nhập GitHub CLI (`gh`) của chính bạn; sau đó liên kết **Issue #N** hiện bên cạnh ý tưởng và mở issue đó. **Thêm ý tưởng** thêm thẻ mới. Để chỉ nhận ý tưởng về một lĩnh vực, hãy nhập một **Chủ đề trọng tâm** ngắn vào ô bên cạnh **Đề xuất tính năng** (tối đa 80 ký tự; `Enter` cũng đề xuất), hoặc nhấp một trong các chủ đề cố định bên dưới ô: **Hiệu năng**, **Trợ năng**, **Kiểm thử**, **Bảo mật**, **Dễ dùng** hoặc **Tài liệu** (nhấp lại để xóa chủ đề). Khi đó, mô hình chỉ đề xuất các tính năng về chủ đề đó; ô trống nghĩa là tính năng bất kỳ. Trong một dự án, ý tưởng không được đề xuất hai lần: mọi ý tưởng đã đề xuất (đã bỏ qua, đã lưu hoặc đã bắt đầu) đều vào **Lịch sử** của dự án, mô hình được dặn không đề xuất lại những ý tưởng đó, và tiêu đề lặp lại sẽ bị loại bỏ. **Lịch sử** liệt kê chúng với nhãn **Đã bắt đầu** hoặc **Đã đề xuất**; **Quên** (hoặc **Quên tất cả**) cho phép một ý tưởng xuất hiện lại; ý tưởng vẫn còn trong danh sách **Để sau** sẽ không được đề xuất cho đến khi bạn xóa nó khỏi đó. Mô hình chỉ chạy khi bạn nhấp. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Ảnh chụp màn hình: Ý tưởng tính năng"></a> |
|
|
42
42
|
| **Tìm trong nội dung** | <a id="feature-contentsearch"></a>Ô tìm kiếm có sẵn trên thanh bên của dsh (kính lúp cạnh **Không gian làm việc**; `Cmd+K` trong ứng dụng desktop, `Cmd+Alt+K` trong trình duyệt) cũng tìm cuộc trò chuyện theo các từ trong tin nhắn của bạn và trong câu trả lời, không chỉ theo tiêu đề. Đoạn văn khớp hiện bên dưới cuộc trò chuyện. dsh đã có sẵn tìm kiếm này nhưng để tắt. Tính năng này bật nó lên, với một tệp chỉ mục tìm kiếm trên máy tính của bạn. Chỉ mục được tạo ở lần tìm đầu tiên sau khi khởi động (khoảng 15 giây cho 250 cuộc trò chuyện, xem Giới hạn) và được giữ lại cho các lần khởi động sau. Mặc định bật. Thay đổi có hiệu lực sau khi bạn khởi động lại dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Ảnh chụp màn hình: Tìm trong nội dung"></a> |
|
|
43
43
|
| **Hoàn tác lượt** | <a id="feature-turnrollback"></a>Di chuột lên một tin nhắn của bạn và nhấp **↶** (cạnh nút Sao chép). **Chỉ cuộc trò chuyện** đưa tin nhắn đó và mọi thứ sau nó (câu trả lời, lệnh gọi công cụ) ra khỏi cuộc trò chuyện và ra khỏi ngữ cảnh của mô hình. Tin nhắn trở lại khung soạn thảo: bạn sửa rồi gửi lại. **Cuộc trò chuyện và tệp** trước tiên liệt kê các tệp của dự án đã thay đổi kể từ tin nhắn đó, rồi đưa cả các tệp này về trạng thái cũ. Việc này gồm cả thay đổi do lệnh (`bash`) tạo ra, không chỉ thay đổi từ công cụ sửa tệp của dsh. Nếu một lượt đang chạy, lượt đó dừng trước. Nhật ký cuộc trò chuyện không bao giờ bị ghi lại: một dấu ẩn duy nhất che phần đã rút lại, giống cách lệnh `/compact` của dsh ẩn các tin nhắn cũ. Khi [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) đã được cài, plugin đó làm việc này và Composer Plus không hiện nút thứ hai. Sau khi hoàn tác, một thanh **Làm lại** hiện phía trên khung soạn thảo. Thanh này bắt đầu một cuộc trò chuyện mới từ ngay trước lúc hoàn tác (cùng các tin nhắn và ngữ cảnh), và với **Cuộc trò chuyện và tệp**, đưa cả các tệp trở lại. Tệp mà bạn đã thay đổi sau khi hoàn tác được liệt kê và giữ lại, trừ khi bạn đánh dấu ô ghi đè tệp đó. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Ảnh chụp màn hình: Hoàn tác lượt"></a> |
|
|
@@ -46,10 +46,12 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
46
46
|
| **Lịch sử nhập** | <a id="feature-inputhistory"></a>Trong khung soạn thảo trống, nhấn `↑` / `↓` để duyệt qua các tin nhắn bạn đã gửi, giống như trong terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Ảnh chụp màn hình: Lịch sử nhập"></a> |
|
|
47
47
|
| **Chế độ kế hoạch bằng Shift+Tab** | <a id="feature-plantoggle"></a>`Shift+Tab` thêm `/plan ` vào đầu bản nháp (nhấn lần nữa để xóa). Nếu cuộc trò chuyện đã ở chế độ kế hoạch, `Shift+Tab` thoát chế độ này. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Ảnh chụp màn hình: Chế độ kế hoạch bằng Shift+Tab"></a> |
|
|
48
48
|
| **Giữ con trỏ trong khung soạn thảo** | <a id="feature-keepfocus"></a>Sau khi bạn gửi một lệnh `/` hoặc một skill, con trỏ vẫn ở trong khung soạn thảo và bạn có thể gõ tiếp ngay. Việc này cũng áp dụng cho macro bàn phím gõ một lệnh rồi nhấn `Enter`. dsh đặt khung soạn thảo ở chế độ chỉ đọc trong lúc xử lý lệnh, và khi đó trình duyệt bỏ tiêu điểm khỏi khung. Tính năng này trả tiêu điểm lại, trừ khi một menu, một hộp thoại hoặc một ô khác đang giữ tiêu điểm. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Ảnh chụp màn hình: Giữ con trỏ trong khung soạn thảo"></a> |
|
|
49
|
+
| **Vừa thẻ câu hỏi với cửa sổ** | <a id="feature-questionfit"></a>Khi tác tử hỏi bạn, câu hỏi và các câu trả lời cuộn cùng nhau trong thẻ, còn **Bỏ qua** và **Gửi** luôn hiện ở dưới cùng. Thẻ dùng chiều cao của cửa sổ (trừ 200 px cho tiêu đề cuộc trò chuyện và một dải cuộc trò chuyện), nên thẻ lớn lên và nhỏ lại theo cửa sổ. Khi không có tính năng này, dsh giới hạn thẻ ở 60% cửa sổ (tối đa 520 px) và chỉ cuộn các câu trả lời: một câu hỏi dài có thể đẩy phần cuối của nó, các câu trả lời và các nút ra ngoài thẻ. | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="Ảnh chụp màn hình: Vừa thẻ câu hỏi với cửa sổ"></a> |
|
|
49
50
|
| **Tiếp tục bằng một cú nhấp** | <a id="feature-continuebutton"></a>Sau một lượt đã dừng, thất bại hoặc bị cắt ngang, khung soạn thảo trống hiện **▶**. Một cú nhấp sẽ tiếp tục từ cuộc hội thoại hiện có, không cần gõ gì vào ô nhập và không thêm tin nhắn hiển thị vào cuộc trò chuyện. (Mô hình nhận một ghi chú ẩn ngắn “tiếp tục từ chỗ đã dừng”, vì một số nhà cung cấp như Claude từ chối yêu cầu kết thúc bằng câu trả lời của trợ lý.) Tin nhắn trong hàng đợi vẫn ở đó: ▶ chỉ tiếp tục tác vụ đã dừng, sau đó hàng đợi mới chạy. Lượt đã hoàn tất vẫn giữ nút Gửi thông thường. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Ảnh chụp màn hình: Tiếp tục bằng một cú nhấp"></a> |
|
|
50
51
|
| **Tiếp tục sau khi khởi động lại** | <a id="feature-resumeafterrestart"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Nếu bạn thoát dsh (hoặc dsh bị đóng) khi một cuộc trò chuyện đang làm việc, cuộc trò chuyện đó tự tiếp tục khi bạn mở lại dsh, với cùng ghi chú ẩn như Tiếp tục bằng một cú nhấp. Nếu một vòng mục tiêu (`/goal`) đang chạy, mục tiêu tiếp tục với vòng kế tiếp (mỗi lần khởi động, dsh tạm dừng các mục tiêu cho đến khi bạn tiếp tục chúng). Các cuộc trò chuyện bạn đã dừng, đã xong hoặc đã thất bại không tiếp tục. Bản thân dsh không có cài đặt cho việc này: dsh chỉ đánh dấu lượt như vậy là bị ngắt. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Ảnh chụp màn hình: Tiếp tục sau khi khởi động lại"></a> |
|
|
51
52
|
| **Kéo thả hàng đợi** | <a id="feature-queuereorder"></a>Tin nhắn trong hàng đợi có một tay nắm (⠿). Kéo để sắp xếp lại, hoặc đặt tiêu điểm vào tay nắm rồi nhấn `↑` / `↓`. `Esc` hủy thao tác. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Ảnh chụp màn hình: Kéo thả hàng đợi"></a> |
|
|
52
|
-
| **Sửa tin nhắn trong hàng đợi tại chỗ** | <a id="feature-queueedit"></a>Nhấp đúp vào một tin nhắn trong hàng đợi
|
|
53
|
+
| **Sửa tin nhắn trong hàng đợi tại chỗ** | <a id="feature-queueedit"></a>Nhấp đúp vào một tin nhắn trong hàng đợi, hoặc nhấp nút Sửa của nó (**Sửa tin nhắn trong hàng đợi**). Một trình sửa mở ngay tại dòng của tin nhắn: sửa văn bản, xóa hình ảnh hoặc tệp bằng nút ✕ của nó, hoặc thêm mới bằng nút kẹp giấy (**Thêm hình ảnh hoặc tệp**) hay bằng cách dán hình ảnh. `Enter` để lưu, `Esc` để hủy, `Shift+Enter` để thêm dòng. Tin nhắn giữ nguyên vị trí trong hàng đợi, và hình ảnh, tệp mà bạn giữ lại không thay đổi. Khi trình sửa đang mở, không thể sắp xếp lại hàng đợi. Trong Tether: menu của tin nhắn trong hàng đợi → Edit. | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Ảnh chụp màn hình: Sửa tin nhắn trong hàng đợi tại chỗ"></a> |
|
|
54
|
+
| **Ưu tiên tin nhắn gửi sau khi Dừng** | <a id="feature-stopsendfirst"></a>Bật theo mặc định. Dừng một cuộc trò chuyện khi có tin nhắn đang chờ trong hàng đợi, rồi gửi một tin nhắn mới: tin nhắn đó chạy ngay và chạy riêng. Các tin nhắn trong hàng đợi giữ nguyên thứ tự và chạy sau nó, mỗi lượt một tin. Nếu không có tính năng này, dsh thêm tin nhắn mới vào cuối hàng đợi và chạy tin nhắn đầu tiên trong hàng đợi thay cho nó, nên tin nhắn mới chạy sau cùng. Tin nhắn bạn gửi khi cuộc trò chuyện đang làm việc vẫn chờ ở cuối hàng đợi. | <a href="assets/features/stopSendFirst.webp"><img src="assets/features/stopSendFirst.webp" width="160" alt="Ảnh chụp màn hình: Ưu tiên tin nhắn gửi sau khi Dừng"></a> |
|
|
53
55
|
| **Sao chép liên kết phiên** | <a id="feature-copydeeplink"></a>Nhấp chuột phải vào một cuộc trò chuyện trên thanh bên → **Sao chép liên kết phiên**. Dán liên kết `dsh-session:…` vào một cuộc trò chuyện khác để đính kèm cuộc trò chuyện đó làm ngữ cảnh chỉ đọc. dsh 0.2.1 có mục **Sao chép ID phiên** riêng, mục này chỉ sao chép ID thuần; mục của plugin nằm ngay sau nó. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Ảnh chụp màn hình: Sao chép liên kết phiên"></a> |
|
|
54
56
|
| **Sao chép liên kết tin nhắn** | <a id="feature-copymessagelink"></a>Di chuột lên một tin nhắn và nhấp **🔗** (trong hàng thao tác của tin nhắn; với câu trả lời, nút nằm cạnh thời gian). Liên kết là liên kết phiên cộng với số thứ tự của tin nhắn: `dsh-session:…#42`. Dán liên kết vào một tin nhắn rồi gửi. Trên dsh 0.2.1 trở lên, liên kết hiện dưới dạng một nhãn nhỏ. Nhấp vào nhãn sẽ mở cuộc trò chuyện đó, cuộn tới tin nhắn và tô sáng tin nhắn trong 2 giây. Giống liên kết phiên, liên kết này cũng đính kèm cuộc trò chuyện đó làm ngữ cảnh chỉ đọc. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Ảnh chụp màn hình: Sao chép liên kết tin nhắn"></a> |
|
|
55
57
|
| **Xuất cuộc trò chuyện dạng Markdown** | <a id="feature-exportmarkdown"></a>Nhấp chuột phải vào một cuộc trò chuyện trên thanh bên (hoặc mở menu **…** của nó) → **Xuất dạng Markdown…**. Hộp thoại cho biết cuộc trò chuyện có bao nhiêu tin nhắn. **Sao chép vào bộ nhớ tạm** sao chép cuộc trò chuyện dưới dạng Markdown, còn **Lưu tệp .md** lưu nó thành `<chat title>.md` qua tính năng tải xuống của trình duyệt (dsh desktop: vào thư mục Tải về hoặc qua hộp thoại lưu, tùy theo cài đặt hệ thống của bạn). Tệp có tiêu đề cuộc trò chuyện, tên dự án và ngày, sau đó là một phần `## Bạn` hoặc `## Trợ lý` cho mỗi tin nhắn. Các khối mã được giữ nguyên; khối mã mà một tin nhắn để mở sẽ được đóng lại. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Ảnh chụp màn hình: Xuất cuộc trò chuyện dạng Markdown"></a> |
|
|
@@ -57,23 +59,30 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
57
59
|
| **Tìm dự án trong cuộc trò chuyện mới** | <a id="feature-projectpicker"></a>Cuộc trò chuyện mới → nút dự án phía trên khung soạn thảo. Các dự án hiện theo thứ tự A–Z, với ô **Tìm dự án** ở trên cùng. Nhập một phần tên (không phân biệt chữ hoa/thường và dấu) rồi nhấn `Enter` để chọn kết quả đầu tiên. Khi không có gì khớp, dòng **Không có dự án phù hợp** hiện ra. Thứ tự dự án đã lưu của dsh trên thanh bên không thay đổi. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Ảnh chụp màn hình: Tìm dự án trong cuộc trò chuyện mới"></a> |
|
|
58
60
|
| **Không gian làm việc mặc định cho Phiên mới** | <a id="feature-defaultworkspace"></a>Cài đặt → Composer Plus → **Không gian làm việc mặc định cho Phiên mới** → **Mở Phiên mới trong**: chọn một dự án, hoặc **Thư mục chung (default-workspace)** (mặc định: thư mục riêng của dsh `Documents/deepseek-harness/default-workspace`, được tạo ở lần dùng đầu tiên). Sau đó, **Phiên mới** ở đầu thanh bên (và phím tắt của nó) luôn mở cuộc trò chuyện mới ở đó, kể cả khi cuộc trò chuyện của một dự án khác đang mở. Nút `+` cạnh một dự án vẫn mở dự án đó, và nút dự án phía trên khung soạn thảo của cuộc trò chuyện mới vẫn đổi được dự án. | <a href="assets/features/defaultWorkspace.webp"><img src="assets/features/defaultWorkspace.webp" width="160" alt="Ảnh chụp màn hình: Không gian làm việc mặc định cho Phiên mới"></a> |
|
|
59
61
|
| **Tìm trong cuộc trò chuyện** | <a id="feature-findinchat"></a>Nhấn `Cmd+F` trên Mac (`Ctrl+F` trên Windows và Linux) trong một cuộc trò chuyện: một ô tìm kiếm mở ra phía trên. Nhập một từ: mọi kết quả khớp trong các tin nhắn và câu trả lời trên màn hình đều được tô sáng, kết quả hiện tại có màu đậm hơn, và ô hiển thị n / tổng. `Enter` hoặc `↓` chuyển đến kết quả tiếp theo, `Shift+Enter` hoặc `↑` về kết quả trước (các nút mũi tên cũng vậy); cuộc trò chuyện cuộn kết quả vào giữa. Chữ hoa/thường, dấu và chữ ı không chấm của tiếng Thổ Nhĩ Kỳ không ảnh hưởng. `Esc` đóng ô và đưa con trỏ về chỗ cũ. Việc tìm kiếm vẫn theo cuộc trò chuyện trong khi câu trả lời đang được truyền về. | <a href="assets/features/findInChat.webp"><img src="assets/features/findInChat.webp" width="160" alt="Ảnh chụp màn hình: Tìm trong cuộc trò chuyện"></a> |
|
|
60
|
-
| **Branch riêng cho từng cuộc trò chuyện** | <a id="feature-worktreechats"></a>
|
|
62
|
+
| **Branch riêng cho từng cuộc trò chuyện** | <a id="feature-worktreechats"></a>Trên màn hình cuộc trò chuyện mới, nút branch (biểu tượng branch) giữa nút dự án và nút chế độ mặc định hiển thị **Branch mới**. Nhập tin nhắn đầu tiên và gửi. Để ở lại branch hiện tại, hãy chọn “Branch hiện tại (main)” trong cùng nút đó. Tin nhắn đầu tiên có thể kèm hình ảnh và tệp. Ở chế độ kế hoạch, cuộc trò chuyện mới cũng bắt đầu ở chế độ kế hoạch: gửi tin nhắn dưới dạng `/plan <tin nhắn>` (Shift+Tab), hoặc chuyển Cuộc trò chuyện mới sang chế độ kế hoạch trước. AI đặt tên branch (`feat/…`, `fix/…`) theo tin nhắn đó, Composer Plus tạo một git worktree cho branch trong `<project>/.worktrees/`, sao chép các tệp bị bỏ qua mà `.worktreeinclude` liệt kê (ví dụ `.env` và `node_modules/`) và mở ở đó một cuộc trò chuyện mới với tin nhắn của bạn. Phần đầu của cuộc trò chuyện đang mở hiển thị ⑂ branch · N thay đổi · ↑ ↓ (hoặc **chưa push**); nhấp vào để mở **Thay đổi**. Cùng menu đó liệt kê các worktree đang mở: chọn một worktree để bắt đầu cuộc trò chuyện trong đó. Để xem thư mục branch bên trong dự án của chúng ở thanh bên, hãy chọn **Tùy chọn hiển thị** → **Cây không gian làm việc** của dsh. | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="Ảnh chụp màn hình: Branch riêng cho từng cuộc trò chuyện"></a> |
|
|
63
|
+
| **Branch trong cây không gian làm việc** | <a id="feature-branchtree"></a>Cài đặt → Composer Plus → **Branch trong cây không gian làm việc** (tắt theo mặc định). Khi bật, mỗi branch có thư mục worktree trong `<project>/.worktrees/` hiển thị như một dự án bên trong dự án của nó; chọn **Tùy chọn hiển thị** → **Cây không gian làm việc** của dsh để xem dạng lồng nhau. Branch có thư mục bị xóa sẽ rời danh sách, và dsh hiển thị các cuộc trò chuyện của nó trong **Chưa nhóm**. Khi agent của một cuộc trò chuyện trong thư mục dự án tạo một branch và chuyển sang branch đó (`git switch -c`, `git checkout -b`) trong khi thư mục không có thay đổi chưa commit, thư mục dự án trở về branch trước đó, branch có thư mục riêng, và cuộc trò chuyện chuyển sang đó: một bản sao mở trong dự án của branch và tiếp tục công việc, cuộc trò chuyện cũ được lưu trữ. Danh sách được kiểm tra khi khởi động, mỗi 30 giây, sau mỗi lượt và khi bạn quay lại cửa sổ. | <a href="assets/features/branchTree.webp"><img src="assets/features/branchTree.webp" width="160" alt="Ảnh chụp màn hình: Branch trong cây không gian làm việc"></a> |
|
|
61
64
|
| **Dự đoán tin nhắn tiếp theo** | <a id="feature-nextprediction"></a>Mặc định bật: bạn có thể tắt trong **Cài đặt → Composer Plus**. Khi tác tử hoàn tất một lượt (không phải lượt đã dừng hoặc thất bại), khung soạn thảo trống hiện dự đoán tin nhắn tiếp theo của bạn bằng chữ màu xám, kèm gợi ý **Tab để chấp nhận**. `Tab` đưa văn bản vào khung soạn thảo nhưng không gửi. `Esc` ẩn dự đoán trong lượt đó. Khi bạn bắt đầu gõ, dự đoán cũng ẩn đi, và một lượt mới sẽ thay thế nó. Menu **Mô hình** bên dưới công tắc liệt kê các mô hình của chính dsh (cùng danh sách với menu mô hình của dsh). **Mặc định của dsh** được chọn theo mặc định và đi theo mô hình mặc định của dsh. Mỗi lượt đã xong tốn một lần gọi mô hình ngắn. Trong Tether, dự đoán hiện phía trên khung soạn thảo trống: chạm vào để đưa nó vào ô nhập. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Ảnh chụp màn hình: Dự đoán tin nhắn tiếp theo"></a> |
|
|
62
65
|
| **Hoàn thành khi gõ** | <a id="feature-typingcompletion"></a>Mặc định tắt: bạn có thể bật trong **Cài đặt → Composer Plus**. Khi bạn gõ, chữ màu xám ngay sau con trỏ cho thấy tin nhắn của bạn có thể tiếp tục thế nào. `Tab` thêm phần này vào tin nhắn nhưng không gửi. `Esc` ẩn phần này. Tính năng chỉ gợi ý những từ tiếp theo của chính bạn: không bao giờ là câu trả lời cho bạn, và không bịa ra nội dung lỗi hay tên. Khi tin nhắn có vẻ đã đủ hoặc mô hình không chắc chắn, sẽ không có gì hiện ra. Nếu bạn gõ đúng các chữ tiếp theo của phần chữ xám, phần này vẫn giữ nguyên, không có lần gọi mô hình mới. Tính năng có menu **Mô hình** riêng bên dưới công tắc của nó. Mục đầu tiên, **Giống dự đoán tin nhắn tiếp theo**, dùng mô hình của **Dự đoán tin nhắn tiếp theo** (mặc định); hãy chọn mô hình khác để mỗi tính năng dùng một mô hình riêng, ví dụ một mô hình nhanh hơn cho phần hoàn thành. Tính năng gọi mô hình một lần mỗi khi bạn dừng gõ, nên tốn nhiều token hơn nhiều so với dự đoán: hãy chọn một mô hình nhanh, chi phí thấp. Tính năng không chạy với lệnh gạch chéo, tin nhắn có nhãn tệp, hoặc khi con trỏ không ở cuối. Trong Tether, phần còn lại hiện phía trên ô nhập khi bạn gõ: chạm vào để thêm. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Ảnh chụp màn hình: Hoàn thành khi gõ"></a> |
|
|
63
66
|
| **Cải thiện prompt** | <a id="feature-promptimprove"></a>Gõ một yêu cầu sơ bộ, rồi nhấp vào đũa thần (**Cải thiện prompt**) cạnh menu mô hình. Một lần gọi mô hình viết lại yêu cầu thành một prompt rõ ràng hơn: mục tiêu trước, các bước đánh số ngắn khi có nhiều phần, và bước kiểm tra cần chạy. Tính năng đọc cuộc trò chuyện này (bỏ qua các tin nhắn đã bị hoàn tác), README, AGENTS.md và tệp manifest của dự án, các tệp đã thay đổi và các tệp có tên khớp với từ ngữ của bạn, và giữ nguyên ngôn ngữ của bạn. Tính năng không bao giờ bịa ra tên tệp. Văn bản mới thay thế bản nháp của bạn nhưng không được gửi: hãy đọc, sửa, rồi nhấn `Enter`. `Cmd/Ctrl+Z` đưa văn bản của bạn trở lại trong một bước, nút (**Hoàn tác cải thiện**) cũng vậy. Nếu bạn gõ trong lúc tính năng đang chạy, văn bản mới của bạn được giữ lại. `Esc` hoặc nhấp lần nữa để hủy. Tính năng có menu **Mô hình** riêng trong Cài đặt (mặc định: **Giống mô hình của cuộc trò chuyện**). Không dùng cho lệnh gạch chéo hoặc tin nhắn có nhãn tệp. Trong Tether, đũa thần nằm cạnh ô nhập. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Ảnh chụp màn hình: Cải thiện prompt"></a> |
|
|
64
67
|
| **Kiểm tra mục tiêu** | <a id="feature-goalcheck"></a>Bắt đầu một mục tiêu bằng `/goal`. Khi tác tử đánh dấu mục tiêu là hoàn tất trong một vòng tự động, mục tiêu chỉ đóng sau hai bước kiểm tra. Đầu tiên, lệnh kiểm thử của dự án chạy trong thư mục của cuộc trò chuyện, theo chế độ sandbox của cuộc trò chuyện. Lệnh này là lệnh của riêng bạn hoặc lệnh tìm thấy trong `package.json`, `Makefile`, `Cargo.toml`, `go.mod` hoặc pytest. Khi bước mới nhất của chính tác tử là một lần chạy đạt của bài kiểm thử đó, lệnh không chạy lại. Sau đó, một lần gọi mô hình độc lập, không có công cụ, đọc mục tiêu, cuộc trò chuyện này, `git status` và kết quả kiểm thử. Nếu một bước kiểm tra không đạt, mục tiêu vẫn đang hoạt động và tác tử đọc lý do, rồi vòng tiếp theo tiếp tục. Một dòng bên dưới thanh mục tiêu (**Kiểm tra mục tiêu**) hiện bài kiểm thử và kết quả gần nhất. **Sửa** đặt lệnh kiểm thử của riêng bạn và giới hạn thời gian hoặc token; khi vượt giới hạn, mục tiêu bị chặn. **Chạy ngay** chạy bước kiểm tra mà không đóng mục tiêu. Tính năng có menu **Mô hình** riêng trong Cài đặt (mặc định: **Giống mô hình của cuộc trò chuyện**). Khi bạn tự hoàn tất mục tiêu, không có gì được kiểm tra. | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="Ảnh chụp màn hình: Kiểm tra mục tiêu"></a> |
|
|
68
|
+
| **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. | <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> |
|
|
65
69
|
| **Cho phép trong cuộc trò chuyện này** | <a id="feature-allowforchat"></a>Khi Đánh giá tự động hỏi bạn, thẻ phê duyệt có thêm nút **Cho phép trong cuộc trò chuyện này**: từ đó trở đi, cùng công cụ đó trong cùng cuộc trò chuyện được cho phép, với mọi đối số, cho đến khi hết giới hạn thời gian (mặc định 1 giờ; chọn trong **Cài đặt → Composer Plus → Cho phép trong cuộc trò chuyện này**). Sau đó, agent sẽ hỏi lại. Một nhãn nhỏ ở phần đầu liệt kê các quyền đã cấp kèm thời điểm kết thúc và cho phép thu hồi. Quyền vẫn còn sau khi khởi động lại. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Ảnh chụp màn hình: Cho phép trong cuộc trò chuyện này"></a> |
|
|
66
|
-
| **Trạng thái dự án** | <a id="feature-projectstatus"></a>Dòng dự án trên thanh bên hiện cùng dấu đang chạy / đang chờ / xong như các cuộc trò chuyện của nó. Vì vậy, dự án đã thu gọn vẫn cho bạn biết có cuộc trò chuyện bên trong đang làm việc hoặc cần bạn. Cuộc trò chuyện đang chờ bạn được hiện trước, sau đó là cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh, kể cả khi một cuộc trò chuyện khác vẫn đang chạy), rồi đến dấu đang chạy. Di chuột lên để xem chi tiết. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Trạng thái dự án"></a> |
|
|
67
|
-
| **Branch Git trên dòng cuộc trò chuyện** | <a id="feature-sessionbranch"></a>Mỗi dòng cuộc trò chuyện ở thanh bên hiển thị một nhãn nhỏ màu xám với branch git mà thư mục dự án của cuộc trò chuyện đang ở trong lượt cuối của cuộc trò chuyện đó (ví dụ `main` hoặc `feature/login`; HEAD tách rời hiển thị ID commit ngắn trong ngoặc đơn). Hai cuộc trò chuyện của cùng một dự án trên các branch khác nhau không còn trông giống nhau, và bạn thấy ngay khi sắp tiếp tục một cuộc trò chuyện trên sai branch. Di chuột lên nhãn để xem tên đầy đủ. Phần Host đọc branch (`git branch --show-current`, chỉ đọc) khi một lượt bắt đầu và khi kết thúc; cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài tính năng này, hoặc thư mục không phải repository git, sẽ không có nhãn. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Ảnh chụp màn hình: Branch Git trên dòng cuộc trò chuyện"></a> |
|
|
70
|
+
| **Trạng thái dự án** | <a id="feature-projectstatus"></a>Dòng dự án trên thanh bên hiện cùng dấu đang chạy / đang chờ / xong như các cuộc trò chuyện của nó. Vì vậy, dự án đã thu gọn vẫn cho bạn biết có cuộc trò chuyện bên trong đang làm việc hoặc cần bạn. Cuộc trò chuyện đang chờ bạn được hiện trước, sau đó là cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh, kể cả khi một cuộc trò chuyện khác vẫn đang chạy), rồi đến dấu đang chạy. Di chuột lên để xem chi tiết. Trong **Cây không gian làm việc**, dòng của thư mục cha cũng hiện các cuộc trò chuyện của từng dự án bên trong (ví dụ mỗi thư mục nhánh trong `.worktrees/`), kể cả khi thư mục đã thu gọn. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Trạng thái dự án"></a> |
|
|
71
|
+
| **Branch Git trên dòng cuộc trò chuyện** | <a id="feature-sessionbranch"></a>Mỗi dòng cuộc trò chuyện ở thanh bên hiển thị một nhãn nhỏ màu xám với branch git mà thư mục dự án của cuộc trò chuyện đang ở trong lượt cuối của cuộc trò chuyện đó (ví dụ `main` hoặc `feature/login`; HEAD tách rời hiển thị ID commit ngắn trong ngoặc đơn). Hai cuộc trò chuyện của cùng một dự án trên các branch khác nhau không còn trông giống nhau, và bạn thấy ngay khi sắp tiếp tục một cuộc trò chuyện trên sai branch. Di chuột lên nhãn để xem tên đầy đủ. Phần Host đọc branch (`git branch --show-current`, chỉ đọc) khi một lượt bắt đầu và khi kết thúc; cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài tính năng này, hoặc thư mục không phải repository git, sẽ không có nhãn. Nếu dòng dự án phía trên cuộc trò chuyện có cùng tên với branch (ví dụ thư mục của “Branch riêng cho từng cuộc trò chuyện”), dòng cuộc trò chuyện không hiển thị nhãn, nhưng “Trong một danh sách” vẫn hiển thị nhãn. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Ảnh chụp màn hình: Branch Git trên dòng cuộc trò chuyện"></a> |
|
|
68
72
|
| **Đánh dấu tất cả là đã đọc** | <a id="feature-markprojectread"></a>Trên thanh bên, nhấp nút **…** của một dự án → **Đánh dấu tất cả là đã đọc**. Mọi cuộc trò chuyện trong dự án đó mất chấm xanh chưa đọc cùng lúc; các dự án khác vẫn giữ chấm của mình. Mục này hiện màu xám (**Không có cuộc trò chuyện chưa đọc**) khi dự án không có cuộc trò chuyện chưa đọc nào. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Ảnh chụp màn hình: Đánh dấu tất cả là đã đọc"></a> |
|
|
69
73
|
| **Ưu tiên dự án đang hoạt động** | <a id="feature-activeprojectsfirst"></a>Khi một cuộc trò chuyện bắt đầu chạy hoặc cần bạn, dự án của nó di chuyển lên đầu thanh bên với hiệu ứng dòng của chính dsh (giống như khi bạn kéo dự án lên đó). Dự án đã xong giữ nguyên vị trí; bạn vẫn kéo chúng đến bất kỳ đâu như thường. Các lần di chuyển được lưu vào thứ tự dự án của dsh, nên khi tắt tính năng này, thứ tự hiện tại được giữ nguyên. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Ưu tiên dự án đang hoạt động"></a> |
|
|
70
|
-
| **Bộ lọc dự án gần đây** | <a id="feature-recentprojects"></a>Thanh bên → tùy chọn hiển thị (biểu tượng thanh trượt) → **Hoạt động trong 2 giờ qua**. Khi tùy chọn này được chọn, thanh bên chỉ hiện các dự án có cuộc trò chuyện hoạt động trong 2 giờ qua: cuộc trò chuyện được cập nhật trong khoảng thời gian này, cuộc trò chuyện đang chạy hoặc đang chờ, cuộc trò chuyện đang mở, hoặc cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh “xong” của dsh), kể cả sau 2 giờ. Các dự án không có cuộc trò chuyện như vậy bị ẩn, kể cả dự án mới và trống. Chọn lại tùy chọn để hiện tất cả dự án. Lựa chọn được lưu trên thiết bị này. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Ảnh chụp màn hình: Bộ lọc dự án gần đây"></a> |
|
|
74
|
+
| **Bộ lọc dự án gần đây** | <a id="feature-recentprojects"></a>Thanh bên → tùy chọn hiển thị (biểu tượng thanh trượt) → **Hoạt động trong 2 giờ qua**. Khi tùy chọn này được chọn, thanh bên chỉ hiện các dự án có cuộc trò chuyện hoạt động trong 2 giờ qua: cuộc trò chuyện được cập nhật trong khoảng thời gian này, cuộc trò chuyện đang chạy hoặc đang chờ, cuộc trò chuyện đang mở, hoặc cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh “xong” của dsh), kể cả sau 2 giờ. Các dự án không có cuộc trò chuyện như vậy bị ẩn, kể cả dự án mới và trống. Trong **Cây không gian làm việc**, thư mục cha vẫn hiển thị khi có dự án bên trong đang hoạt động, và các cuộc trò chuyện không hoạt động trong 2 giờ qua cũng bị ẩn, nên chỉ hiện các cuộc trò chuyện gần đây. Chọn lại tùy chọn để hiện tất cả dự án. Lựa chọn được lưu trên thiết bị này. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Ảnh chụp màn hình: Bộ lọc dự án gần đây"></a> |
|
|
71
75
|
| **Thu gọn tất cả dự án** | <a id="feature-collapseprojects"></a>Khi có dự án đang mở trên thanh bên, một nút xuất hiện cạnh tùy chọn hiển thị (biểu tượng thanh trượt). Nhấp vào nút để đóng mọi dự án đang mở cùng lúc, ví dụ 3 dự án đang mở trong số 5. Nút lại ẩn đi khi không còn dự án nào mở. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Ảnh chụp màn hình: Thu gọn tất cả dự án"></a> |
|
|
72
76
|
| **Sắp xếp theo trạng thái** | <a id="feature-statusorder"></a>Thanh bên → tùy chọn hiển thị → **Sắp xếp theo** → **Theo trạng thái** (cùng với **Trong một danh sách**). Các cuộc trò chuyện đã xong đứng đầu (chấm “xong” của dsh; lượt kết thúc do lỗi cũng có chấm này), sau đó là cuộc trò chuyện đang chạy hoặc đang chờ, rồi đến cuộc trò chuyện có tự động hóa đang hoạt động (Tác vụ tự động), cuối cùng là phần còn lại theo thứ tự của dsh. Khi bạn mở một cuộc trò chuyện đã xong, nó chuyển xuống dưới. Chỉ chế độ xem thay đổi: chọn **Thủ công** hoặc **Cập nhật gần nhất** để quay lại. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Ảnh chụp màn hình: Sắp xếp theo trạng thái"></a> |
|
|
73
77
|
| **Thông báo nền** | <a id="feature-notifications"></a>Khi dsh chạy nền, bạn nhận thông báo khi một lượt kết thúc (dòng đầu tiên của câu trả lời), hoặc khi một cuộc trò chuyện thật sự chờ bạn: một phê duyệt (tên công cụ), một câu trả lời (câu hỏi) hoặc một lần xem xét kế hoạch. Yêu cầu phải vẫn còn mở sau 1,5 giây, nên các phê duyệt được trả lời tự động (quyền của Đánh giá tự động, plugin khác) không gây thông báo. Thông báo bị thu hồi ngay khi yêu cầu của nó được trả lời. Huy hiệu trên Dock/thanh tác vụ đếm số cuộc trò chuyện đang chờ. Nhấp vào thông báo sẽ mở cuộc trò chuyện đó. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Ảnh chụp màn hình: Thông báo nền"></a> |
|
|
78
|
+
| **Mở cuộc trò chuyện đang chờ khi không hoạt động** | <a id="feature-idleswitch"></a>Khi một cuộc trò chuyện đặt câu hỏi hoặc đang chờ phê duyệt hay xem xét kế hoạch (chấm cam) và bạn không dùng dsh trong 30 giây, dsh sẽ mở cuộc trò chuyện đó. Khi có nhiều cuộc trò chuyện cùng chờ, cuộc chờ lâu nhất được mở trước; cuộc tiếp theo mở sau thêm 30 giây không dùng. Một phím, một cú nhấp, di chuột, con lăn hoặc một lần chạm sẽ bắt đầu lại 30 giây. Văn bản trong ô đang có tiêu điểm, văn bản đang chọn, hoặc một menu hay hộp thoại đang mở cũng ngăn việc chuyển. Khi một cuộc trò chuyện đang chờ ở trên màn hình, không có gì thay đổi. Nếu bạn rời một cuộc trò chuyện đang chờ mà chưa trả lời, nó có thể mở lại sau 30 giây không dùng tiếp theo. Tính năng cũng chạy khi dsh ở chế độ nền, nhưng dsh không được đưa lên trước. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Ảnh chụp màn hình: Mở cuộc trò chuyện đang chờ khi không hoạt động"></a> |
|
|
74
79
|
| **Ngôn ngữ ứng dụng** | <a id="feature-language"></a>Cài đặt → Composer Plus → **Ngôn ngữ ứng dụng** chuyển toàn bộ giao diện dsh sang Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt hoặc हिन्दी (xem bên dưới). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Ảnh chụp màn hình: Ngôn ngữ ứng dụng"></a> |
|
|
75
80
|
| **Kết nối di động (iPhone)** | <a id="feature-mobileconnect"></a>Dùng dsh từ iPhone với ứng dụng [Tether](tether/), trong cùng mạng Wi-Fi hoặc qua [Tailscale](https://tailscale.com). Bật tính năng trong **Cài đặt → Composer Plus** (mặc định tắt, vì tính năng này mở một cổng mạng trên máy Mac này). Sau đó nhấp **Kết nối di động** ở góc dưới bên trái thanh bên: quét mã QR bằng Camera của iPhone (chạm vào **Open in Tether**) hoặc bằng **Scan code** trong Tether, chạm vào **Connect** và nhấp **Approve**. Hãy cài đặt Tether trước: nếu không có Tether, Camera không thể mở mã này. Điện thoại hiện các cuộc trò chuyện của bạn, gửi tin nhắn (kèm ảnh: **+** trong khung soạn thảo → Camera, Photos hoặc Paste image), trả lời phê duyệt và câu hỏi, và chuyển đổi mô hình và agent. Bạn có thể ghép nối bao nhiêu máy Mac tùy ý: tên máy Mac ở góc trên bên trái ứng dụng dùng để chuyển giữa các máy. Bảng **Kết nối di động** liệt kê các iPhone đã ghép nối kèm lần kết nối gần nhất: **Remove** ngắt ngay một máy. “Tailscale only” từ chối mạng cục bộ (dành cho Wi-Fi dùng chung), và nhật ký truy cập cho biết ai đã thử kết nối. Trong Tether, “Settings → Privacy” khóa ứng dụng bằng Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ảnh chụp màn hình: Kết nối di động (iPhone)"></a> |
|
|
76
81
|
| **Tự động cập nhật** | <a id="feature-autoupdate"></a>Khi dsh khởi động, plugin kiểm tra [bản phát hành GitHub mới nhất](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Nếu bản đó mới hơn và đã có trên npm, plugin cài đúng phiên bản đó qua trình quản lý plugin của chính dsh (cùng cách với Cài đặt → Plugin) và thông báo cho bạn. Khởi động lại dsh để tải bản mới. **Cài đặt → Composer Plus → Cập nhật Composer Plus** hiện phiên bản và có nút **Kiểm tra cập nhật** / **Cập nhật ngay**. Lần đầu dsh khởi động với phiên bản mới, cửa sổ **Có gì mới trong Composer Plus N** hiện ghi chú phát hành của phiên bản đó một lần (lấy từ chính lần kiểm tra cập nhật, không gọi mạng thêm); **Đóng** hoặc `Esc` đóng nó. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ảnh chụp màn hình: Tự động cập nhật"></a> |
|
|
82
|
+
| **Sao lưu** | <a id="feature-backup"></a>Cài đặt → Composer Plus → **Sao lưu** → **Sao lưu ngay** ghi toàn bộ thư mục home của dsh (cuộc trò chuyện, cài đặt, plugin, MCP, skill) vào một tệp lưu trữ duy nhất trong `~/Desktop/dsh-backups`, kèm checksum. Thông tin bí mật được che trong tệp lưu trữ: các tệp thông tin xác thực, tệp khóa (`.pem`, `.key`) và các giá trị token, secret và password trong cài đặt yml chỉ ở lại trên máy tính này, trong `vault` của thư mục. `cache/`, `dsh-runtimes/` và `node_modules` không có trong tệp lưu trữ (dsh tạo lại chúng). Mỗi bản sao lưu trong danh sách có **Kiểm tra** (đọc hết bản sao lưu), **Cho máy tính khác** (một thư mục để sao chép sang máy tính mới, kèm bảng điều khiển cứu hộ) và **Xóa**. Các tệp lưu trữ của dsh-backup trong cùng thư mục cũng hiện ra và dùng được. Để khôi phục, hãy thoát dsh và dùng bảng điều khiển cứu hộ. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Ảnh chụp màn hình: Sao lưu"></a> |
|
|
83
|
+
| **Tự động sao lưu** | <a id="feature-autobackup"></a>Bật **Tự động sao lưu** (mặc định tắt: mỗi bản sao có dung lượng gần bằng thư mục home của dsh khi không tính bộ nhớ đệm). Chọn tần suất (**Mỗi**: từ 6 giờ đến 7 ngày, mặc định 24 giờ) và số bản sao lưu được giữ (**Giữ**: từ 3 đến 14, mặc định 7). Thời điểm tiếp theo hiện bên dưới công tắc; một lần sao lưu thất bại cũng hiện ở đó và được thử lại sau 30 phút. Khi dsh hoặc Composer Plus khởi động với phiên bản mới, một snapshot được tạo ngay sau khi khởi động, trước khi phiên bản mới dùng dữ liệu của bạn lâu (hai bản mới nhất được giữ, đánh dấu **Trước khi nâng cấp**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Ảnh chụp màn hình: Tự động sao lưu"></a> |
|
|
84
|
+
| **Kiểm tra sức khỏe nhật ký phiên** | <a id="feature-sessiondoctor"></a>**Kiểm tra nhật ký phiên** đọc nhật ký của mọi cuộc trò chuyện và liệt kê những nhật ký mà dsh không mở được (frame bị hỏng, bản ghi bị cắt, số thứ tự sai). Phần cuối bị dở dang không được liệt kê: dsh tự sửa phần đó. **Sửa từ bản sao lưu** đưa bản sao từ bản sao lưu mới nhất có bản còn tốt trở lại, và giữ tệp bị hỏng ngay bên cạnh (`.corrupt-<thời gian>`). Các tin nhắn viết sau bản sao lưu đó không có trong bản sao. Cuộc trò chuyện đang mở trong dsh này không được sửa ở đây: hãy thoát dsh và sửa nó trong bảng điều khiển cứu hộ. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Ảnh chụp màn hình: Kiểm tra sức khỏe nhật ký phiên"></a> |
|
|
85
|
+
| **Bảng điều khiển cứu hộ** | <a id="feature-rescueconsole"></a>Mỗi lần sao lưu cũng đặt một bảng điều khiển cứu hộ vào thư mục sao lưu. Khi dsh đã đóng hoặc không khởi động được, hãy mở `Composer Plus Rescue` trong thư mục đó (macOS: `Composer Plus Rescue.command`): một menu trong cửa sổ terminal liệt kê, kiểm tra và khôi phục bản sao lưu, đồng thời kiểm tra và sửa nhật ký phiên. Nó không mở cổng mạng nào. Khi khôi phục, bạn phải gõ `RESTORE`; thư mục home hiện tại của dsh được giữ lại dưới tên `.dsh.pre-restore-<thời gian>`, các thông tin bí mật đã che được đưa trở lại từ vault, và `cache/`, `dsh-runtimes/` và `node_modules` được chuyển sang từ thư mục cũ. Nó chạy được mà không cần dsh: nó dùng Node.js, hoặc chính ứng dụng DeepSeek Harness. Trên máy tính mới, hãy sao chép thư mục của **Cho máy tính khác** và mở `Composer Plus Rescue` ở đó. | <a href="assets/features/rescueConsole.webp"><img src="assets/features/rescueConsole.webp" width="160" alt="Ảnh chụp màn hình: Bảng điều khiển cứu hộ"></a> |
|
|
77
86
|
|
|
78
87
|
<!-- END GENERATED FEATURES -->
|
|
79
88
|
|
|
@@ -117,7 +126,7 @@ Mỗi gói có 3.280 chuỗi văn bản: mọi văn bản giao diện của dsh
|
|
|
117
126
|
| `Esc` | khung soạn thảo trống có dự đoán | ẩn dự đoán |
|
|
118
127
|
| `Cmd/Ctrl+Z` | khung soạn thảo, sau khi dùng **Cải thiện prompt** | đưa văn bản bạn đã gõ trở lại |
|
|
119
128
|
| `Esc` | khung soạn thảo, khi **Cải thiện prompt** đang chạy | hủy cải thiện |
|
|
120
|
-
| `Enter` / `Esc` | tin nhắn trong hàng đợi
|
|
129
|
+
| `Enter` / `Esc` | trình sửa tin nhắn trong hàng đợi | lưu / hủy chỉnh sửa |
|
|
121
130
|
| `Cmd+F` trên Mac, `Ctrl+F` trên Windows và Linux | cuộc trò chuyện đang mở | mở **Tìm trong cuộc trò chuyện** |
|
|
122
131
|
| `Enter` / `Shift+Enter`, `↓` / `↑` | ô **Tìm trong cuộc trò chuyện** | kết quả khớp tiếp theo / trước đó |
|
|
123
132
|
| `Esc` | ô **Tìm trong cuộc trò chuyện** | đóng ô |
|
|
@@ -151,6 +160,9 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
151
160
|
- **Hoàn thành khi gõ:** tắt cho đến khi bạn bật. Khi bật, mỗi lần bạn dừng gõ, phần Host gửi văn bản bạn đã gõ đến lúc đó cùng các tin nhắn của chính bạn trong cuộc trò chuyện và các câu trả lời dạng văn bản của tác tử (không có đầu ra công cụ, ngữ cảnh ẩn hay phần suy luận), tối đa khoảng 3.000 ký tự của cuộc trò chuyện, đến mô hình đã chọn trong **Hoàn thành khi gõ** (mặc định là mô hình của **Dự đoán tin nhắn tiếp theo**). Lần dừng gõ mới sẽ hủy yêu cầu trước đó. Không có gì được lưu vào cuộc trò chuyện. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/complete.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
152
161
|
- **Cải thiện prompt:** không có gì chạy cho đến khi bạn nhấp vào đũa thần. Khi đó, phần Host gửi bản nháp của bạn, các tin nhắn của chính bạn trong cuộc trò chuyện và các câu trả lời dạng văn bản của tác tử (không có đầu ra công cụ, ngữ cảnh ẩn, phần suy luận hay tin nhắn đã bị hoàn tác; tối đa khoảng 6.000 ký tự, phần mới nhất), cùng bản tóm tắt dự án như **Ý tưởng tính năng** (với cùng quy tắc tệp: không có `.env*` hay tệp khóa, không có symlink trỏ ra ngoài thư mục, không có FIFO), các đường dẫn mà `git status` liệt kê là đã thay đổi và tối đa 30 đường dẫn được theo dõi hoặc chưa được theo dõi (không bị bỏ qua) có tên chứa từ trùng với bản nháp của bạn, đến mô hình đã chọn trong **Cải thiện prompt** (mặc định là mô hình của chính cuộc trò chuyện), dưới dạng một yêu cầu duy nhất. Ngoài bản tóm tắt đó, nội dung tệp không được gửi. Không có gì được ghi vào cuộc trò chuyện hay dự án: câu trả lời chỉ thay thế bản nháp của bạn trong khung soạn thảo, và bạn quyết định có gửi hay không. Mô hình đã chọn nằm trong `$DSH_HOME/storages/dsh-composer-plus/improve.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
153
162
|
- **Kiểm tra mục tiêu:** chỉ chạy khi tác tử đánh dấu một `/goal` là hoàn tất trong một vòng tự động (hoặc khi bạn nhấp **Chạy ngay**). Phần Host chạy lệnh kiểm thử trong thư mục của cuộc trò chuyện theo chế độ sandbox của cuộc trò chuyện (giống công cụ `bash` của chính dsh: cùng chính sách truy cập tệp; khi sandbox đó không khởi động được, bài kiểm thử không chạy và bước kiểm tra thất bại). Để tìm lệnh, phần Host chỉ đọc `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` và `pytest.ini`, dưới dạng tệp thông thường bên trong thư mục (không có symlink trỏ ra ngoài thư mục, không có FIFO). Sau đó phần Host gửi mục tiêu, cuộc trò chuyện kể từ khi mục tiêu bắt đầu (tin nhắn của bạn, câu trả lời của tác tử, các lệnh gọi công cụ cắt còn 1.000 ký tự và 2.000 ký tự cuối của mỗi kết quả công cụ; không có phần suy luận, không có bước đã bị hoàn tác; tối đa khoảng 60.000 ký tự, phần mới nhất), `git status --short` và phần cuối đầu ra kiểm thử đến mô hình đã chọn trong **Kiểm tra mục tiêu** (mặc định là mô hình của chính cuộc trò chuyện), dưới dạng một yêu cầu duy nhất không có công cụ. Đầu ra công cụ có thể chứa những gì tác tử đã đọc, nên yêu cầu này có thể chứa một phần tệp của bạn, giống như chính cuộc trò chuyện. Không có gì được ghi vào cuộc trò chuyện hay dự án. Lệnh kiểm thử của bạn, các giới hạn, kết quả gần nhất (kèm phần cuối đầu ra) và mô hình đã chọn nằm trong `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (tệp chỉ chủ sở hữu truy cập được, 500 cuộc trò chuyện mới nhất).
|
|
163
|
+
- **Bộ nhớ dự án:** tắt cho đến khi bạn bật. Khi bật, sau mỗi lượt kết thúc của một cuộc trò chuyện cấp cao nhất, phần Host gửi các tin nhắn mới của chính cuộc trò chuyện đó kể từ lần xem xét trước (tin nhắn của bạn và câu trả lời dạng văn bản của tác tử; không có đầu ra công cụ, suy luận, ngữ cảnh ẩn hay tin nhắn đã hoàn tác; trong cuộc trò chuyện rẽ nhánh, bản sao từ cuộc trò chuyện cha bị bỏ qua; tối đa khoảng 16.000 ký tự) và các ghi chú đã lưu tới mô hình của chính cuộc trò chuyện, trong một yêu cầu không có công cụ. Ghi chú là các tệp Markdown trong `$DSH_HOME/storages/dsh-composer-plus/memory/` (chỉ chủ sở hữu đọc/ghi): `projects/<id>/` cho mỗi thư mục dự án (`<id>` là mã băm của đường dẫn thật của thư mục; `project.json` ghi tên thư mục), `global/`, `journal.jsonl` (mỗi thay đổi kèm dòng trước và sau) và `reviewed.json` (đã đọc mỗi cuộc trò chuyện đến đâu). Không có gì được ghi vào thư mục dự án. Ghi chú trông giống khóa, token, mật khẩu hoặc số giấy tờ tùy thân bị từ chối. Ghi chú của một dự án đi vào system prompt của mỗi cuộc trò chuyện mới trong thư mục đó, nên chúng tới mô hình cùng mọi yêu cầu của cuộc trò chuyện đó. Công tắc nằm trong `memory.json` ở cùng chỗ.
|
|
164
|
+
- **Sao lưu:** không có gì rời khỏi máy của bạn. Tệp lưu trữ được ghi vào `~/Desktop/dsh-backups` (tệp chỉ chủ sở hữu truy cập được). Thông tin bí mật không có trong tệp lưu trữ: các tệp thông tin xác thực (`.credentials.yaml`, `.env`), tệp khóa (`.pem`, `.key`, `.p12`, `.pfx`) và giá trị của các cài đặt token, secret, password và khóa API trong các tệp yml được che; bản thật của chúng nằm trong `composer-plus-vault/<archive>/` ở cùng thư mục (chỉ chủ sở hữu truy cập được), chỉ trên máy tính này. **Cho máy tính khác** không sao chép vault: hãy nhập lại các thông tin bí mật đó ở máy kia. Nhật ký trò chuyện, cài đặt và phần còn lại của thư mục home của dsh nằm nguyên trong tệp lưu trữ: hãy giữ thư mục này riêng tư, như chính `$DSH_HOME`. Quá trình sao lưu đọc tệp bằng `O_NOFOLLOW | O_NONBLOCK`; symlink được lưu dưới dạng liên kết (không bao giờ đi theo), còn FIFO hoặc thiết bị bị bỏ qua. Công tắc và cài đặt của sao lưu tự động nằm trong `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json`, công tắc của bảng điều khiển cứu hộ nằm trong `rescue-console.json`, và trong lúc dsh chạy, `running/host-<pid>.json` cho biết từng tiến trình dsh (bảng điều khiển cứu hộ đọc các tệp này để từ chối khôi phục).
|
|
165
|
+
- **Bảng điều khiển cứu hộ:** một menu trong terminal; nó không mở cổng mạng nào. Khi khôi phục, nó chỉ ghi vào một thư mục mới bên cạnh thư mục home của dsh (tệp được ghi với `O_EXCL | O_NOFOLLOW`, symlink được tạo sau cùng và không bao giờ đi theo) và từ chối tệp lưu trữ có tên không an toàn (`..`, đường dẫn tuyệt đối), thiết bị hoặc FIFO, nhiều hơn một thư mục cấp cao nhất hoặc một mục nằm dưới liên kết.
|
|
154
166
|
|
|
155
167
|
## Khắc phục sự cố
|
|
156
168
|
|
|
@@ -165,11 +177,15 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
165
177
|
- **Thao tác xóa báo rằng một dsh khác đang mở cuộc trò chuyện này:** một dsh thứ hai dùng cùng thư mục home của dsh đang giữ khóa của cuộc trò chuyện. Hãy đóng cửa sổ đó hoặc dsh đó, rồi xóa lại. Trong lúc đó, cuộc trò chuyện vẫn ở trạng thái đã lưu trữ.
|
|
166
178
|
- **iPhone không kết nối được sau khi tôi bật "Tailscale only":** Tailscale phải được bật trên cả máy Mac và iPhone. Bảng Kết nối di động sẽ cảnh báo khi Tailscale đang tắt trên máy Mac. Nhật ký truy cập hiện từng lần thử bị từ chối kèm lý do.
|
|
167
179
|
- **Một cuộc trò chuyện không tiếp tục sau khi khởi động lại:** Tiếp tục sau khi khởi động lại đang tắt khi dsh thoát, bạn đã tự dừng lượt đó, lượt đã kết thúc (xong hoặc thất bại), cuộc trò chuyện đã được lưu trữ, hoặc có hơn 20 cuộc trò chuyện đang chạy (20 cuộc trò chuyện mới nhất sẽ tiếp tục).
|
|
180
|
+
- **Hàng đợi trống sau khi khởi động lại:** chính dsh xóa hàng đợi khi thoát. Tiếp tục sau khi khởi động lại chỉ đặt lại hàng đợi trong cuộc trò chuyện mà nó tiếp tục; ở các cuộc trò chuyện khác, hãy gửi lại tin nhắn. Tin nhắn bạn xóa ngay trước khi thoát có thể quay lại: hãy xóa lại.
|
|
168
181
|
- **Mở issue trên GitHub báo "gh could not open the issue":** thông báo này là dòng đầu tiên của chính `gh`. Chạy `gh auth status` trong terminal và đăng nhập bằng `gh auth login`; thư mục của cuộc trò chuyện phải có một remote GitHub (`git remote -v`). "not installed or not on the PATH of dsh" nghĩa là dsh không tìm thấy `gh`: hãy cài nó, hoặc khởi động dsh từ một terminal mà ở đó `gh` hoạt động.
|
|
169
182
|
- **Dòng cuộc trò chuyện không có nhãn branch:** 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).
|
|
170
183
|
- **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.
|
|
171
184
|
- **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).
|
|
172
|
-
- **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.
|
|
185
|
+
- **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.16.0`), xem ghi chú cài đặt ở trên.
|
|
186
|
+
- **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.
|
|
187
|
+
- **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.
|
|
188
|
+
- **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.
|
|
173
189
|
|
|
174
190
|
## Giới hạn
|
|
175
191
|
|
|
@@ -177,6 +193,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
177
193
|
- **Ý tưởng tính năng** giữ các thẻ trong bộ nhớ cho từng cuộc trò chuyện cho đến khi dsh hoặc trang được tải lại; sau đó **Đề xuất tính năng** hỏi lại mô hình. Thẻ dùng ngôn ngữ giao diện mà dsh đang dùng lúc bạn nhấp; sau khi bạn đổi ngôn ngữ, các thẻ đã có trong chồng giữ ngôn ngữ cũ và **Thêm ý tưởng** dùng ngôn ngữ mới. Mô hình chỉ thấy bản tóm tắt ngắn của dự án, không thấy mã, nên một ý tưởng có thể lặp lại thứ dự án đã có: hãy bỏ qua ý tưởng đó. Cuộc trò chuyện mới chỉ chạy ở chế độ kế hoạch khi profile có lệnh `/plan` của dsh; nếu không, ý tưởng được gửi như một tin nhắn đầu tiên bình thường. Danh sách **Để sau** thuộc về đường dẫn thư mục của cuộc trò chuyện: cùng thư mục đó khi mở qua symlink sẽ có danh sách riêng. Danh sách giữ tối đa 50 ý tưởng cho mỗi dự án (xóa bớt một ý tưởng để thêm ý tưởng khác) và mỗi tiêu đề chỉ một lần. Kéo thẻ chỉ quyết định trái hoặc phải; hãy dùng **↓** để lưu thẻ và **▶** để xây dựng ngay. Ý tưởng lặp lại chỉ được nhận ra qua tiêu đề: mô hình vẫn có thể đề xuất một ý tưởng cũ dưới tên mới; hãy bỏ qua ý tưởng đó. Khi mô hình chỉ trả về các ý tưởng cũ, không có gì mới hiện ra: hãy nhấp lại. Chủ đề trọng tâm hẹp làm điều này dễ xảy ra hơn; hãy dùng chủ đề rộng hơn hoặc xóa chủ đề. Chủ đề trọng tâm được giữ trong ô cho từng cuộc trò chuyện cho đến khi dsh hoặc trang tải lại.
|
|
178
194
|
- **Xuất cuộc trò chuyện dạng Markdown** chỉ có tin nhắn của chính bạn và các câu trả lời dạng văn bản của trợ lý: lệnh gọi công cụ và đầu ra của chúng, phần suy nghĩ, hình ảnh (được đánh dấu bằng một dòng `[image]`), ngữ cảnh ẩn và các tin nhắn mà Hoàn tác lượt hoặc dsh-rewind-plugin đã gỡ bỏ đều không có trong bản xuất. Các câu trả lời trong một lượt được gộp thành một phần. Mỗi lần xuất có tối đa khoảng 4 triệu ký tự; cuộc trò chuyện dài hơn chỉ được xuất phần đầu, kèm một ghi chú.
|
|
179
195
|
- **Tiếp tục sau khi khởi động lại** tiếp tục lượt; tính năng không chạy lại lượt từ đầu. Lệnh gọi công cụ đang chạy lúc thoát sẽ kết thúc với kết quả “không rõ kết quả” của dsh, và mô hình được dặn không lặp lại việc đã xong, nhưng một lệnh không an toàn khi chạy hai lần vẫn có thể chạy lại. Subagent, phê duyệt và câu hỏi đang mở không được khôi phục: cuộc trò chuyện cha của chúng tiếp tục và hỏi lại. Mỗi lần khởi động, tối đa 20 cuộc trò chuyện được tiếp tục.
|
|
196
|
+
- **Tiếp tục sau khi khởi động lại** và hàng đợi: dsh xóa hàng đợi của cuộc trò chuyện khi thoát. Plugin đặt lại các tin nhắn trong hàng đợi của bạn từ nhật ký của cuộc trò chuyện, giữ thứ tự, nội dung đã sửa, hình ảnh và tệp; chúng chạy sau lượt được tiếp tục. Chỉ cuộc trò chuyện được tiếp tục mới lấy lại hàng đợi (công tắc bật, thoát khi lượt đang chạy). dsh ghi việc bạn tự xóa các tin nhắn cuối trong hàng đợi theo cùng cách: nếu bạn xóa chúng và dsh thoát trước khi bước tiếp theo bắt đầu, chúng sẽ quay lại.
|
|
180
197
|
|
|
181
198
|
- **Tìm trong nội dung** là tìm kiếm của chính dsh, nên có các giới hạn của dsh. Tính năng chỉ tìm trong tin nhắn của người dùng và trợ lý: không tìm trong đầu ra công cụ (lệnh, nội dung tệp, kết quả), không tìm trong phần suy luận, và không có bộ lọc theo tin nhắn người dùng, trợ lý hay công cụ. Tính năng khớp nguyên từ, không khớp một phần của từ (`deploy` không tìm thấy `deployment`); chữ có dấu khớp với chữ không dấu (`seker` tìm thấy `şeker`). Mỗi cuộc trò chuyện một dòng, kèm đoạn trích 240 ký tự của dsh, tối đa 20 dòng.
|
|
182
199
|
- Chi phí của **Tìm trong nội dung**, đo trên bản sao của 247 nhật ký trò chuyện thật (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB): lần tìm đầu tiên sau khi khởi động xây dựng chỉ mục trong khoảng 15 giây. Trong thời gian đó, Host của dsh không phản hồi gì trong khoảng 7 giây, nên các cuộc trò chuyện khác ngừng truyền dữ liệu trong lúc ấy (bản thân trang không bị treo). Bộ nhớ của Host tăng khoảng 1,1 GB ở mức cao nhất; một phút sau vẫn cao hơn lúc khởi động khoảng 0,5–0,6 GB, cho đến khi dsh thoát. Tệp chỉ mục khoảng 165 MB. Các lần tìm sau mất khoảng 0,5 giây. Sau khi khởi động lại, lần tìm đầu tiên mất khoảng 1 giây (chỉ thêm các cuộc trò chuyện mới hoặc đã thay đổi) và dùng thêm khoảng 70 MB. Hãy tắt tính năng nếu máy tính của bạn ít bộ nhớ.
|
|
@@ -187,19 +204,25 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
187
204
|
- dsh 0.2.1 tải bản cập nhật ngay lập tức khi phiên bản mới không thay đổi cài đặt nào của dsh; trong các trường hợp khác và trên dsh 0.2.0, hãy khởi động lại dsh để tải bản cập nhật. Plugin không bao giờ tự khởi động lại dsh thay bạn. Profile web/CLI không có trình quản lý plugin của dsh chỉ báo có phiên bản mới.
|
|
188
205
|
- **Cho phép trong cuộc trò chuyện này** tính giới hạn thời gian từ lúc cấp quyền. Giới hạn thời gian mới áp dụng ngay cho các quyền đang có hiệu lực, nên một giới hạn ngắn hơn có thể kết thúc chúng ngay. Quyền từ phiên bản 1.12 trở về trước không có thời gian: sau khi cập nhật, agent sẽ hỏi lại một lần cho các công cụ đó.
|
|
189
206
|
- **Giữ con trỏ trong khung soạn thảo** chỉ trả lại tiêu điểm sau một lệnh `/` hoặc một skill. Trong lúc dsh xử lý lệnh, khung soạn thảo ở chế độ chỉ đọc trong vài mili giây, nên các phím nhấn trong khoảng đó bị mất. Nếu menu `/` của dsh vẫn đang mở, `Enter` chọn dòng đang được tô sáng và không gửi.
|
|
190
|
-
- **
|
|
207
|
+
- **Vừa thẻ câu hỏi với cửa sổ** chỉ thay đổi thẻ câu hỏi của dsh, không thay đổi thẻ duyệt kế hoạch. Tính năng tìm thẻ qua mã đánh dấu của dsh (`data-question-key`, `data-question-scroll`); nếu một bản cập nhật dsh thay đổi mã đánh dấu đó, thẻ hiển thị như dsh vẽ. Chiều cao của thẻ theo cửa sổ, không theo cuộc trò chuyện: trong một cuộc trò chuyện ở bảng bên hẹp, một thẻ cao vẫn có thể vượt lên trên cuộc trò chuyện.
|
|
208
|
+
- **Kết nối di động** chỉ hoạt động trên macOS (dùng `en0`, `openssl`, `swift` và `dns-sd`). Tính năng dùng cố định cổng 19390 và 19391, nên trên mỗi máy Mac, mỗi lúc chỉ một dsh có thể chạy tính năng này (mỗi máy Mac là một mục trong danh sách Mac của điện thoại). Điện thoại chỉ nhận thông báo khi Tether đang mở hoặc vừa chuyển sang chạy nền (không có dịch vụ push). Tether chỉ gửi thông báo sau khi bạn bật "Settings → Notifications → Send notifications" trong Tether. Tùy chọn này tắt theo mặc định, và iOS hỏi quyền khi bạn bật nó. Ứng dụng iOS chưa có trên App Store: hãy build ứng dụng từ `tether/ios` bằng Xcode. "Tailscale only" vẫn cần máy Mac có địa chỉ Wi-Fi hoặc Ethernet (gateway chỉ khởi động khi có địa chỉ đó). Nhật ký truy cập là riêng cho từng máy Mac và chỉ giữ 200 lần thử mới nhất; một lần thử lặp lại trong vòng một phút sẽ tăng số đếm của cùng một dòng thêm một. Khóa ứng dụng của Tether không ẩn bản xem trước thông báo trên Màn hình khóa của iPhone: hãy tắt chúng trong Cài đặt của iOS. Chấm xanh trong Tether theo Mac: cuộc trò chuyện bạn mở trong dsh cũng mất chấm trên điện thoại. Cuộc trò chuyện bạn mở trong Tether chỉ mất chấm trên điện thoại. Chấm riêng của dsh trên Mac vẫn còn cho đến khi bạn mở cuộc trò chuyện đó trên Mac.
|
|
191
209
|
- Liên kết phiên hoạt động bên trong cuộc trò chuyện; nhấp vào liên kết không mở cuộc trò chuyện. Liên kết tạo bằng **Sao chép liên kết tin nhắn** chỉ mở tin nhắn của nó trên dsh 0.2.1 trở lên, và chỉ từ một tin nhắn trong cuộc trò chuyện (dsh 0.2.0 không có quy tắc văn bản người dùng, nên ở đó liên kết vẫn được sao chép nhưng hiện dưới dạng văn bản thường). Tin nhắn mà một lần hoàn tác đã đưa ra, hoặc mà việc nén đã xóa khỏi lịch sử dsh tải, không thể hiển thị: khi đó liên kết sẽ báo như vậy. Các nút 🔗 gắn vào các dòng tin nhắn của dsh; nếu một bản cập nhật dsh thay đổi markup đó, các nút không hiện.
|
|
192
210
|
- **Đánh dấu tất cả là đã đọc** thay đổi các chấm chưa đọc của chính dsh qua một phần của dsh không phải API công khai (danh sách `completionUnread` trong trạng thái phiên của dsh). Nếu một bản cập nhật dsh đổi tên phần này, mục không hiện. Mục được đặt trong menu "…" của dự án trong dsh, và menu này không có vị trí dành cho plugin; nếu dsh thay đổi menu đó, mục cũng không hiện.
|
|
193
|
-
- **Sửa tin nhắn trong hàng đợi tại chỗ**
|
|
211
|
+
- **Sửa tin nhắn trong hàng đợi tại chỗ** không thay đổi tin nhắn đã bắt đầu được gửi trong lúc đó, và không ghi đè tin nhắn đã thay đổi trong lúc đó (ví dụ trong Tether trên iPhone): một thông báo cho biết điều này. Hình ảnh mới cần một mô hình nhận hình ảnh (các giới hạn hình ảnh của chính dsh vẫn áp dụng), và tệp mới phải tải lên xong thì mới lưu được. Chỉ sửa được tin nhắn trong hàng đợi của chính bạn: không sửa được một vòng mục tiêu hoặc một câu trả lời cho câu hỏi trong hàng đợi. Sau khi cập nhật plugin, chỉ việc sửa văn bản hoạt động ngay: hãy khởi động lại dsh trước khi lưu tin nhắn có hình ảnh hoặc tệp (phần Host được tải khi khởi động).
|
|
194
212
|
- **Làm lại** không bao giờ thay đổi cuộc trò chuyện đã hoàn tác: tính năng bắt đầu một cuộc trò chuyện mới từ ngay trước lúc hoàn tác (tính năng tách nhánh của chính dsh, cùng ngữ cảnh mô hình), nên cuộc trò chuyện mới có id và tiêu đề mới. Chỉ lần hoàn tác mới nhất của một cuộc trò chuyện mới làm lại được, một lần, và chỉ khi chưa có gì sau nó (một tin nhắn mới sẽ bỏ lựa chọn này). Tệp bạn đã thay đổi sau lần hoàn tác được giữ lại, trừ khi bạn đánh dấu ô ghi đè. Làm lại cần snapshot mà lần hoàn tác đã giữ (cùng giới hạn 50 mục); lần hoàn tác thực hiện trước phiên bản này, hoặc bằng **Chỉ cuộc trò chuyện**, chỉ đưa tin nhắn trở lại.
|
|
213
|
+
- Bản đồ branch của **Cây** đoán mỗi mũi tên đi đâu, vì git không lưu branch mà một branch được merge vào. Một branch đã merge trỏ tới branch có commit merge đã nhận nó đầu tiên. Một branch đang chờ trỏ tới branch gần nhất mà nó bắt đầu từ đó (ưu tiên branch chính); khi hai branch bắt đầu từ cùng một commit, bản đồ có thể chọn sai. Một branch tiến lên bằng fast-forward không có commit merge, nên nhãn **Đã merge** của nó không mở gì cả. Branch chính là branch mặc định của `origin`, nếu không có thì là `main` hoặc `master`, nếu vẫn không có thì là branch đang mở. Bản đồ đọc 20.000 commit mới nhất và hiện tối đa 60 branch; với lịch sử dài hơn, bản đồ báo rằng một số mũi tên có thể sai. Một branch được merge bằng squash hoặc rebase (ví dụ trên GitHub) hiện là **Đang chờ**: git không giữ liên kết nào với các commit của nó.
|
|
195
214
|
- **Cuộc trò chuyện này** chỉ tính các tệp mà công cụ tệp của dsh (`write`, `edit`, `str_replace_editor`) đã ghi. Tệp do một lệnh (`bash`) thay đổi không có trong chế độ xem này; chúng hiện trong **Chưa commit**. Khi không có snapshot Hoàn tác lượt của cuộc trò chuyện (Hoàn tác lượt đang tắt, đã cài dsh-rewind-plugin, hoặc cuộc trò chuyện cũ hơn plugin), chế độ xem so sánh với commit gần nhất và báo như vậy. Hoàn tác lượt giữ 50 snapshot mới nhất của một cuộc trò chuyện: trong cuộc trò chuyện dài hơn, chế độ xem so sánh với snapshot cũ nhất còn giữ, cho biết từ tin nhắn nào và không tính các thay đổi trước đó. **Ẩn thay đổi khoảng trắng** là `git diff -w`: một dòng chỉ thay đổi khoảng trắng bên trong cũng bị ẩn.
|
|
196
215
|
- **Mở issue trên GitHub** cần GitHub CLI (`gh`) trong PATH của dsh và một remote GitHub trong thư mục của cuộc trò chuyện. Tính năng chạy tối đa 60 giây; nếu `gh` mất nhiều thời gian hơn, issue có thể đã có trên GitHub mà không có liên kết trong danh sách (trước khi nhấp lại, hãy xem trên GitHub: danh sách chỉ đọc liên kết từ một lần chạy đã xong, nên một lần nhấp mới có thể mở issue thứ hai). Thư mục có nhiều hơn một remote GitHub dùng mặc định của chính `gh` (`gh repo set-default`).
|
|
197
216
|
- **Các cuộc trò chuyện đã thay đổi tệp này** chỉ biết các công cụ tệp của dsh (`write`, `edit`, `str_replace_editor`), giống **Cuộc trò chuyện này**: thay đổi do một lệnh (`bash`) tạo ra không được liệt kê. Tính năng đọc 300 cuộc trò chuyện mới nhất của repository (theo thời điểm tạo) và báo khi có nhiều hơn; tính năng hiển thị tối đa 100 dòng. Tệp đã đổi tên được liệt kê theo tên mà công cụ đã ghi. Cuộc trò chuyện có thư mục nằm ngoài repository (kể cả qua một đường dẫn khác tới cùng các tệp) không được tính. Lần mở đầu tiên sau khi khởi động dsh sẽ đọc mọi nhật ký trò chuyện của repository (khoảng 4 giây cho 275 cuộc trò chuyện); các lần mở sau chỉ đọc những cuộc trò chuyện đã thay đổi từ đó.
|
|
198
|
-
- **Branch Git trên dòng cuộc trò chuyện** hiển thị branch của thư mục cuộc trò chuyện khi lượt cuối của nó bắt đầu hoặc kết thúc, không phải branch hiện tại: việc chuyển branch bên ngoài một lượt sẽ hiện sau lượt tiếp theo. Các cuộc trò chuyện từ trước phiên bản này không có nhãn cho đến lượt tiếp theo của chúng. Nhãn nằm trong markup dòng cuộc trò chuyện của dsh (dsh không có vị trí dành cho nó ở đó); nếu một bản cập nhật dsh thay đổi markup đó, nhãn không hiện.
|
|
217
|
+
- **Branch Git trên dòng cuộc trò chuyện** hiển thị branch của thư mục cuộc trò chuyện khi lượt cuối của nó bắt đầu hoặc kết thúc, không phải branch hiện tại: việc chuyển branch bên ngoài một lượt sẽ hiện sau lượt tiếp theo. Các cuộc trò chuyện từ trước phiên bản này không có nhãn cho đến lượt tiếp theo của chúng. Nhãn nằm trong markup dòng cuộc trò chuyện của dsh (dsh không có vị trí dành cho nó ở đó); nếu một bản cập nhật dsh thay đổi markup đó, nhãn không hiện. Nếu dòng dự án phía trên cuộc trò chuyện có cùng tên với branch (ví dụ thư mục của “Branch riêng cho từng cuộc trò chuyện”), dòng cuộc trò chuyện không hiển thị nhãn, nhưng “Trong một danh sách” vẫn hiển thị nhãn.
|
|
218
|
+
- **Branch riêng cho từng cuộc trò chuyện** ở chế độ kế hoạch: dsh gửi `/plan <tin nhắn>` như một lệnh, không phải một tin nhắn, nên Composer Plus chặn thao tác gửi lệnh đó trong ô nhập của dsh (không phải API công khai). Nếu một bản cập nhật dsh thay đổi điều này, `/plan <tin nhắn>` khi đã chọn **Branch mới** sẽ chạy trong Cuộc trò chuyện mới đang mở như lệnh riêng của dsh. Khi Host không thể bật chế độ kế hoạch trong cuộc trò chuyện mới, thư mục branch vẫn còn và tin nhắn không được gửi, nên cuộc trò chuyện mới không thay đổi tệp ở chế độ mặc định.
|
|
219
|
+
- **Branch riêng cho từng cuộc trò chuyện**: khi thư mục branch của một cuộc trò chuyện (`<project>/.worktrees/<name>`) bị xóa, ví dụ khi chính agent của cuộc trò chuyện gỡ worktree và xóa branch, bước tiếp theo của cuộc trò chuyện sẽ chuyển cuộc trò chuyện ra khỏi thư mục đó. Dự án của thư mục branch biến mất khỏi thanh bên, còn cuộc trò chuyện hiển thị dưới Chưa nhóm và vẫn mở. Trên dsh 0.2.1 trở lên, cuộc trò chuyện tiếp tục trong thư mục chính của dự án, và mô hình nhận được một ghi chú về thư mục mới. Trên dsh 0.2.0, cuộc trò chuyện vẫn giữ thư mục đã xóa: lệnh chạy ở đó sẽ lỗi cho đến khi bạn bắt đầu cuộc trò chuyện mới. Việc chuyển chỉ xảy ra ở bước tiếp theo của cuộc trò chuyện, nên dự án của một branch đã xóa mà không cuộc trò chuyện nào dùng vẫn ở lại thanh bên: hãy gỡ nó bằng menu dự án của dsh. Trong lúc một cuộc trò chuyện đang được chuyển, **Branch mới** trong cùng kho mã sẽ trả lời "hãy thử lại". Khi tắt công tắc, lỗi của chính dsh lại hiện ra ("working-directory: directory does not exist").
|
|
220
|
+
- **Branch trong cây không gian làm việc** ghi vào git mà không cần nhấp: khi chuyển một cuộc trò chuyện, nó đưa thư mục dự án về branch trước đó (`git switch`) và thêm một worktree (`git worktree add`). Nó không bao giờ xóa branch, worktree hay tệp. dsh không thể đổi thư mục của một cuộc trò chuyện, nên cuộc trò chuyện được chuyển là một bản sao (fork của chính dsh, với id mới) và cuộc trò chuyện cũ được lưu trữ. Bản sao tiếp tục công việc đã dừng; lệnh gọi công cụ đang chạy khi branch xuất hiện kết thúc bằng một lời từ chối, và agent chạy lại nó trong thư mục mới. Mục tiêu của cuộc trò chuyện cũ không đi theo. Chỉ cuộc trò chuyện có thư mục là thư mục chính của kho mới được chuyển, và chỉ với branch mà nó đã tạo và chuyển sang trong lượt đó (`git switch -c`, `git checkout -b`): branch chỉ tạo bằng `git branch`, thư mục có thay đổi chưa commit, worktree được liên kết hoặc thư mục con đều không chuyển gì. Trong cây chỉ hiện các worktree nằm trực tiếp trong `<project>/.worktrees/` và có branch; worktree tách rời (detached) hoặc ở nơi khác thì không hiện. Bản sao chỉ tự mở khi cuộc trò chuyện của nó là cuộc trò chuyện đang mở (plugin đọc điều này từ hàng thanh bên của dsh); nếu không, nó nằm trong dự án của branch.
|
|
199
221
|
- **Tìm trong cuộc trò chuyện** chỉ tìm trong những gì trang hiển thị: các tin nhắn và câu trả lời đã được tải (cuộn lên hoặc nhấp **Tải cũ hơn** để xem các tin cũ hơn), không tìm trong các bước công cụ đang đóng và không tìm trong văn bản bị thu gọn bên trong đầu ra của công cụ. Tính năng đếm tối đa 2.000 kết quả khớp (sau đó là "2000+"). Tính năng dùng API tô sáng của trình duyệt (Chromium 105 trở lên; ứng dụng máy tính có API này): trong trình duyệt cũ hơn, số đếm và việc di chuyển vẫn hoạt động nhưng không có màu. `Cmd+F` trên Mac (`Ctrl+F` trên Windows và Linux) chỉ mở tính năng khi có một cuộc trò chuyện trên màn hình; ở nơi khác, chức năng tìm của chính trình duyệt vẫn hoạt động như trước. Trên Mac, `Ctrl+F` vẫn giữ chức năng của macOS trong ô văn bản (con trỏ tiến lên một ký tự).
|
|
222
|
+
- **Mở cuộc trò chuyện đang chờ khi không hoạt động** chỉ biết những gì cửa sổ dsh thấy: làm việc trong ứng dụng khác không được tính, nên khi dsh chạy nền, tính năng có thể mở một cuộc trò chuyện đang chờ sau 30 giây. dsh không được đưa lên trước. Chỉ đọc mà không bấm phím, nhấp hay di chuột được tính là không hoạt động. Tính năng chỉ xét các cuộc trò chuyện có chấm cam của dsh (câu hỏi, phê duyệt hoặc xem xét kế hoạch); yêu cầu của subagent hiện trong cuộc trò chuyện cha của nó. Khi một cuộc trò chuyện đang chờ ở trên màn hình, không mở cuộc khác; cuộc trò chuyện bạn rời đi mà chưa trả lời có thể mở lại sau 30 giây không dùng tiếp theo. Không thể thay đổi 30 giây.
|
|
200
223
|
- Nhấp vào thông báo đã gửi trước khi khởi động lại chỉ đưa dsh ra phía trước.
|
|
201
224
|
- Dự án đang hoạt động được di chuyển bằng thứ tự dự án đã lưu của dsh, nên thứ tự mới vẫn được giữ sau khi khởi động lại. Không thể di chuyển cuộc trò chuyện nằm ngoài mọi dự án ("Chưa nhóm"); dsh luôn liệt kê chúng ở cuối.
|
|
202
|
-
- dsh không có điểm mở rộng trong menu tùy chọn hiển thị của thanh bên, nên tùy chọn dự án gần đây được thêm vào chính menu của dsh. Nếu một bản cập nhật dsh thay đổi menu đó, tùy chọn không hiện và mọi dự án vẫn hiển thị. Bộ lọc hoạt động trên các dòng dự án, nên **Trong một danh sách** không bị lọc.
|
|
225
|
+
- dsh không có điểm mở rộng trong menu tùy chọn hiển thị của thanh bên, nên tùy chọn dự án gần đây được thêm vào chính menu của dsh. Nếu một bản cập nhật dsh thay đổi menu đó, tùy chọn không hiện và mọi dự án vẫn hiển thị. Bộ lọc hoạt động trên các dòng dự án, nên **Trong một danh sách** không bị lọc. Trong **Cây không gian làm việc**, thư mục cha vẫn hiển thị khi có một dự án bên trong đang hoạt động, và các dòng trò chuyện không hoạt động trong 2 giờ qua cũng bị ẩn; trong **Không gian làm việc**, chỉ các dòng dự án được lọc. Bộ lọc đọc chế độ xem hiện tại của dsh từ cài đặt chế độ xem mà dsh lưu (không phải API công khai); nếu một bản cập nhật dsh đổi tên cài đặt đó, **Cây không gian làm việc** được lọc như **Không gian làm việc**. Trạng thái dự án đọc cùng cài đặt đó: trong **Cây không gian làm việc**, dòng của thư mục cha cũng tính các cuộc trò chuyện của các dự án bên trong; nếu dsh đổi tên cài đặt, mỗi dòng chỉ hiện các cuộc trò chuyện của chính nó. **Theo trạng thái** có giới hạn tương tự: dsh không có vị trí dành cho kiểu sắp xếp, nên mục này và thứ tự dòng gắn vào markup menu và danh sách của dsh.
|
|
203
226
|
- dsh cũng không có vị trí dành cho menu dòng dự án hay phần đầu Không gian làm việc. **Sao chép đường dẫn** tìm dòng dự án qua markup dòng của dsh, còn **Thu gọn tất cả dự án** được đặt vào phần đầu của dsh và đóng từng dự án đang mở bằng cùng cú nhấp như trên dòng dự án. Nếu một bản cập nhật dsh thay đổi markup đó, nhấp chuột phải sẽ hiện menu của trình duyệt và nút không hiện.
|
|
204
227
|
- dsh cũng không có điểm mở rộng trong menu dự án của cuộc trò chuyện mới, nên ô **Tìm dự án** và thứ tự A–Z gắn vào markup menu của dsh. Nếu một bản cập nhật dsh thay đổi markup đó, menu hiện đúng như dsh vẽ: theo thứ tự đã lưu và không có ô tìm kiếm. Thứ tự A–Z chỉ là cách hiển thị: nó không thay đổi thứ tự dự án đã lưu của dsh.
|
|
205
228
|
- dsh cũng không có điểm mở rộng để chọn nơi **Phiên mới** mở. **Không gian làm việc mặc định cho Phiên mới** bọc một phương thức của dsh không phải API công khai (`startSession` của dịch vụ không gian làm việc của dsh). Nếu một bản cập nhật dsh đổi tên nó, **Phiên mới** sẽ mở ở nơi dsh chọn (dự án đang mở hoặc gần nhất). Mọi lệnh gọi không chỉ định dự án đều dùng mặc định: nút trên thanh bên, phím tắt của nút, logo và cả **Mới** trên trang **Tác vụ tự động**. dsh vẫn mở cuộc trò chuyện cuối cùng khi khởi động. Thư mục chung được tạo và thêm vào dự án của bạn ở lần dùng đầu tiên; trên Windows hoặc Linux có thư mục Documents đã di chuyển, thư mục này có thể khác thư mục của dsh.
|
|
@@ -207,6 +230,12 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
207
230
|
- **Hoàn thành khi gõ** hiện văn bản qua gợi ý khung soạn thảo của chính dsh (kiểu `--dsh-composer-hint` mà dsh dùng cho gợi ý đối số của lệnh gạch chéo). Tính năng không chạy với lệnh gạch chéo, tin nhắn có nhãn tệp hoặc nhãn ký hiệu, hoặc khi con trỏ không ở cuối tin nhắn. Nếu một bản cập nhật dsh thay đổi kiểu đó, phần hoàn thành sẽ không hiện. Mỗi lần bạn dừng gõ tốn một lần gọi mô hình.
|
|
208
231
|
- **Cải thiện prompt** chỉ thấy bản tóm tắt ngắn về dự án, các đường dẫn đã thay đổi và các đường dẫn có tên khớp với từ ngữ của bạn: không thấy chính mã nguồn. Vì vậy tính năng có thể bỏ sót đúng tệp cần dùng, và chỉ nêu những đường dẫn được cung cấp. Hãy đọc văn bản mới trước khi gửi. Tính năng không chạy với lệnh gạch chéo hoặc tin nhắn có nhãn tệp hoặc nhãn ký hiệu (văn bản mới là văn bản thuần, nên sẽ mất nhãn), và một tin nhắn có tối đa 8.000 ký tự. Hình ảnh vẫn được đính kèm: chỉ văn bản thay đổi. Mỗi lần nhấp tốn một lần gọi mô hình; một mô hình mạnh có thể mất một phút (`Esc` để hủy).
|
|
209
232
|
- **Kiểm tra mục tiêu** chỉ kiểm tra lần hoàn tất mà tác tử thực hiện trong một vòng mục tiêu tự động: lần hoàn tất mà bạn yêu cầu trong cuộc trò chuyện, `/goal` và thanh mục tiêu không được kiểm tra. Tác tử có thể tự thay đổi các bài kiểm thử hoặc các tệp của lệnh kiểm thử; bộ xác minh đọc cuộc trò chuyện và có thể thấy điều đó, nhưng có thể sai theo cả hai hướng (một kết quả "chưa xong" sai tốn thêm một vòng; một kết quả "đã xong" sai đóng mục tiêu). Bộ xác minh thấy cuộc trò chuyện và `git status`, không thấy chính mã nguồn. Một lần chạy kiểm thử chỉ được dùng lại khi bước mới nhất có thể thay đổi tệp của tác tử là lần chạy `bash` đạt của chính tác tử với đúng cùng một lệnh trong cùng thư mục; lệnh có pipe (`| tail`) hoặc `&&` không được dùng lại. Ngân sách được đo khi một lượt kết thúc, nên một lượt có thể vượt quá ngân sách. Chỉ tính các lần gọi mô hình của chính cuộc trò chuyện (không tính của các subagent). `update_goal` chờ trong khi bước kiểm tra chạy (bài kiểm thử tối đa 15 phút, bộ xác minh tối đa 3 phút). Cuộc trò chuyện tách nhánh nhận một id cuộc trò chuyện mới, nên bắt đầu mà không có lệnh kiểm thử và các giới hạn riêng của cuộc trò chuyện gốc. Mỗi lần hoàn tất đi đến bộ xác minh tốn một lần gọi mô hình.
|
|
233
|
+
- **Ưu tiên tin nhắn gửi sau khi Dừng** chỉ hoạt động sau khi bạn dừng cuộc trò chuyện (hoặc sau một lượt bị lỗi, hoặc khi bạn mở một cuộc trò chuyện vẫn còn hàng đợi): tin nhắn bạn gửi khi một lượt đang chạy vẫn chờ ở cuối hàng đợi. Nó chỉ vượt lên trước các tin nhắn của chính bạn trong hàng đợi: nếu trong hàng đợi có một vòng mục tiêu hoặc một câu trả lời cho câu hỏi đang chờ, thứ tự của dsh được giữ nguyên. Nó đọc một phần của dsh không phải là API công khai (lượt đã dừng có còn đang kết thúc không); nếu một bản cập nhật dsh đổi tên phần đó, tin nhắn chỉ được đưa lên đầu sau khi lượt đó kết thúc. Cuộc trò chuyện của subagent giữ thứ tự của dsh.
|
|
234
|
+
- **Bộ nhớ dự án** thuộc về thư mục đầu tiên của cuộc trò chuyện (thư mục dự án của dsh): cuộc trò chuyện đổi thư mục bằng `cd` vẫn giữ bộ nhớ của dự án đầu tiên, và cùng thư mục được mở qua một đường dẫn khác tới cùng các tệp sẽ dùng chung bộ nhớ. Cuộc trò chuyện cố định phần bộ nhớ khi bắt đầu, nên ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo (`memory_recall` tìm thấy ngay). Việc xem xét chỉ giữ những gì mô hình quyết định giữ: có thể bỏ sót một dữ kiện hoặc giữ một dữ kiện sai; hãy mở các tệp để kiểm tra, và sửa hoặc xóa bằng tay khi dsh đã đóng. Mỗi lượt kết thúc có tin nhắn của bạn tốn một lần gọi mô hình; lần gọi thất bại sẽ đọc lại cùng các tin nhắn sau lượt tiếp theo. Cuộc trò chuyện của tác tử con không được xem xét. Ý tưởng và định dạng tệp lấy từ [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus không dùng mã của nó và không bao giờ đọc hay ghi bộ nhớ riêng của DS Bot.
|
|
235
|
+
- **Sao lưu** dùng một thư mục cố định duy nhất, `~/Desktop/dsh-backups` (thư mục mặc định của dsh-backup, nên các tệp lưu trữ của nó vẫn dùng được); không có cài đặt cho thư mục khác. Một tệp lưu trữ lớn gần bằng thư mục home của dsh khi không tính `cache/` và `dsh-runtimes/` (đo thực tế: 1,6 GB tệp tạo ra tệp lưu trữ 830 MB trong khoảng 30 giây trên Apple Silicon; dsh vẫn phản hồi bình thường). Một tệp thay đổi trong lúc được đọc sẽ được lưu ở trạng thái lúc quá trình sao lưu mở nó, nên nhật ký của một cuộc trò chuyện đang mở có thể kết thúc bằng một bản ghi bị cắt, và dsh sửa bản ghi đó ở lần ghi tiếp theo. Việc che tìm thông tin bí mật trong tệp yml theo tên khóa trên một dòng (`token:`, `apiKey:`, …); thông tin bí mật trong flow map (`{token: x}`), trong một danh sách dưới khóa như vậy, trong tệp JSON (ví dụ `apiKey` của một máy chủ MCP trong tệp `.json`) hoặc dưới tên khác vẫn nằm trong tệp lưu trữ. Các tệp lưu trữ theo loại của dsh-backup (`dsh-t-…`) không được liệt kê. **Cho máy tính khác** sao chép tệp lưu trữ (trên APFS là bản clone: không tốn thêm dung lượng); vault không đi kèm. **Sao lưu ngay** không xóa bản sao lưu nào. Một lần sao lưu tự động giữ các bản sao lưu mới nhất do Composer Plus tạo (cài đặt **Giữ** của **Tự động sao lưu**) và xóa các bản cũ hơn do nó tạo; các snapshot trước khi nâng cấp được đếm riêng (giữ lại 2 bản mới nhất). Các tệp lưu trữ của dsh-backup không bao giờ bị xóa: hãy xóa chúng bằng **Xóa**. Khi dsh-backup vẫn còn được cài, nó tính các tệp lưu trữ của Composer Plus vào số bản giữ lại của riêng nó và có thể xóa chúng.
|
|
236
|
+
- **Khôi phục** chỉ chạy trong bảng điều khiển cứu hộ, khi dsh đã đóng: nó thay toàn bộ thư mục home của dsh. Thư mục cũ vẫn nằm bên cạnh dưới tên `.dsh.pre-restore-<time>` cho đến khi bạn xóa, nên ổ đĩa cần đủ chỗ cho cả hai. Các cuộc trò chuyện giữ nguyên đường dẫn dự án: trên máy tính khác, một dự án ở đường dẫn khác sẽ hiện là bị thiếu cho đến khi bạn thêm lại. Các symlink trỏ ra ngoài thư mục home của dsh (ví dụ skill được liên kết từ thư mục khác) được khôi phục dưới dạng liên kết; đích của chúng phải có trên máy tính đó.
|
|
237
|
+
- **Kiểm tra sức khỏe nhật ký phiên** đọc nhật ký mới nhất của mỗi cuộc trò chuyện theo chính các quy tắc của dsh về những gì mở được: một dòng không phải JSON hoặc sai thứ tự chỉ được tính là hỏng khi sau nó có một lần kết thúc lượt (nếu không, dsh mở cuộc trò chuyện mà không có các dòng từ chỗ đó trở đi, nên cuộc trò chuyện không được liệt kê). Nó không đối chiếu các sự kiện trong nhật ký với quy tắc sự kiện của chính dsh, nên một nhật ký mà nó coi là còn tốt vẫn có thể không mở được sau khi nâng cấp dsh. Việc sửa lấy bản sao từ một bản sao lưu: các tin nhắn sau bản sao lưu đó bị mất khỏi cuộc trò chuyện (tệp bị hỏng vẫn nằm bên cạnh). Một cuộc trò chuyện đang mở trong dsh này không được sửa trong Cài đặt: dsh đang giữ nó.
|
|
238
|
+
- **Tự động sao lưu** chỉ chạy khi dsh đang chạy: một lần sao lưu đến hạn trong lúc dsh đóng sẽ chạy khoảng 45 giây sau lần khởi động tiếp theo. Snapshot cho phiên bản mới được tạo sau lần khởi động đó, không phải trước khi cập nhật.
|
|
210
239
|
- Hỗ trợ tích hợp sẵn đã được đề xuất với dự án gốc: `move` cho hàng đợi ở [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), trạng thái Tiếp tục ở [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
211
240
|
|
|
212
241
|
## Câu hỏi thường gặp
|
|
@@ -235,9 +264,19 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
235
264
|
|
|
236
265
|
**Có thể khiến tác tử thôi tự đánh dấu công việc của mình là đã xong, giống các vòng lặp xác minh trong loop engineering không?** Có, với **Kiểm tra mục tiêu** (mặc định bật): bắt đầu một mục tiêu bằng `/goal`. Khi tác tử nói mục tiêu đã hoàn tất, các bài kiểm thử của dự án chạy và một lần gọi mô hình độc lập đối chiếu mục tiêu với cuộc trò chuyện; nếu một trong hai không đạt, mục tiêu vẫn mở và tác tử đọc lý do. Đặt lệnh kiểm thử của riêng bạn, giới hạn thời gian hoặc giới hạn token bằng **Sửa** trong dòng **Kiểm tra mục tiêu** bên dưới mục tiêu.
|
|
237
266
|
|
|
267
|
+
**Tác tử có thể nhớ sở thích của tôi giữa các cuộc trò chuyện, như bộ nhớ của DS Bot không?** Có, với **Bộ nhớ dự án** (mặc định tắt): hãy bật trong **Cài đặt → Composer Plus**. Sau mỗi lượt, sở thích và quyết định lâu dài của bạn được lưu thành ghi chú ngắn cho dự án của cuộc trò chuyện, và mọi cuộc trò chuyện mới trong dự án đó đều đọc chúng. Hãy bảo tác tử nhớ một điều, nó sẽ lưu ngay.
|
|
268
|
+
|
|
269
|
+
**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.
|
|
270
|
+
|
|
271
|
+
**dsh không khởi động được nữa. Làm sao để khôi phục một bản sao lưu?** Mở thư mục sao lưu (`~/Desktop/dsh-backups`) và nhấp đúp vào `Composer Plus Rescue.command` (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`). Chọn `3) Restore a backup`, chọn một bản sao lưu rồi gõ `RESTORE`. Cách này chạy được mà không cần dsh.
|
|
272
|
+
|
|
273
|
+
**Làm sao để chuyển dsh sang máy tính mới?** Trên máy cũ: **Sao lưu** → **Cho máy tính khác** bên cạnh một bản sao lưu. Sao chép thư mục đó sang máy tính mới, cài dsh ở đó, thoát dsh, mở `Composer Plus Rescue` trong thư mục đã sao chép rồi khôi phục. Nhập lại các khóa API của bạn (chúng vẫn ở máy tính cũ).
|
|
274
|
+
|
|
275
|
+
**Một cuộc trò chuyện không mở được sau sự cố. Tôi có thể sửa không?** **Cài đặt → Composer Plus → Kiểm tra sức khỏe nhật ký phiên → Kiểm tra nhật ký phiên**. Cuộc trò chuyện bị hỏng được lấy lại từ bản sao lưu mới nhất bằng **Sửa từ bản sao lưu** (các tin nhắn sau bản sao lưu đó bị mất).
|
|
276
|
+
|
|
238
277
|
**Làm sao để sắp xếp lại tin nhắn trong hàng đợi của dsh?** Kéo tay nắm ⠿ trên tin nhắn trong hàng đợi, hoặc đặt tiêu điểm vào tay nắm rồi nhấn `↑` / `↓`.
|
|
239
278
|
|
|
240
|
-
**Làm sao để sửa lỗi gõ trong một tin nhắn trong hàng đợi?** Nhấp đúp vào tin nhắn trong hàng đợi, sửa văn bản rồi nhấn `Enter` (`Esc` để hủy). Tin nhắn giữ nguyên vị trí trong hàng đợi.
|
|
279
|
+
**Làm sao để sửa lỗi gõ trong một tin nhắn trong hàng đợi?** Nhấp đúp vào tin nhắn trong hàng đợi, sửa văn bản rồi nhấn `Enter` (`Esc` để hủy). Tin nhắn giữ nguyên vị trí trong hàng đợi. Tại đó bạn cũng có thể xóa hình ảnh và tệp của tin nhắn, hoặc thêm mới.
|
|
241
280
|
|
|
242
281
|
**Làm sao để xóa cùng lúc mọi chấm chưa đọc của một dự án?** Thanh bên → nút **…** của dự án → **Đánh dấu tất cả là đã đọc**.
|
|
243
282
|
|
|
@@ -265,13 +304,17 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
265
304
|
|
|
266
305
|
**Làm sao để nhận thông báo macOS / Windows khi một tác vụ dsh xong hoặc cần phê duyệt?** Giữ **Thông báo nền** ở trạng thái bật (mặc định) và cho phép DeepSeek Harness gửi thông báo trong cài đặt của hệ điều hành.
|
|
267
306
|
|
|
307
|
+
**dsh có thể tự mở cuộc trò chuyện đang hỏi tôi không?** Có, với **Mở cuộc trò chuyện đang chờ khi không hoạt động** (bật theo mặc định): khi một cuộc trò chuyện chờ câu trả lời, phê duyệt hoặc xem xét kế hoạch và bạn không dùng dsh trong 30 giây, dsh sẽ mở nó. Khi bạn đang gõ, cuộn hoặc di chuột, tính năng sẽ chờ.
|
|
308
|
+
|
|
268
309
|
**Làm sao để chuyển giao diện DeepSeek Harness sang tiếng Thổ Nhĩ Kỳ, tiếng Tây Ban Nha, tiếng Nhật…?** Cài đặt → Composer Plus → **Ngôn ngữ ứng dụng**.
|
|
269
310
|
|
|
270
311
|
**Làm sao để dùng dsh từ iPhone?** Build ứng dụng Tether từ `tether/ios` (Xcode), bật **Cài đặt → Composer Plus → Kết nối di động (iPhone)**, nhấp **Kết nối di động** ở góc dưới bên trái, quét mã QR (bằng Camera của iPhone hoặc **Scan code** trong Tether), chạm vào **Connect** và nhấp **Approve**. Khi ở xa nhà, hãy dùng Tailscale trên cả hai thiết bị.
|
|
271
312
|
|
|
272
313
|
**Làm sao để Phiên mới luôn mở trong cùng một dự án?** Cài đặt → Composer Plus → **Không gian làm việc mặc định cho Phiên mới** → **Mở Phiên mới trong** → chọn dự án. Nút `+` cạnh dự án khác vẫn mở dự án đó.
|
|
273
314
|
|
|
274
|
-
**Làm sao để làm nhiều tính năng của một dự án cùng lúc, mỗi tính năng trên branch riêng?** Dùng **Branch riêng cho từng cuộc trò chuyện**: cuộc trò chuyện mới
|
|
315
|
+
**Làm sao để làm nhiều tính năng của một dự án cùng lúc, mỗi tính năng trên branch riêng?** Dùng **Branch riêng cho từng cuộc trò chuyện**: trên màn hình cuộc trò chuyện mới, nút branch mặc định hiển thị **Branch mới**: gửi tin nhắn đầu tiên. Mỗi cuộc trò chuyện có branch và thư mục worktree riêng, kèm `.env` và `node_modules` của bạn khi `.worktreeinclude` liệt kê chúng. Phần đầu của cuộc trò chuyện cho biết bạn đang ở branch nào.
|
|
316
|
+
|
|
317
|
+
**Thanh bên có thể hiển thị từng branch của một dự án và chuyển cuộc trò chuyện của tôi khi agent tạo branch không?** Có, với **Branch trong cây không gian làm việc** (tắt theo mặc định): bật nó trong Cài đặt → Composer Plus, rồi chọn **Tùy chọn hiển thị** → **Cây không gian làm việc** của dsh. Mỗi branch có worktree trong `<project>/.worktrees/` hiển thị bên trong dự án của nó. Khi bạn bảo agent trong thư mục dự án tạo một branch và làm việc ở đó, và thư mục không có thay đổi chưa commit, cuộc trò chuyện tự chuyển sang branch. Xóa thư mục của branch thì nó rời danh sách; các cuộc trò chuyện của nó chuyển sang **Chưa nhóm**.
|
|
275
318
|
|
|
276
319
|
**Tôi có thể gửi ảnh từ iPhone không?** Có. Trong một cuộc trò chuyện Tether, chạm vào **+** bên cạnh ô tin nhắn → Camera, Photos (tối đa 4) hoặc Paste image. Ảnh được gửi tới cuộc trò chuyện trên Mac dưới dạng tệp đính kèm của tin nhắn, nên mô hình nhìn thấy chúng.
|
|
277
320
|
|
|
@@ -287,6 +330,7 @@ PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh
|
|
|
287
330
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
288
331
|
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
289
332
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
333
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
|
|
290
334
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
291
335
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
292
336
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
@@ -297,10 +341,14 @@ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/
|
|
|
297
341
|
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
298
342
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
299
343
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
344
|
+
# Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
|
|
345
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
|
|
300
346
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
301
347
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
302
348
|
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
303
349
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
350
|
+
# Resume after restart with a queue (fake model, real quit and start): text, image, file, a drag and an edit come back in order
|
|
351
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-resume-queue.mjs /path/to/dsh/lib/bin.js
|
|
304
352
|
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
|
|
305
353
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
306
354
|
# Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
|
|
@@ -315,8 +363,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path
|
|
|
315
363
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
|
|
316
364
|
# Mark all as read, Copy message link, Edit queued message in place, Redo, Changes → This chat and Hide whitespace (fake model, made-up git projects) + their thumbnails
|
|
317
365
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-six-features.mjs /path/to/dsh/lib/bin.js
|
|
318
|
-
# Changes Tree (fake model, made-up git history): branch
|
|
366
|
+
# Changes Tree (fake model, made-up git history): the branch map (counts, colors, arrows), a branch's commits, commit files and diffs, Merged and Waiting files, back marks the box + its thumbnail
|
|
319
367
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
|
|
368
|
+
# Branches in the workspace tree (fake model, made-up git project): a worktree becomes a project, the agent's new branch moves the chat, a deleted folder leaves the tree + its thumbnail
|
|
369
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-branch-tree.mjs /path/to/dsh/lib/bin.js
|
|
320
370
|
# Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
|
|
321
371
|
PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
|
|
322
372
|
# Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
|
|
@@ -327,6 +377,9 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path
|
|
|
327
377
|
# Queue drag-and-drop and Continue with a queued message (slow fake model)
|
|
328
378
|
PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
|
|
329
379
|
PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
|
|
380
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
381
|
+
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
382
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
330
383
|
```
|
|
331
384
|
|
|
332
385
|
```sh
|