dsh-composer-plus 1.11.2 → 1.12.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 +54 -38
- package/README.es.md +54 -38
- package/README.fr.md +54 -38
- package/README.hi.md +54 -38
- package/README.id.md +54 -38
- package/README.ja.md +54 -38
- package/README.ko.md +54 -38
- package/README.md +54 -38
- package/README.pt-BR.md +54 -38
- package/README.ru.md +54 -38
- package/README.tr.md +54 -38
- package/README.vi.md +54 -38
- package/README.zh.md +54 -38
- package/assets/features/promptImprove.webp +0 -0
- package/client.js +302 -15
- package/index.js +258 -34
- package/package.json +3 -2
- package/tether/gateway/server.mjs +16 -7
package/README.vi.md
CHANGED
|
@@ -14,7 +14,7 @@ Các tính năng tiện ích kiểu Codex cho ứng dụng desktop và giao di
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness với Composer Plus: dự án đang chạy hiện biểu tượng xoay trên thanh bên và Bảng thay đổi hiện một git diff"></p>
|
|
16
16
|
|
|
17
|
-
Đây là plugin cộng đồng, không chính thức. Lệnh gọi mạng duy nhất là việc kiểm tra cập nhật (GitHub releases và npm registry). Tắt **Tự động cập nhật** để dừng các lệnh gọi này khi khởi động. **Ý tưởng tính năng** chỉ gọi mô hình của chính cuộc trò chuyện khi bạn nhấp **Đề xuất tính năng**. **Dự đoán tin nhắn tiếp theo** (mặc định bật) gọi mô hình đã chọn trong Cài đặt (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác) một lần sau mỗi lượt đã xong, không cần nhấp. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi này. **Hoàn thành khi gõ** (mặc định tắt) gọi mô hình đã chọn cho tính năng này (mặc định là mô hình của dự đoán) mỗi lần bạn dừng gõ, sau khi bạn bật tính năng này. **Kết nối di động** (mặc định tắt) chỉ nhận kết nối iPhone từ mạng cục bộ hoặc tailnet của bạn sau khi bạn bật tính năng này.
|
|
17
|
+
Đây là plugin cộng đồng, không chính thức. Lệnh gọi mạng duy nhất là việc kiểm tra cập nhật (GitHub releases và npm registry). Tắt **Tự động cập nhật** để dừng các lệnh gọi này khi khởi động. **Ý tưởng tính năng** chỉ gọi mô hình của chính cuộc trò chuyện khi bạn nhấp **Đề xuất tính năng**. **Dự đoán tin nhắn tiếp theo** (mặc định bật) gọi mô hình đã chọn trong Cài đặt (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác) một lần sau mỗi lượt đã xong, không cần nhấp. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi này. **Hoàn thành khi gõ** (mặc định tắt) gọi mô hình đã chọn cho tính năng này (mặc định là mô hình của dự đoán) mỗi lần bạn dừng gõ, sau khi bạn bật tính năng này. **Cải thiện prompt** chỉ gọi mô hình khi bạn nhấp vào đũa thần. **Kết nối di động** (mặc định tắt) chỉ nhận kết nối iPhone từ mạng cục bộ hoặc tailnet của bạn sau khi bạn bật tính năng này.
|
|
18
18
|
|
|
19
19
|
## Cách cài đặt
|
|
20
20
|
|
|
@@ -29,46 +29,51 @@ 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.12.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
36
|
+
<!-- BEGIN GENERATED FEATURES: edit docs/features.json, then run npm run build:readme -->
|
|
37
|
+
|
|
36
38
|
| Tính năng | Cách dùng | Ảnh chụp màn hình |
|
|
37
39
|
|---|---|---|
|
|
38
|
-
| **Bảng thay đổi** | Thanh bên phải → `+` → **Thay đổi**. 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. | <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> |
|
|
39
|
-
| **Ý tưởng tính năng** | 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, 15 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. **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> |
|
|
40
|
-
| **Tìm trong nội dung** |
|
|
41
|
-
| **Hoàn tác lượt** | 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. | <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> |
|
|
42
|
-
| **Xóa cuộc trò chuyện** | Thanh bên → menu **…** của một cuộc trò chuyện (hoặc nhấp chuột phải) → **Xóa…** → **Xóa**. Bản thân dsh chỉ có thể lưu trữ. Cuộc trò chuyện dừng lại (lượt đang chạy, tác vụ nền, subagent và tác vụ tự động của nó cũng dừng, giống như khi dsh lưu trữ). Lịch sử đã lưu, cùng các cuộc trò chuyện subagent, được chuyển vào Thùng rác của macOS (trên hệ thống khác: `$DSH_HOME/trash`). Để lấy lại, hãy đưa thư mục về chỗ cũ và khởi động lại dsh: cuộc trò chuyện hiện trong chế độ xem **Chỉ mục đã lưu trữ** của thanh bên. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Ảnh chụp màn hình Xóa cuộc trò chuyện"></a> |
|
|
43
|
-
| **Tên dự án trong khung soạn** | Dòng bên dưới khung soạn thảo (số lượt, token, tỷ lệ trúng cache, ngữ cảnh) bắt đầu bằng tên dự án của cuộc trò chuyện. Nhờ đó bạn luôn biết cuộc trò chuyện đang làm việc trong dự án nào. Đây là tiêu đề dự án của chính dsh, hoặc tên thư mục khi dự án không có tiêu đề. Di chuột lên tên để xem đường dẫn đầy đủ của thư mục. Nhấp vào tên để tìm cuộc trò chuyện trên thanh bên, trong chế độ xem danh sách hoặc theo dự án: thanh bên và dự án mở ra (kể cả dự án đã thu gọn và mục **Hiện thêm** của nó), danh sách cuộn đến cuộc trò chuyện và cuộc trò chuyện nhấp nháy trong 5 giây. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Ảnh chụp màn hình Tên dự án trong khung soạn"></a> |
|
|
44
|
-
| **Lịch sử nhập** | 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> |
|
|
45
|
-
| **
|
|
46
|
-
| **Giữ con trỏ trong khung soạn thảo** | 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> |
|
|
47
|
-
| **Tiếp tục bằng một cú nhấp** | 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> |
|
|
48
|
-
| **Tiếp tục sau khi khởi động lại** | 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> |
|
|
49
|
-
| **Kéo thả hàng đợi** | 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> |
|
|
50
|
-
| **Sao chép liên kết phiên** | 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> |
|
|
51
|
-
| **Xuất cuộc trò chuyện dạng Markdown** | 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> |
|
|
52
|
-
| **Sao chép đường dẫn dự án** | Nhấp chuột phải vào một dự án trên thanh bên → **Sao chép đường dẫn** để sao chép đường dẫn đầy đủ của thư mục dự án. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Ảnh chụp màn hình Sao chép đường dẫn dự án"></a> |
|
|
53
|
-
| **Tìm dự án trong cuộc trò chuyện mới** | 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> |
|
|
54
|
-
| **Dự đoán tin nhắn tiếp theo** | 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> |
|
|
55
|
-
| **Hoàn thành khi gõ** | 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> |
|
|
56
|
-
| **
|
|
57
|
-
| **
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
| **
|
|
61
|
-
| **
|
|
62
|
-
| **
|
|
63
|
-
| **
|
|
64
|
-
| **
|
|
65
|
-
| **
|
|
40
|
+
| **Bảng thay đổi** | <a id="feature-changespanel"></a>Thanh bên phải → `+` → **Thay đổi**. 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. | <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
|
+
| **Ý 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, 15 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. **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
|
+
| **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
|
+
| **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. | <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> |
|
|
44
|
+
| **Xóa cuộc trò chuyện** | <a id="feature-deletechat"></a>Thanh bên → menu **…** của một cuộc trò chuyện (hoặc nhấp chuột phải) → **Xóa…** → **Xóa**. Bản thân dsh chỉ có thể lưu trữ. Cuộc trò chuyện dừng lại (lượt đang chạy, tác vụ nền, subagent và tác vụ tự động của nó cũng dừng, giống như khi dsh lưu trữ). Lịch sử đã lưu, cùng các cuộc trò chuyện subagent, được chuyển vào Thùng rác của macOS (trên hệ thống khác: `$DSH_HOME/trash`). Để lấy lại, hãy đưa thư mục về chỗ cũ và khởi động lại dsh: cuộc trò chuyện hiện trong chế độ xem **Chỉ mục đã lưu trữ** của thanh bên. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Ảnh chụp màn hình: Xóa cuộc trò chuyện"></a> |
|
|
45
|
+
| **Tên dự án trong khung soạn** | <a id="feature-projectname"></a>Dòng bên dưới khung soạn thảo (số lượt, token, tỷ lệ trúng cache, ngữ cảnh) bắt đầu bằng tên dự án của cuộc trò chuyện. Nhờ đó bạn luôn biết cuộc trò chuyện đang làm việc trong dự án nào. Đây là tiêu đề dự án của chính dsh, hoặc tên thư mục khi dự án không có tiêu đề. Di chuột lên tên để xem đường dẫn đầy đủ của thư mục. Nhấp vào tên để tìm cuộc trò chuyện trên thanh bên, trong chế độ xem danh sách hoặc theo dự án: thanh bên và dự án mở ra (kể cả dự án đã thu gọn và mục **Hiện thêm N phiên** của nó), danh sách cuộn đến cuộc trò chuyện và cuộc trò chuyện nhấp nháy trong 5 giây. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Ảnh chụp màn hình: Tên dự án trong khung soạn"></a> |
|
|
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
|
+
| **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
|
+
| **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
|
+
| **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
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
53
|
+
| **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> |
|
|
54
|
+
| **Sao chép đường dẫn dự án** | <a id="feature-copyprojectpath"></a>Nhấp chuột phải vào một dự án trên thanh bên → **Sao chép đường dẫn** để sao chép đường dẫn đầy đủ của thư mục dự án. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Ảnh chụp màn hình: Sao chép đường dẫn dự án"></a> |
|
|
55
|
+
| **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> |
|
|
56
|
+
| **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> |
|
|
57
|
+
| **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> |
|
|
58
|
+
| **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> |
|
|
59
|
+
| **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ố. Một nhãn nhỏ ở phần đầu liệt kê các quyền đã cấp 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> |
|
|
60
|
+
| **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> |
|
|
61
|
+
| **Ư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> |
|
|
62
|
+
| **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> |
|
|
63
|
+
| **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> |
|
|
64
|
+
| **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> |
|
|
65
|
+
| **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> |
|
|
66
|
+
| **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> |
|
|
67
|
+
| **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, 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. | <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> |
|
|
68
|
+
| **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> |
|
|
69
|
+
|
|
70
|
+
<!-- END GENERATED FEATURES -->
|
|
66
71
|
|
|
67
72
|
Nút, chú thích khi di chuột, thông báo trong ứng dụng và thông báo hệ thống đều theo ngôn ngữ dsh đã chọn (xem phần Ngôn ngữ ứng dụng bên dưới).
|
|
68
73
|
|
|
69
74
|
## Cài đặt
|
|
70
75
|
|
|
71
|
-
Bạn có thể bật hoặc tắt riêng từng tính năng: dsh **Cài đặt → Composer Plus**. Mỗi dòng có một ảnh chụp màn hình nhỏ: di chuột lên để xem ảnh lớn hơn, nhấp để mở ở kích thước đầy đủ (`Esc` để đóng). Ô **Tìm tính năng** ở đầu trang lọc trang theo tên hoặc mô tả (mọi ngôn ngữ, không phân biệt chữ hoa/thường và dấu); `Esc` xóa nội dung ô. Mỗi dòng có một công tắc và một mô tả ngắn. Thay đổi có hiệu lực ngay, không cần khởi động lại, và được ghi nhớ trên thiết bị đó. Mọi tính năng đều bật theo mặc định, trừ **Kết nối di động**, **Tiếp tục sau khi khởi động lại** và **Hoàn thành khi gõ**. Host của dsh giữ công tắc của ba tính năng này cùng **Tìm trong nội dung**, **Hoàn tác lượt** và **Dự đoán tin nhắn tiếp theo**, nên các công tắc này áp dụng cho mọi cửa sổ và vẫn còn sau khi khởi động lại. Host cũng giữ lựa chọn **Mô hình** của **Dự đoán tin nhắn tiếp theo
|
|
76
|
+
Bạn có thể bật hoặc tắt riêng từng tính năng: dsh **Cài đặt → Composer Plus**. Mỗi dòng có một ảnh chụp màn hình nhỏ: di chuột lên để xem ảnh lớn hơn, nhấp để mở ở kích thước đầy đủ (`Esc` để đóng). Ô **Tìm tính năng** ở đầu trang lọc trang theo tên hoặc mô tả (mọi ngôn ngữ, không phân biệt chữ hoa/thường và dấu); `Esc` xóa nội dung ô. Mỗi dòng có một công tắc và một mô tả ngắn. Dấu **?** nhỏ sau tên một dòng mở phần README mô tả tính năng đó, trong README theo ngôn ngữ giao diện của dsh. Thay đổi có hiệu lực ngay, không cần khởi động lại, và được ghi nhớ trên thiết bị đó. Mọi tính năng đều bật theo mặc định, trừ **Kết nối di động**, **Tiếp tục sau khi khởi động lại** và **Hoàn thành khi gõ**. Host của dsh giữ công tắc của ba tính năng này cùng **Tìm trong nội dung**, **Hoàn tác lượt** và **Dự đoán tin nhắn tiếp theo**, nên các công tắc này áp dụng cho mọi cửa sổ và vẫn còn sau khi khởi động lại. Host cũng giữ lựa chọn **Mô hình** của **Dự đoán tin nhắn tiếp theo**, của **Hoàn thành khi gõ** (mặc định là **Giống dự đoán tin nhắn tiếp theo**) và của **Cải thiện prompt** (mặc định là **Giống mô hình của cuộc trò chuyện**). **Tìm trong nội dung** chỉ thay đổi sau khi khởi động lại dsh (dsh đọc cài đặt này lúc khởi động); trước đó, dòng của tính năng hiện **Khởi động lại dsh để áp dụng thay đổi này.**
|
|
72
77
|
|
|
73
78
|
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Cài đặt → Composer Plus: ô tìm tính năng, bộ chọn ngôn ngữ, dòng cập nhật và một công tắc cho mỗi tính năng, kèm ảnh xem trước khi di chuột"></p>
|
|
74
79
|
|
|
@@ -120,16 +125,17 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
120
125
|
- **Hoàn tác lượt:** trước mỗi tin nhắn của bạn, Host chụp một snapshot git của thư mục cuộc trò chuyện vào kho riêng của nó, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (thư mục chỉ chủ sở hữu truy cập được). Kho này chứa bản sao các tệp trong thư mục mà git nhìn thấy (không gồm tệp bị bỏ qua), nên cần được bảo vệ như chính dự án. Host đọc các object trong repository của bạn (không sao chép những gì git đã có) và không bao giờ ghi vào index, `HEAD`, branch, tag, stash hay config của repository. Thay đổi duy nhất git tạo ra ở đó là dấu thời gian mới hơn trên các tệp object được dùng lại (việc này làm `git gc` dọn chúng muộn hơn). Hoàn tác kèm tệp chỉ ghi tệp thông thường bên trong thư mục cuộc trò chuyện; nó bỏ qua symlink, pipe và mọi thứ nằm ngoài thư mục. Không có gì rời khỏi máy của bạn. Bạn có thể xóa kho này khi dsh đang đóng (khi đó hoàn tác chỉ áp dụng cho cuộc trò chuyện, cho đến khi có tin nhắn mới). **Xóa cuộc trò chuyện** cũng xóa kho của cuộc trò chuyện đó. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
121
126
|
- **Xuất cuộc trò chuyện dạng Markdown:** phần Host chỉ đọc nhật ký riêng của cuộc trò chuyện (chính các tin nhắn mà dsh hiển thị) và đưa chúng cho trang; phần này không đọc tệp nào của dự án và không gửi gì qua mạng. Markdown chỉ đi vào bộ nhớ tạm của bạn hoặc vào tệp mà bạn lưu.
|
|
122
127
|
- **Xóa cuộc trò chuyện:** chuyển các thư mục nhật ký riêng của cuộc trò chuyện (`$DSH_HOME/sessions/<project>/<chat>`) vào Thùng rác. Tính năng không động đến thư mục dự án.
|
|
123
|
-
- **Cho phép trong cuộc trò chuyện này:** các quyền được lưu trong `$DSH_HOME/storages/dsh-composer-plus/grants.json` (chỉ chủ sở hữu có quyền truy cập). Mỗi quyền áp dụng cho
|
|
128
|
+
- **Cho phép trong cuộc trò chuyện này:** các quyền được lưu trong `$DSH_HOME/storages/dsh-composer-plus/grants.json` (chỉ chủ sở hữu có quyền truy cập). Mỗi quyền áp dụng cho đúng một công cụ trong một cuộc trò chuyện. Nếu công cụ đó có thể ghi, quyền cũng bao gồm mọi thao tác ghi. Thu hồi quyền từ nhãn ở phần đầu.
|
|
124
129
|
- Đánh giá tự động vẫn chạy ở mọi lệnh gọi; lỗi đánh giá không bao giờ được tự động cho phép.
|
|
125
|
-
- **Kết nối di động:** tắt cho đến khi bạn bật. Khi bật, phần Host chạy gateway Tether: HTTPS trên cổng 19390, chỉ nhận kết nối từ mạng con Wi-Fi và tailnet của bạn (100.64.0.0/10), và một trang ghép nối tại `127.0.0.1:19391` (chỉ máy Mac này). Điện thoại cần một mã dùng một lần từ mã QR (hiệu lực 5 phút) và bạn phải nhấp **Approve** trên máy Mac. Điện thoại ghim (pin) chứng chỉ của gateway. Máy Mac chỉ giữ hash của token của từng điện thoại (30 ngày, được gia hạn khi còn dùng); **
|
|
130
|
+
- **Kết nối di động:** tắt cho đến khi bạn bật. Khi bật, phần Host chạy gateway Tether: HTTPS trên cổng 19390, chỉ nhận kết nối từ mạng con Wi-Fi và tailnet của bạn (100.64.0.0/10), và một trang ghép nối tại `127.0.0.1:19391` (chỉ máy Mac này). Điện thoại cần một mã dùng một lần từ mã QR (hiệu lực 5 phút) và bạn phải nhấp **Approve** trên máy Mac. Điện thoại ghim (pin) chứng chỉ của gateway. Máy Mac chỉ giữ hash của token của từng điện thoại (30 ngày, được gia hạn khi còn dùng); **Remove** đóng ngay các kết nối của điện thoại đó. Điện thoại chỉ gọi được một danh sách cho phép gồm các phương thức dsh (cuộc trò chuyện, prompt, tệp đính kèm, lệnh gạch chéo, phê duyệt, câu hỏi, mô hình, agent, mục tiêu), không gọi được cài đặt, thông tin xác thực, trình duyệt tệp hay terminal. Dữ liệu: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Chi tiết: [tether/README.md](tether/README.md).
|
|
126
131
|
- **Cập nhật:** phần Host hỏi `api.github.com` về bản phát hành mới nhất và hỏi `registry.npmjs.org` về đúng phiên bản đó; không có thông tin nào về bạn hay cuộc trò chuyện của bạn được gửi đi. Việc cài đặt dùng trình quản lý plugin của dsh (`pnpm add dsh-composer-plus@<version>`; khi dsh 0.2.1 từ chối lệnh đó cho một plugin đã cài, dùng `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, và sau đó profile ghi URL đó làm nguồn của plugin), nên các bước kiểm tra registry, script và khả năng tương thích phiên bản của chính dsh đều được áp dụng. Thẻ tiền phát hành (pre-release) và phiên bản cũ hơn không bao giờ được cài.
|
|
127
132
|
- **Dự đoán tin nhắn tiếp theo:** mặc định bật. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi mô hình này. Sau mỗi lượt đã xong, phần Host gửi 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 6.000 ký tự (phần mới nhất), đến mô hình đã chọn (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác). Nội dung này đi qua cài đặt nhà cung cấp của chính dsh, dưới dạng một yêu cầu duy nhất. Không có gì được lưu vào cuộc trò chuyện: dự đoán không được thêm vào lịch sử trò chuyện. Công tắc và mô hình đã chọn nằm trong `$DSH_HOME/storages/dsh-composer-plus/predict.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
128
133
|
- **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).
|
|
134
|
+
- **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).
|
|
129
135
|
|
|
130
136
|
## Khắc phục sự cố
|
|
131
137
|
|
|
132
|
-
- **Không có thông báo trên macOS:** Cài đặt hệ thống → Thông báo → DeepSeek Harness → cho phép. Chọn
|
|
138
|
+
- **Không có thông báo trên macOS:** Cài đặt hệ thống → Thông báo → DeepSeek Harness → cho phép. Chọn Cảnh báo để thông báo ở lại trên màn hình.
|
|
133
139
|
- **▶, tay nắm hàng đợi, trạng thái dự án, tùy chọn dự án gần đây, Thu gọn tất cả dự án, Sao chép đường dẫn, ô tìm dự án, dự đoán tin nhắn tiếp theo, phần hoàn thành khi gõ, Cho phép trong cuộc trò chuyện này hoặc menu chuột phải biến mất sau khi cập nhật dsh:** các phần này gắn vào HTML hiện tại của dsh vì dsh chưa có vị trí dành cho chúng. Nếu dsh thay đổi markup đó, các phần này tự ẩn; không có gì khác bị hỏng. Vui lòng mở một [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
134
140
|
- **"Cập nhật thất bại" hoặc "không được cài từ npm":** bản sao được liên kết từ thư mục cục bộ hoặc đã đổi tên không thể tự cập nhật; hãy cài lại `dsh-composer-plus` từ Cài đặt → Plugin. Trong các trường hợp khác, thông báo hiện dòng đầu tiên của lỗi pnpm; **Kiểm tra cập nhật** sẽ thử lại.
|
|
135
141
|
- **Kết nối di động báo "Cổng kết nối cho điện thoại không chạy":** "no IPv4 address on en0" nghĩa là máy Mac này không có địa chỉ Wi-Fi/Ethernet; "EADDRINUSE" nghĩa là một dsh khác (hoặc một ứng dụng khác) đang dùng cổng 19390 hoặc 19391. Mỗi lúc chỉ một dsh có thể chạy Kết nối di động.
|
|
@@ -139,7 +145,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
139
145
|
- **Cuộc trò chuyện và tệp bị mờ:** dự án không phải repository git, không có snapshot từ trước tin nhắn đó (tin nhắn cũ hơn plugin, hoặc một trong 50 snapshot mới nhất đã thay thế snapshot đó), hoặc không có tệp nào thay đổi.
|
|
140
146
|
- **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ữ.
|
|
141
147
|
- **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).
|
|
142
|
-
- **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.
|
|
148
|
+
- **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.12.0`), xem ghi chú cài đặt ở trên.
|
|
143
149
|
|
|
144
150
|
## Giới hạn
|
|
145
151
|
|
|
@@ -156,7 +162,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
156
162
|
- Hàng đợi của dsh không có thao tác `move`, nên phần Host của plugin di chuyển chính tin nhắn đang chờ trong hàng đợi của dsh (một thay đổi, vẫn là tin nhắn đó). Tin nhắn có hình ảnh hoặc tệp cũng di chuyển được. Chỉ tin nhắn của chính bạn mới di chuyển đượ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 vẫn ở nguyên chỗ. Nếu một tin nhắn bắt đầu được gửi trong lúc bạn kéo, không có gì được di chuyển và một thông báo cho biết điều đó.
|
|
157
163
|
- 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.
|
|
158
164
|
- **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.
|
|
159
|
-
- **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). Ứng dụng iOS chưa có trên App Store: hãy build ứng dụng từ `tether/ios` bằng Xcode.
|
|
165
|
+
- **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). Ứng dụng iOS chưa có trên App Store: hãy build ứng dụng từ `tether/ios` bằng Xcode. 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.
|
|
160
166
|
- 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.
|
|
161
167
|
- 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.
|
|
162
168
|
- 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.
|
|
@@ -165,6 +171,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
165
171
|
- 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.
|
|
166
172
|
- dsh cũng không có điểm mở rộng cho gợi ý trong khung soạn thảo, nên văn bản của **Dự đoán tin nhắn tiếp theo** nằm đè lên văn bản giữ chỗ của chính dsh (`[data-composer-placeholder]`). Nếu một bản cập nhật dsh thay đổi markup đó, dự đoán sẽ không hiện. Khi tính năng đang bật, mỗi lượt đã xong tốn một lần gọi mô hình ngắn.
|
|
167
173
|
- **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.
|
|
174
|
+
- **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).
|
|
168
175
|
- 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).
|
|
169
176
|
|
|
170
177
|
## Câu hỏi thường gặp
|
|
@@ -189,6 +196,8 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
189
196
|
|
|
190
197
|
**Mô hình nào viết dự đoán?** Mô hình bạn chọn trong **Cài đặt → Composer Plus → Dự đoán tin nhắn tiếp theo → Mô hình**. Danh sách này là danh sách mô hình của chính dsh. **Mặc định của dsh** đi theo mô hình mặc định của dsh. Nếu dsh không còn liệt kê mô hình đã chọn, dự đoán dùng mô hình mặc định. **Hoàn thành khi gõ** có menu **Mô hình** riêng: **Giống dự đoán tin nhắn tiếp theo** (mặc định) đi theo mô hình của dự đoán; lựa chọn khác chỉ dùng cho phần hoàn thành. Nếu dsh không còn liệt kê mô hình đó, phần hoàn thành dùng mô hình của dự đoán.
|
|
191
198
|
|
|
199
|
+
**dsh có thể cải thiện prompt trước khi tôi gửi, giống nút Enhance prompt trong Roo Code hoặc Augment không?** Có, với **Cải thiện prompt** (mặc định bật): gõ một yêu cầu sơ bộ rồi nhấp vào đũa thần cạnh menu mô hình. Tính năng viết lại văn bản với cuộc trò chuyện này và dự án làm ngữ cảnh, bằng ngôn ngữ của bạn, và không gửi đi. `Cmd/Ctrl+Z` hoặc **Hoàn tác cải thiện** đưa văn bản của bạn trở lại. Chọn mô hình cho tính năng trong **Cài đặt → Composer Plus → Cải thiện prompt → Mô hình**.
|
|
200
|
+
|
|
192
201
|
**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 `↑` / `↓`.
|
|
193
202
|
|
|
194
203
|
**Làm sao để Đánh giá tự động thôi hỏi về cùng một công cụ trong một cuộc trò chuyện?** Nhấp **Cho phép trong cuộc trò chuyện này** trên thẻ phê duyệt. Quyền này chỉ áp dụng cho đúng công cụ đó trong cuộc trò chuyện đó; thu hồi quyền từ nhãn ở phần đầu.
|
|
@@ -219,8 +228,12 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /pa
|
|
|
219
228
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
220
229
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
221
230
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
222
|
-
# every Settings feature row shows a loading screenshot
|
|
231
|
+
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
223
232
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
233
|
+
# What's new after an update: the release notes show once, Esc and Close close them
|
|
234
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
|
|
235
|
+
# README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
|
|
236
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
224
237
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
225
238
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
226
239
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
@@ -235,14 +248,17 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /pat
|
|
|
235
248
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
236
249
|
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
237
250
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
251
|
+
# Improve prompt (fake model, made-up git project): the wand sends the draft with the chat and the project, the answer replaces the draft, Cmd+Z and Undo bring it back + its thumbnail
|
|
252
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
|
|
238
253
|
```
|
|
239
254
|
|
|
240
255
|
```sh
|
|
241
256
|
npm run build:locales # after editing locales/<id>.json
|
|
257
|
+
npm run build:readme # after editing docs/features.json
|
|
242
258
|
npm test
|
|
243
259
|
```
|
|
244
260
|
|
|
245
|
-
**Quy tắc cho tính năng mới:** mọi dòng tính năng trong Cài đặt → Composer Plus đều hiện một ảnh chụp màn hình. Thêm id của tính năng vào `SHOT_OF` trong `client.js` và vào `SHOTS` trong `index.js`, rồi đưa kèm `assets/features/<id>.webp` (chụp từ dsh demo dùng một lần, giao diện tiếng Anh, khoảng 60 kB hoặc nhỏ hơn). Thêm tính năng
|
|
261
|
+
**Quy tắc cho tính năng mới:** mọi dòng tính năng trong Cài đặt → Composer Plus đều hiện một ảnh chụp màn hình. Thêm id của tính năng vào `SHOT_OF` trong `client.js` và vào `SHOTS` trong `index.js`, rồi đưa kèm `assets/features/<id>.webp` (chụp từ dsh demo dùng một lần, giao diện tiếng Anh, khoảng 60 kB hoặc nhỏ hơn). Thêm tính năng, với cùng hình ảnh, vào `docs/features.json` rồi chạy `npm run build:readme`: lệnh này ghi bảng tính năng của `README.md` và của từng `README.<id>.md` đã dịch, cùng danh sách trong `llms.txt`. `test/shots.test.mjs` thất bại khi một tính năng không có ảnh chụp màn hình, và `test/browser-settings-shots.mjs` kiểm tra trang Cài đặt thật. Danh sách kiểm tra đầy đủ cho mọi thay đổi nằm trong [AGENTS.md](AGENTS.md).
|
|
246
262
|
|
|
247
263
|
Các bài kiểm thử chạy `client.js` thật trên một React/DOM giả, và chạy `index.js` thật (phần Host) trên một repository git tạm thời. Kiểm thử gateway Tether (`test/tether-gateway.test.mjs`) dùng một dsh host giả và một gateway TLS thật. Ứng dụng iPhone nằm trong `tether/ios` (xem [tether/README.md](tether/README.md) và [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` kiểm tra lịch sử nhập trong trình duyệt thật, với một `dsh web` dùng một lần có `DSH_HOME` riêng.
|
|
248
264
|
|