dsh-composer-plus 1.22.0 → 1.23.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 +39 -11
- package/README.es.md +39 -11
- package/README.fr.md +39 -11
- package/README.hi.md +39 -11
- package/README.id.md +39 -11
- package/README.ja.md +39 -11
- package/README.ko.md +39 -11
- package/README.md +39 -11
- package/README.pt-BR.md +39 -11
- package/README.ru.md +39 -11
- package/README.tr.md +39 -11
- package/README.vi.md +39 -11
- package/README.zh.md +39 -11
- package/assets/features/featureFilter.webp +0 -0
- package/assets/features/issueReport.webp +0 -0
- package/assets/features/previewQuote.webp +0 -0
- package/assets/features/remoteComputers.webp +0 -0
- package/assets/features/turkishSkill.webp +0 -0
- package/assets/features/untangleCodebase.webp +0 -0
- package/assets/features/windowSize.webp +0 -0
- package/assets/skills/untangle-codebase/LICENSE +21 -0
- package/assets/skills/untangle-codebase/SKILL.md +142 -0
- package/client.js +941 -161
- package/index.js +467 -39
- package/package.json +4 -3
- package/release-notes.json +14 -14
- package/tether/gateway/server.mjs +24 -5
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.
|
|
17
|
+
Đây là plugin cộng đồng, không chính thức. Việc kiểm tra cập nhật thực hiện lệnh gọi mạng (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. **Gói skill tiếng Thổ Nhĩ Kỳ** (bật theo mặc định) tải turkish-anti-ai-skill từ GitHub và kiểm tra phiên bản mới mỗi ngày một lần, chỉ khi **Ngôn ngữ ứng dụng** là Türkçe; tắt nó trong **Cài đặt → Composer Plus** để dừng các lệnh gọi này. **Ý 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. **Bảng tác vụ** gọi mô hình của cuộc trò chuyện mới một lần để tạo nhãn cho mỗi tác vụ mà bạn bắt đầu trên bảng. Với thiết lập **Tóm tắt bằng AI** (mặc định là **Nhanh (không dùng AI)**), bảng cũng gọi mô hình của cuộc trò chuyện đang chạy để viết một ghi chú tiến độ ngắn khi bạn xem tiến độ của tác vụ đó trên bảng hoặc trong Tether. **Kiểm tra mục tiêu** (mặc định bật) gọi mô hình một lần mỗi khi tác tử đánh dấu một `/goal` là hoàn tất trong một vòng tự động. **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,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.23.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -48,6 +48,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
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
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> |
|
|
50
50
|
| **Vừa tiêu đề cuộc trò chuyện với cửa sổ** | <a id="feature-headerfit"></a>Trong cửa sổ hẹp, các nút ở tiêu đề cuộc trò chuyện của dsh (chế độ, tác tử con, tác vụ nền, Mở bằng, nhãn nhánh và nhãn quyền) không còn che nhau. Tên cuộc trò chuyện giữ ít nhất 120 px; các nút không vừa sẽ xuống dòng thứ hai ở bên phải, và nút nào cũng bấm được. Khi mọi thứ vừa một dòng (cửa sổ rộng), tiêu đề giống hệt của dsh. Không có tính năng này, dsh chỉ thu nhỏ tên: khi có tác tử con và tác vụ nền, các nút trượt chồng lên nhau trong cột trò chuyện hẹp. Nhãn nhánh (**Branch riêng cho từng cuộc trò chuyện**) và nhãn quyền (**Cho phép trong cuộc trò chuyện này**) cũng vừa với tiêu đề khi tắt công tắc này. | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="Ảnh chụp màn hình: Vừa tiêu đề cuộc trò chuyện với cửa sổ"></a> |
|
|
51
|
+
| **Ghi nhớ kích thước cửa sổ** | <a id="feature-windowsize"></a>Ứng dụng máy tính của dsh mở cửa sổ ở kích thước 1280 × 820 mỗi lần khởi động. Với tính năng này, cửa sổ mở với kích thước và vị trí như lần dùng trước. Kích thước được lưu mỗi khi bạn đổi kích thước hoặc di chuyển cửa sổ, và được khôi phục khi plugin tải ở lần khởi động sau. Cửa sổ toàn màn hình hoặc thu nhỏ không được lưu; vị trí trên một màn hình hiện không kết nối sẽ trở về màn hình chính. Chỉ trong ứng dụng máy tính: một thẻ trình duyệt không thể đổi kích thước cửa sổ của nó. | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="Ảnh chụp màn hình: Ghi nhớ kích thước cửa sổ"></a> |
|
|
51
52
|
| **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> |
|
|
52
53
|
| **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> |
|
|
53
54
|
| **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> |
|
|
@@ -69,6 +70,8 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
69
70
|
| **Tiếp tục trong cuộc trò chuyện mới** | <a id="feature-handoffchat"></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ó) → **Tiếp tục trong cuộc trò chuyện mới…**. Một lần gọi chính mô hình của cuộc trò chuyện viết ghi chú bàn giao từ những gì cuộc trò chuyện hiển thị: Nhiệm vụ, Kết quả đầu ra, Đã hoàn thành, Quyết định, Vấn đề còn mở và Hành động tiếp theo (các lệnh gọi công cụ và kết quả của chúng là bằng chứng; các bước bạn đã hoàn tác được bỏ ra). Ghi chú mở trong một hộp thoại: hãy đọc và sửa ghi chú. **Viết lại** viết một ghi chú mới. **Bắt đầu cuộc trò chuyện mới** (hoặc `Cmd/Ctrl+Enter`) mở một cuộc trò chuyện mới trong cùng dự án với ghi chú và liên kết đến cuộc trò chuyện cũ làm tin nhắn đầu tiên; cuộc trò chuyện cũ vẫn giữ nguyên. Dùng tính năng này khi một cuộc trò chuyện dài đã đầy hoặc chậm, hoặc để tiếp tục vào ngày mai. Không có gì được ghi vào dự án. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Ảnh chụp màn hình: Tiếp tục trong cuộc trò chuyện mới"></a> |
|
|
70
71
|
| **Phân tích ngữ cảnh** | <a id="feature-contextbreakdown"></a>Thanh bên phải → `+` → **Ngữ cảnh**. Trang cho biết những gì đang chiếm ngữ cảnh mô hình của cuộc trò chuyện đang mở và lượng cửa sổ ngữ cảnh đã dùng: system prompt, hướng dẫn dự án (AGENTS.md), skill, tin nhắn của bạn, câu trả lời của tác tử và lệnh gọi công cụ, kết quả công cụ (theo từng công cụ), kết quả MCP (theo từng máy chủ), định nghĩa công cụ, bản tóm tắt nén và các ghi chú ngữ cảnh khác, mỗi mục kèm số token và tỷ lệ. Nhấp vào một phần để xem các công cụ hoặc máy chủ của phần đó. Trang chỉ đọc nhật ký cuộc trò chuyện, sau `/compact` và các lần hoàn tác, và không gọi mô hình nào; trang đọc lại sau mỗi lượt và khi nhấn **Làm mới**. Dùng trang này để xem vì sao một cuộc trò chuyện chậm hoặc đầy, ví dụ do một kết quả công cụ MCP lớn hoặc nhiều định nghĩa công cụ. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Ảnh chụp màn hình: Phân tích ngữ cảnh"></a> |
|
|
71
72
|
| **Các bước đã lên kế hoạch** | <a id="feature-plannedsteps"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Tác tử nhận công cụ `plan_next_steps`: trong cùng tin nhắn với một lệnh, tác tử có thể lên kế hoạch cho các lệnh tiếp theo với đối số chính xác và một điều kiện, ví dụ “chạy `npm test` khi bản dựng thành công”. Khi kết quả đáp ứng điều kiện, Composer Plus tự chạy bước tiếp theo mà không gọi lại mô hình, nhờ đó cuộc trò chuyện dài tốn ít token hơn. Bước đó hiện trong cuộc trò chuyện thành một dòng ngắn “Composer Plus · Planned steps: ran `test` … without a model call”, sau đó là lời gọi công cụ và kết quả. Chỉ các bước `bash`, `read`, `grep` và `glob`; phê duyệt, sandbox và Tệp được bảo vệ vẫn áp dụng cho từng bước như thường lệ. Mô hình trả lời lại khi điều kiện không đạt, khi hai bước cùng sẵn sàng, sau bước cuối cùng và khi bạn gửi tin nhắn. Ý tưởng đến từ HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Ảnh chụp màn hình: Các bước đã lên kế hoạch"></a> |
|
|
73
|
+
| **Gói skill tiếng Thổ Nhĩ Kỳ** | <a id="feature-turkishskill"></a>Chỉ khi **Ngôn ngữ ứng dụng** là Türkçe (bật theo mặc định; tắt trong **Cài đặt → Composer Plus**). Composer Plus tải skill mã nguồn mở [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT, của Yüce Zerey) từ GitHub và thêm vào các skill của dsh. Hãy yêu cầu tác nhân nhân hóa, viết lại hoặc viết một văn bản tiếng Thổ Nhĩ Kỳ: dsh tải skill, và các quy tắc của nó giúp tác nhân viết tiếng Thổ Nhĩ Kỳ tự nhiên, không có dấu vết AI. Chỉ giữ các tệp Markdown của gói; mỗi tệp phải khớp với danh sách tệp của GitHub, và không tập lệnh nào của gói được chạy. Mỗi ngày một lần, plugin hỏi GitHub có phiên bản mới không và cài đặt nó. Hàng này hiển thị phiên bản đã cài, hoặc lý do chưa cài. Ở ngôn ngữ khác skill không được cài; chuyển lại Türkçe thì skill trở lại. | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="Ảnh chụp màn hình: Gói skill tiếng Thổ Nhĩ Kỳ"></a> |
|
|
74
|
+
| **Gỡ rối codebase** | <a id="feature-untanglecodebase"></a>Mặc định bật; có thể tắt trong **Cài đặt → Composer Plus**. Thêm skill `/untangle-codebase` từ [caldoai/skills](https://github.com/caldoai/skills) (MIT, © 2026 Maze) vào danh sách skill của dsh. Trong một cuộc trò chuyện, nhập `/untangle-codebase` (skill có trong menu `/`), có thể kèm phần cần tập trung, ví dụ `/untangle-codebase src/api`, rồi gửi. Trước tiên, tác tử hỏi có cần xóa luôn các chú thích chỉ nhắc lại mã và các kiểm thử không thể bắt được lỗi thật hay không. Sau đó, tác tử liệt kê mọi đoạn mã sao chép, liên kết ẩn, liên kết không cần thiết, lớp bọc chỉ chuyển tiếp lời gọi, mã chết và trường hợp đặc biệt dùng một lần, lên kế hoạch sửa từ các nguyên tắc cơ bản, thực hiện như một mục tiêu và kiểm tra lại bằng các tác tử con cho đến khi không còn gì đáng sửa. Chỉ bạn mới có thể khởi động nó: mô hình không thấy nó trong danh sách skill, nên nó không tốn token trong các cuộc trò chuyện khác. Skill cùng tên trong dự án hoặc trong `~/.dsh/skills` được ưu tiên. Hãy khởi động nó trong một cuộc trò chuyện của **Branch riêng cho từng cuộc trò chuyện** và xem kết quả trong **Bảng thay đổi**. Trong Tether: nhập `/untangle-codebase` vào ô tin nhắn. | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="Ảnh chụp màn hình: Gỡ rối codebase"></a> |
|
|
72
75
|
| **Tệp được bảo vệ** | <a id="feature-protectedfiles"></a>Bật theo mặc định. Các công cụ tệp riêng của tác tử không thể đọc hoặc thay đổi các tệp khớp với mẫu của bạn: `read`, `read_image` và `grep` trên một tệp bị từ chối với mẫu **đọc và ghi**, còn `write`, `edit` và `str_replace_editor` bị từ chối với cả hai loại. Tác tử đọc lý do và được yêu cầu hỏi bạn. Mẫu mặc định là `.env*`, `*.pem` và `*.key`. Cài đặt → Composer Plus → **Tệp được bảo vệ**: thêm một mẫu (ví dụ `published/**` hoặc `config/*.yml`), nhấp vào loại của mẫu để chuyển giữa **đọc và ghi** và **chỉ ghi**, xóa mẫu bằng ✕, hoặc nhấp **Dùng giá trị mặc định**. Mẫu không có `/` khớp với tên tệp trong bất kỳ thư mục nào. Đây là rào chắn bảo vệ, không phải sandbox: lệnh shell (`cat .env`), script hoặc công cụ MCP vẫn có thể truy cập tệp (xem Giới hạn). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ảnh chụp màn hình: Tệp được bảo vệ"></a> |
|
|
73
76
|
| **Lệnh bị chặn** | <a id="feature-blockedcommands"></a>Bật theo mặc định, với danh sách trống. Các lệnh shell của tác tử (`bash`, `pwsh`) không thể chạy lệnh khớp với quy tắc của bạn: quy tắc **chặn** từ chối lệnh gọi (tác tử đọc lý do và được yêu cầu hỏi bạn), quy tắc **hỏi trước** hiện thẻ phê duyệt của dsh, và lệnh chỉ chạy khi bạn cho phép. Cài đặt → Composer Plus → **Lệnh bị chặn**: nhập một quy tắc (ví dụ `npm publish`, `git push --force` hoặc `ssh *192.168.2.19`), nhấp vào loại để chuyển giữa **chặn** và **hỏi trước**, rồi nhấp **Thêm**; nhấp vào loại của một quy tắc để đổi loại, xóa quy tắc bằng ✕. Một quy tắc là tên lệnh và các từ phải đứng sau nó theo đúng thứ tự này; `*` khớp với mọi văn bản. Tính năng cũng tìm thấy lệnh sau `&&`, `;`, `\|`, bên trong `$(…)`, `bash -c "…"` hoặc `eval`, và sau `sudo` hoặc `env`. Đây là rào chắn bảo vệ, không phải sandbox: một biến (`$CMD`), một tệp script hoặc một chương trình khác vẫn có thể chạy lệnh (xem Giới hạn). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ảnh chụp màn hình: Lệnh bị chặn"></a> |
|
|
74
77
|
| **Bảng tác vụ** | <a id="feature-taskboard"></a>Thanh bên trái → **Bảng tác vụ**, hoặc nhấn `Cmd+Shift+K` (`Ctrl+Shift+K` trên Windows và Linux) ở bất kỳ đâu trong dsh. Bảng kanban các cuộc trò chuyện dsh của bạn với trạng thái trực tiếp giống thanh bên: cuộc trò chuyện đang chờ bạn phê duyệt, trả lời hoặc xem xét kế hoạch nằm ở **Đang duyệt** với chấm cam, cuộc trò chuyện đang chạy nằm ở **Đang làm**, cuộc trò chuyện đã xong mà bạn chưa mở nằm ở **Xong** (màu xanh lá). Khi bạn mở một cuộc trò chuyện, thẻ của nó tự rời **Xong**; nhấp **Vừa xong (N)** bên dưới các thẻ xanh lá để xem các cuộc trò chuyện đã xong mà bạn đã đọc (10 mục mới nhất, sau đó **Hiện N tác vụ cũ hơn**; trạng thái mở hoặc đóng được lưu trên thiết bị này). Cuộc trò chuyện xong khi đang mở phía sau bảng (một **Tác vụ mới**) vẫn màu xanh lá cho đến khi bạn mở. Nhấp vào tên dự án ở đầu bảng để mở danh sách dự án, rồi chọn một dự án hoặc **Tất cả dự án**; thư mục branch riêng của từng cuộc trò chuyện được tính là thuộc dự án của nó. Danh sách đóng sau khi bạn chọn, khi nhấn `Esc` hoặc khi nhấp ra ngoài. Gõ vào **Tìm dự án** ở đầu danh sách để tìm dự án theo tên (không phân biệt chữ hoa, chữ thường và dấu; `Esc` xóa trống ô), nhấn `Enter` để chọn kết quả khớp đầu tiên, và nhấp **Hoạt động trong 2 giờ qua** để chỉ hiện các dự án có cuộc trò chuyện đang chờ, đang chạy, đã xong mà chưa xem hoặc đã thay đổi trong 2 giờ qua (được lưu trên thiết bị này). **Tác vụ mới** (hoặc `n`) mở cuộc trò chuyện mới của chính dsh trong dự án mà bảng đang hiện (với **Tất cả dự án**, đó là dự án mà Phiên mới của dsh chọn), nên bạn có thể thêm tệp, dùng lệnh và chọn mô hình như trong mọi cuộc trò chuyện. Khi tin nhắn đầu tiên của bạn được gửi, bảng tự quay lại. Trước đó, cuộc trò chuyện chờ ở trên cùng của **Đang làm** dưới tên **Tác vụ mới**: nhấp vào nó để viết tin nhắn đầu tiên. Dự án có cuộc trò chuyện đang chờ bạn có một chấm cam trong danh sách dự án (tên dự án ở đầu bảng cũng có chấm này khi có cuộc trò chuyện đang chờ). dsh đặt tên cho cuộc trò chuyện và mô hình của cuộc trò chuyện viết tối đa 3 nhãn từ tin nhắn đó. Nhấp vào thẻ để mở cuộc trò chuyện của nó. Nhấp vào thẻ màu cam (hoặc nút **Trả lời** của nó) để trả lời ngay trên bảng; bảng này có **Mở cuộc trò chuyện** để xem cả cuộc trò chuyện: **Từ chối** hoặc **Cho phép một lần**, **Phê duyệt** hoặc **Yêu cầu thay đổi** cho một kế hoạch, hoặc các lựa chọn và văn bản của riêng bạn cho một câu hỏi. Nhấp **×** trên một thẻ đã xong để gỡ thẻ đó khỏi bảng, hoặc mở **Vừa xong** rồi nhấp **Gỡ tất cả** ở đầu cột **Xong** để gỡ các thẻ đó khỏi bảng: trước tiên một hộp thoại cho biết bao nhiêu thẻ của dự án nào sẽ bị gỡ, và các thẻ chưa đọc (màu xanh lá) vẫn ở lại. Trong 8 giây sau đó, **Hoàn tác** đưa các thẻ trở lại; **Đã gỡ (N)** bên dưới **Xong** liệt kê các thẻ đang ở ngoài bảng, và **Đưa lại lên bảng** hiện lại một thẻ trong **Xong**. Không cuộc trò chuyện nào bị xóa: các cuộc trò chuyện vẫn ở thanh bên của dsh, bảng nhớ điều này sau khi khởi động lại (Tether hiện cùng một bảng), và cuộc trò chuyện chạy lại sẽ quay lại bảng. Trỏ vào một thẻ ở **Đang làm** (hoặc chuyển tiêu điểm bàn phím đến thẻ đó) để xem tiến độ: cuộc trò chuyện đã chạy bao lâu, bước trong danh sách việc cần làm, công cụ đang chạy và dòng cuối của tác tử. Trong Cài đặt → Composer Plus → Bảng tác vụ, **Tiến độ khi di chuột** chọn **Nhanh (không dùng AI)** (mặc định: chỉ đọc cuộc trò chuyện) hoặc **Tóm tắt bằng AI** (một lệnh gọi ngắn tới mô hình của cuộc trò chuyện viết thêm một hoặc hai câu). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ảnh chụp màn hình: Bảng tác vụ"></a> |
|
|
@@ -84,6 +87,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
84
87
|
| **Từ chối kèm ghi chú** | <a id="feature-rejectnote"></a>Thẻ phê duyệt có thêm **Từ chối kèm ghi chú…** bên cạnh **Từ chối**. Nhấp vào, viết lý do hoặc việc cần làm thay vào đó, rồi nhấp **Từ chối** (hoặc nhấn `Enter`; `Shift+Enter` thêm dòng, `Esc` đóng ô nhập). Ghi chú được gửi đến agent trước, như một tin nhắn vào lượt đang chờ, sau đó yêu cầu bị từ chối: mô hình đọc lời từ chối và ghi chú của bạn trong cùng một lượt, bạn không cần gửi thêm tin nhắn. Nếu không gửi được ghi chú, không có gì bị từ chối và ô nhập vẫn mở. Trong Tether: trang phê duyệt → Reject with note. | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="Ảnh chụp màn hình: Từ chối kèm ghi chú"></a> |
|
|
85
88
|
| **Nhập giá trị bí mật** | <a id="feature-secretinput"></a>Agent nhận công cụ `request_secret`. Khi cần mật khẩu, token hoặc khóa API, agent dùng công cụ này để xin thay vì hỏi trong cuộc trò chuyện: một thẻ hiện trên hàng của công cụ với tên, lý do cần giá trị, một ô mật khẩu, **Lưu** và **Từ chối**. **Lưu** ghi giá trị vào một tệp trên máy Mac này mà chỉ bạn đọc được, và agent chỉ nhận đường dẫn của tệp, dùng làm đầu vào cho lệnh (ví dụ `"$(cat <path>)"`). Nếu một kết quả công cụ sau đó hiện giá trị, `[secret]` sẽ thay thế nó trước khi mô hình thấy. Tệp bị xóa khi lượt kết thúc. **Từ chối** cho agent biết bạn không đưa giá trị. Tắt trong **Cài đặt → Composer Plus** để gỡ công cụ. Trong Tether: thanh "Secret: …" phía trên ô nhập → Enter. | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="Ảnh chụp màn hình: Nhập giá trị bí mật"></a> |
|
|
86
89
|
| **Trích dẫn khi trả lời** | <a id="feature-quotereply"></a>Chọn một phần của câu trả lời: nút **Trích dẫn** hiện phía trên vùng chọn. Nhấp vào đó: phần này vào ô nhập tại vị trí con trỏ dưới dạng trích dẫn Markdown (`> …`), kèm một dòng trống phía sau, và ô nhập nhận tiêu điểm để bạn viết câu trả lời bên dưới. Chỉ tính phần văn bản trả lời, không tính quá trình suy nghĩ, các hàng công cụ hay tin nhắn của chính bạn. Mỗi trích dẫn tối đa 2.000 ký tự. `Cmd+Z` (`Ctrl+Z`) gỡ nó. Trong Tether: nhấn giữ một câu trả lời → Quote (toàn bộ câu trả lời). | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="Ảnh chụp màn hình: Trích dẫn khi trả lời"></a> |
|
|
90
|
+
| **Trích dẫn từ bản xem trước tệp** | <a id="feature-previewquote"></a>Mở một tệp trong thanh bên phải (**Tệp trong không gian làm việc**, hoặc một tệp mà cuộc trò chuyện đã mở) rồi chọn các dòng trong đó: nút **Trích dẫn** hiện phía trên vùng chọn. Nhấp vào đó: đường dẫn tệp, số dòng và các dòng đó vào ô nhập tại vị trí con trỏ, và ô nhập nhận tiêu điểm, để tác tử biết bạn muốn nói phần nào. Tệp mã và tệp văn bản cho `src/login.js:2-3` và các dòng dưới dạng khối mã; tệp Markdown và PDF cho đường dẫn (PDF có thêm trang, `docs/spec.pdf#page=3`) và một trích dẫn `> …`. Đường dẫn nằm trong thư mục của cuộc trò chuyện là đường dẫn tương đối. Tối đa 2.000 ký tự. `Cmd+Z` (`Ctrl+Z`) gỡ nó. Không có trong Tether. | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="Ảnh chụp màn hình: Trích dẫn từ bản xem trước tệp"></a> |
|
|
87
91
|
| **Trò chuyện phụ** | <a id="feature-sidechat"></a>Nhập một câu hỏi phụ vào ô nhập rồi nhấp nút bong bóng hội thoại (**Hỏi trong trò chuyện phụ**): một bản sao của cuộc trò chuyện mở ra và trả lời ở chế độ chỉ đọc của dsh, trong khi cuộc trò chuyện vẫn tiếp tục làm việc. Bản sao biết cuộc trò chuyện đến lúc này, trừ các tin nhắn còn chờ trong hàng đợi, và dùng mô hình của nó. Thanh phía trên ô nhập của bản sao có **Mang về**: cuộc trò chuyện mở ra và ô nhập của nó nhận các câu hỏi của bạn (dạng trích dẫn `> `) và câu trả lời. **Quay lại cuộc trò chuyện** chỉ mở cuộc trò chuyện. Trò chuyện phụ vẫn ở thanh bên với tên "↳ <câu hỏi>"; hãy lưu trữ nó ở đó. Trong Tether: menu tiêu đề cuộc trò chuyện → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="Ảnh chụp màn hình: Trò chuyện phụ"></a> |
|
|
88
92
|
| **Ghi chú diff** | <a id="feature-diffcomments"></a>Trong **Bảng thay đổi**, mở diff của một tệp rồi nhấp **+** ở một dòng (Shift+nhấp dòng thứ hai trong cùng khối để chọn phạm vi), viết ghi chú và nhấp **Lưu ghi chú**. Ghi chú của cuộc trò chuyện chờ trong một thanh ở đầu bảng; **Gửi vào ô nhập** đưa chúng vào vị trí con trỏ dưới dạng Markdown: `path:12-14`, các dòng dạng khối `diff` và ghi chú của bạn. **Xóa** bỏ chúng. Ghi chú ở lại trong trình duyệt này cho đến khi bạn gửi hoặc xóa. Cần **Bảng thay đổi**. Trong Tether: diff của một tệp → chạm và giữ một dòng → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="Ảnh chụp màn hình: Ghi chú diff"></a> |
|
|
89
93
|
| **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> |
|
|
@@ -95,12 +99,14 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
95
99
|
| **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> |
|
|
96
100
|
| **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> |
|
|
97
101
|
| **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, đang chờ phê duyệt hay xem xét kế hoạch (chấm cam), hoặc hoàn tất một lượt mà bạn chưa đọc (chấm xanh), và bạn không dùng dsh trong 30 giây, dsh sẽ mở cuộc trò chuyện đó. Cuộc trò chuyện chấm cam được mở trước cuộc trò chuyện chấm xanh. Trong mỗi nhóm, 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. Khi một cuộc trò chuyện chấm xanh mở ra, chấm của nó biến mất; cuộc trò chuyện chấm xanh tiếp theo chỉ mở sau khi bạn dùng lại dsh rồi không dùng trong 30 giây. 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> |
|
|
98
|
-
| **Cuộc trò chuyện đang chờ tiếp theo** | <a id="feature-nextwaiting"></a>Một nút ở đầu thanh bên cho biết còn bao nhiêu cuộc trò chuyện khác đang chờ bạn, kèm một chấm cùng màu với cuộc tiếp theo: cam khi nó đặt câu hỏi hoặc đang chờ phê duyệt hay xem xét kế hoạch, xanh khi nó đã hoàn tất một lượt mà bạn chưa đọc. Nhấp vào nút, hoặc nhấn Cmd+Shift+E (Ctrl+Shift+E trên Windows và Linux), để mở cuộc trò chuyện đó. Cuộc trò chuyện chấm cam đứng trước chấm xanh; trong mỗi nhóm, cuộc chờ lâu nhất đứng trước. Cuộc trò chuyện đang hiển thị không được tính. Khi không còn cuộc nào khác đang chờ, nút không hiện và phím không làm gì. Bạn có thể đổi phím trong trang phím tắt của dsh (Cuộc trò chuyện đang chờ tiếp theo). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Ảnh chụp màn hình: Cuộc trò chuyện đang chờ tiếp theo"></a> |
|
|
102
|
+
| **Cuộc trò chuyện đang chờ tiếp theo** | <a id="feature-nextwaiting"></a>Một nút ở đầu thanh bên cho biết còn bao nhiêu cuộc trò chuyện khác đang chờ bạn, kèm một chấm cùng màu với cuộc tiếp theo: cam khi nó đặt câu hỏi hoặc đang chờ phê duyệt hay xem xét kế hoạch, xanh khi nó đã hoàn tất một lượt mà bạn chưa đọc. Nhấp vào nút, hoặc nhấn Cmd+Shift+E (Ctrl+Shift+E trên Windows và Linux), để mở cuộc trò chuyện đó. Khi nhấp vào nút, cuộc trò chuyện cũng được tìm thấy trên thanh bên: dự án đã thu gọn mở ra, 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. Cuộc trò chuyện chấm cam đứng trước chấm xanh; trong mỗi nhóm, cuộc chờ lâu nhất đứng trước. Cuộc trò chuyện đang hiển thị không được tính. Khi không còn cuộc nào khác đang chờ, nút không hiện và phím không làm gì. Bạn có thể đổi phím trong trang phím tắt của dsh (Cuộc trò chuyện đang chờ tiếp theo). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Ảnh chụp màn hình: Cuộc trò chuyện đang chờ tiếp theo"></a> |
|
|
99
103
|
| **Nút lựa chọn** | <a id="feature-optionpicks"></a>Khi một câu trả lời kết thúc bằng một danh sách lựa chọn (danh sách đánh số từ 1 đến 9 mục dưới tiêu đề "Lựa chọn" hoặc một dòng in đậm "Lựa chọn", cũng như "Các bước tiếp theo" và các từ tương tự trong các ngôn ngữ của ứng dụng), mỗi lựa chọn có một nút bên dưới câu trả lời. Nhấp vào nút sẽ gửi "Option N: …" kèm toàn bộ lựa chọn làm tin nhắn của bạn, như thể bạn tự gõ. Lựa chọn có ghi "(đề xuất)" được làm nổi bật. Các nút chỉ hiện dưới câu trả lời mới nhất, khi cuộc trò chuyện đang rảnh và ô nhập tin nhắn trống; câu trả lời đã được chọn và câu trả lời đã bị hoàn tác thì không có nút. Khi các nút đang hiện, Dự đoán tin nhắn tiếp theo không đưa ra gợi ý. Trên thẻ câu hỏi của tác tử, các phím 1–9 chọn lựa chọn đó giống như một cú nhấp (không áp dụng trong ô trả lời và trong 0,8 giây đầu sau khi câu hỏi hiện ra). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Ảnh chụp màn hình: Nút lựa chọn"></a> |
|
|
100
104
|
| **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> |
|
|
101
105
|
| **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> |
|
|
102
|
-
| **Máy tính từ xa** | <a id="feature-remotecomputers"></a>Mở dsh của các máy Mac khác của bạn qua [Tailscale](https://tailscale.com) và
|
|
103
|
-
| **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 bằng ngôn ngữ trong **Ngôn ngữ ứng dụng** (ghi chú đi kèm phiên bản mới, không gọi mạng thêm; ngôn ngữ không có ghi chú sẽ hiện ghi chú tiếng Anh); **Đóng** hoặc `Esc` đóng nó. Cửa sổ cũng hiện sau khi cập nhật qua Cài đặt → Plugin hoặc một thư mục được sao chép, một lần cho mỗi phiên bản mới; không hiện ở lần cài đặt đầu tiên. **Có gì mới trong phiên bản này** ở hàng cập nhật mở lại cửa sổ. Khi trên đĩa có phiên bản mới hơn phiên bản đang chạy, hàng này yêu cầu khởi động lại dsh. | <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> |
|
|
106
|
+
| **Máy tính từ xa** | <a id="feature-remotecomputers"></a>Mở dsh của các máy Mac khác của bạn qua [Tailscale](https://tailscale.com) và dùng chúng trong cửa sổ dsh này. Bật tính năng trong **Cài đặt → Composer Plus** trên từng máy Mac (mặc định tắt, vì tính năng này mở các cổng mạng). Trên máy Mac bạn muốn mở, bật **Cho phép máy tính khác mở máy Mac này**, nhấp **Tạo liên kết ghép nối** và sao chép liên kết. Trên máy Mac này, chọn **Thêm máy tính…** trong bộ chọn máy tính ở thanh bên trái (bên phải tên thương hiệu, phía trên **Phiên mới**), dán liên kết, nhập **Tên** (không trùng tên máy Mac này hoặc tên máy tính khác) và nhấp **Kết nối**. Sau đó nhấp **Phê duyệt** trên máy Mac kia. Từ đó, bộ chọn liệt kê **Máy Mac này** và các máy tính của bạn: chọn một máy, và dsh của máy đó lấp đầy cửa sổ này, với các cuộc trò chuyện, thanh bên, công cụ và tệp của chính máy đó, trong khi máy Mac này vẫn chạy phía sau. Máy Mac kia hiện cùng bộ chọn ở cùng vị trí: chọn **Máy Mac này** ở đó để quay lại. Bảng Cài đặt đổi tên và xóa máy tính, và liệt kê các máy tính có thể mở máy Mac này (**Xóa** ngắt ngay một máy). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Ảnh chụp màn hình: Máy tính từ xa"></a> |
|
|
107
|
+
| **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 bằng ngôn ngữ trong **Ngôn ngữ ứng dụng** (ghi chú đi kèm phiên bản mới, không gọi mạng thêm; ngôn ngữ không có ghi chú sẽ hiện ghi chú tiếng Anh); **Đóng** hoặc `Esc` đóng nó. Bên dưới ghi chú, một dòng mời bạn gắn sao trên GitHub, tối đa một lần mỗi 30 ngày (không gọi mạng); sau khi bấm **Gắn sao trên GitHub** hoặc **Không hỏi lại**, dòng này không hiện nữa. Cửa sổ cũng hiện sau khi cập nhật qua Cài đặt → Plugin hoặc một thư mục được sao chép, một lần cho mỗi phiên bản mới; không hiện ở lần cài đặt đầu tiên. **Có gì mới trong phiên bản này** ở hàng cập nhật mở lại cửa sổ. Khi trên đĩa có phiên bản mới hơn phiên bản đang chạy, hàng này yêu cầu khởi động lại dsh. | <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> |
|
|
108
|
+
| **Bộ lọc bật/tắt** | <a id="feature-featurefilter"></a>Bên cạnh **Tìm tính năng** trong **Cài đặt → Composer Plus**: **Tất cả** hiện mọi tính năng, **Bật** chỉ hiện các tính năng có công tắc đang bật, **Tắt** chỉ hiện các tính năng có công tắc đang tắt. Công tắc của từng dòng quyết định, kể cả công tắc do Host của dsh lưu (ví dụ **Kết nối di động**). Bộ lọc dùng cùng với tìm kiếm: gõ một từ rồi chọn **Tắt** để tìm tính năng bạn đã tắt. Dòng bạn chuyển khi đang chọn **Bật** hoặc **Tắt** vẫn ở lại cho đến khi bạn chọn lại một bộ lọc, nên tiêu điểm vẫn ở công tắc của nó. **Bật** và **Tắt** ẩn các dòng **Ngôn ngữ ứng dụng** và **Cập nhật Composer Plus** (chúng không có công tắc). Cài đặt luôn mở với **Tất cả**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Ảnh chụp màn hình: Bộ lọc bật/tắt"></a> |
|
|
109
|
+
| **Báo cáo issue** | <a id="feature-issuereport"></a>Cài đặt → Composer Plus → **Báo cáo issue…** (bên dưới phần giới thiệu), hoặc 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ó) → **Báo cáo issue về Composer Plus…**. Chọn một loại: **Lỗi**, **Yêu cầu tính năng**, **Cải tiến**, **Bản dịch** hoặc **Câu hỏi**. Mô tả bằng lời và ngôn ngữ của riêng bạn, rồi nhấp **Viết bản nháp** (hoặc `Cmd/Ctrl+Enter`). Một lần gọi mô hình mặc định của dsh viết một issue bằng tiếng Anh: tiêu đề có tiền tố của loại (ví dụ `[Bug]`) và các phần của loại đó (với lỗi: What happened, Steps to reproduce, Expected, Actual), kèm một dòng với phiên bản của Composer Plus, dsh và hệ thống. Đọc và sửa tiêu đề và mô tả; **Viết lại** viết một bản nháp mới. **Mở issue** mở issue trong repository GitHub của Composer Plus bằng đăng nhập GitHub CLI (`gh`) của bạn và hiện liên kết của issue. Issue được công khai: văn bản trông giống khóa hoặc mật khẩu sẽ bị từ chối. Khi `gh` không mở được issue, **Mở trên GitHub thay vào đó** mở trang riêng của GitHub với bản nháp đã điền sẵn. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Ảnh chụp màn hình: Báo cáo issue"></a> |
|
|
104
110
|
| **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> |
|
|
105
111
|
| **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> |
|
|
106
112
|
| **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> |
|
|
@@ -112,7 +118,7 @@ Nút, chú thích khi di chuột, thông báo trong ứng dụng và thông báo
|
|
|
112
118
|
|
|
113
119
|
## Cài đặt
|
|
114
120
|
|
|
115
|
-
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**, **Dự đoán tin nhắn tiếp theo** và **Kiểm tra mục tiêu**, 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**), của **Cải thiện prompt**, của **Kiểm tra mục tiêu** (cả hai mặc định là **Giống mô hình của cuộc trò chuyện**), và **Giới hạn thời gian** của **Cho phép trong cuộc trò chuyện này** (mặc định là 1 giờ). **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.**
|
|
121
|
+
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 ô. Bên cạnh, **Tất cả**, **Bật** và **Tắt** hiện mọi tính năng, chỉ các tính năng đang bật, hoặc chỉ các tính năng đang tắt (tắt **Bộ lọc bật/tắt** để ẩn các nút này). 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**, **Dự đoán tin nhắn tiếp theo** và **Kiểm tra mục tiêu**, 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**), của **Cải thiện prompt**, của **Kiểm tra mục tiêu** (cả hai mặc định là **Giống mô hình của cuộc trò chuyện**), và **Giới hạn thời gian** của **Cho phép trong cuộc trò chuyện này** (mặc định là 1 giờ). **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.**
|
|
116
122
|
|
|
117
123
|
<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>
|
|
118
124
|
|
|
@@ -172,6 +178,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
172
178
|
- **Tìm trong nội dung:** không có mã mới nào tìm trong cuộc trò chuyện của bạn: plugin chỉ bật chỉ mục tin nhắn của chính dsh (SQLite FTS5, `dsh-session-query-sqlite`) và cấp cho chỉ mục một tệp, `$DSH_HOME/cache/composer-plus/session-search.db` (tệp và thư mục chỉ chủ sở hữu truy cập được). Tệp này chứa văn bản tin nhắn của bạn và của trợ lý, nên cần được bảo vệ như nhật ký trò chuyện trong `$DSH_HOME/sessions`. Không có gì rời khỏi máy của bạn. Đây là bản sao mà dsh có thể tạo lại: bạn có thể xóa tệp khi dsh đang đóng. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
173
179
|
- **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`. Hoàn tác kèm tệp cũng giữ các tệp như trạng thái ngay trước lần hoàn tác (`refs/r/…` trong cùng kho), để dùng cho **Làm lại**; các lần hoàn tác đã được làm lại được liệt kê trong `$DSH_HOME/storages/dsh-composer-plus/redone.json` (chỉ chủ sở hữu truy cập được).
|
|
174
180
|
- **Mở issue trên GitHub** (Ý tưởng tính năng → danh sách **Để sau**): chỉ chạy khi bạn nhấp vào. Phần Host chạy GitHub CLI của chính bạn (`gh issue create`) trong thư mục của cuộc trò chuyện, với tiêu đề và tóm tắt đã lưu của ý tưởng (và lý do nó quan trọng); `gh` dùng thông tin đăng nhập riêng của nó và remote GitHub của thư mục, nên issue được tạo trong repository đó bằng tài khoản của bạn, và GitHub hiển thị issue cho mọi người có thể xem repository đó. dsh xóa các biến có tên giống token khỏi những lệnh mà nó khởi chạy; nếu bạn đã cung cấp token cho `gh` qua `GH_TOKEN` hoặc `GITHUB_TOKEN`, plugin chỉ chuyển các biến này cho `gh`. Liên kết issue được lưu cùng ý tưởng trong `later.json`.
|
|
181
|
+
- **Báo cáo issue** (Cài đặt → Composer Plus → **Báo cáo issue…**, hoặc menu **…** của một cuộc trò chuyện → **Báo cáo issue về Composer Plus…**): không có gì chạy cho đến khi bạn nhấp. **Viết bản nháp** chỉ gửi loại issue và văn bản bạn đã gõ (không gửi cuộc trò chuyện, không gửi dự án) đến mô hình mặc định của dsh, trong một lần gọi. Phần Host thêm một dòng với phiên bản của Composer Plus, dsh và hệ điều hành, và thay đường dẫn thư mục home của bạn bằng `~`. **Mở issue** chạy GitHub CLI của chính bạn (`gh issue create --repo furkancak1r/dsh-composer-plus`) bằng đăng nhập `gh` của bạn, nên issue được công khai và hiển thị tài khoản GitHub của bạn. Văn bản trông giống khóa, token hoặc mật khẩu sẽ bị từ chối và không rời khỏi máy Mac của bạn.
|
|
175
182
|
- **Các cuộc trò chuyện đã thay đổi tệp này** (Thay đổi, menu "…" của một tệp): phần Host đọc nhật ký của các cuộc trò chuyện có thư mục nằm trong cùng repository, theo đúng cách dsh lưu chúng, rồi trả về tiêu đề của từng cuộc trò chuyện, thời gian và dòng đầu tiên của yêu cầu; phần Host không bao giờ mở chính tệp đó.
|
|
176
183
|
- **Branch Git trên dòng cuộc trò chuyện:** phần Host chạy `git branch --show-current` (chỉ đọc) trong thư mục của cuộc trò chuyện khi một lượt bắt đầu và khi kết thúc, và chỉ lưu ID cuộc trò chuyện, tên branch và thời gian trong `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` (tệp chỉ chủ sở hữu truy cập được, 2000 cuộc trò chuyện mới nhất). Công tắc nằm trong `branches.json` bên cạnh.
|
|
177
184
|
- **Tìm trong cuộc trò chuyện** chỉ chạy trong trang: tính năng đọc văn bản mà trang hiển thị và không gửi gì cả.
|
|
@@ -180,9 +187,10 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
180
187
|
- **Cho phép trong cuộc trò chuyện này:** các quyền được lưu cùng thời điểm cấp trong `$DSH_HOME/storages/dsh-composer-plus/chat-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, cho đến khi hết giới hạn thời gian (mặc định 1 giờ). 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.
|
|
181
188
|
- Đá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.
|
|
182
189
|
- **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. "Tailscale only" từ chối mọi kết nối từ mạng cục bộ, kể cả các kết nối đang mở. Nhật ký truy cập giữ 200 lần thử kết nối mới nhất (thời gian, địa chỉ IP, tên thiết bị, được cho phép hay bị từ chối, và lý do) trong `access.json`; nhật ký không bao giờ chứa token hay mã ghép nối. Dữ liệu: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (tệp chỉ chủ sở hữu truy cập được). Chi tiết: [tether/README.md](tether/README.md).
|
|
183
|
-
- **Máy tính từ xa:** tắt cho đến khi bạn bật trên từng máy Mac. **Cho phép máy tính khác mở máy Mac này** mở một cổng HTTPS thứ hai (19392) chỉ trên địa chỉ Tailscale của máy Mac này (không trên Wi-Fi, không quảng bá qua Bonjour). Máy Mac khác cần một liên kết ghép nối dùng một lần (hiệu lực 5 phút), chứng chỉ khớp (được ghim) và bạn phải nhấp **Phê duyệt**. Máy Mac này chỉ giữ hash của token của máy đó. Máy tính đã ghép nối có toàn quyền điều khiển dsh trên máy Mac này, như khi bạn dùng tại đây: các cuộc trò chuyện, mô hình, công cụ, tệp và terminal. Xóa máy đó trong bảng Cài đặt, và các kết nối của nó đóng ngay. Máy Mac mở một máy khác giữ token của máy tính đó trong `$DSH_HOME/storages/dsh-composer-plus/computers.json` (chỉ chủ sở hữu truy cập được). Máy này mở một relay trên `127.0.0.1` cho từng máy tính bạn chọn. Trang nhận một liên kết dùng một lần (hiệu lực 60 giây), và relay chỉ nhận trang của chính nó (địa chỉ của nó, không nhận trang web nào khác). Trang
|
|
190
|
+
- **Máy tính từ xa:** tắt cho đến khi bạn bật trên từng máy Mac. **Cho phép máy tính khác mở máy Mac này** mở một cổng HTTPS thứ hai (19392) chỉ trên địa chỉ Tailscale của máy Mac này (không trên Wi-Fi, không quảng bá qua Bonjour). Máy Mac khác cần một liên kết ghép nối dùng một lần (hiệu lực 5 phút), chứng chỉ khớp (được ghim) và bạn phải nhấp **Phê duyệt**. Máy Mac này chỉ giữ hash của token của máy đó. Máy tính đã ghép nối có toàn quyền điều khiển dsh trên máy Mac này, như khi bạn dùng tại đây: các cuộc trò chuyện, mô hình, công cụ, tệp và terminal. Xóa máy đó trong bảng Cài đặt, và các kết nối của nó đóng ngay. Máy Mac mở một máy khác giữ token của máy tính đó trong `$DSH_HOME/storages/dsh-composer-plus/computers.json` (chỉ chủ sở hữu truy cập được). Máy này mở một relay trên `127.0.0.1` cho từng máy tính bạn chọn. Trang nhận một liên kết dùng một lần (hiệu lực 60 giây), và relay chỉ nhận trang của chính nó (địa chỉ của nó, không nhận trang web nào khác). Trang của máy Mac kia trong cửa sổ này có thể đọc tên và trạng thái các máy tính của máy Mac này (không có địa chỉ, không có token) và có thể chuyển cửa sổ này giữa các máy đó. Trang đó không thể thêm, đổi tên hoặc xóa máy tính, và không thể thay đổi cài đặt của máy Mac này.
|
|
184
191
|
- **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.
|
|
185
|
-
-
|
|
192
|
+
- **Gói skill tiếng Thổ Nhĩ Kỳ:** bật theo mặc định, và chỉ hoạt động khi ngôn ngữ ứng dụng là Türkçe: trình duyệt báo cho phần Host ngôn ngữ giao diện của dsh. Sau đó, nhiều nhất mỗi ngày một lần, phần Host hỏi `api.github.com` về commit mới nhất của `yucezerey/turkish-anti-ai-skill` và danh sách tệp của nó, rồi tải các tệp Markdown đã thay đổi từ `raw.githubusercontent.com`. GitHub thấy địa chỉ IP của bạn, như mỗi lần kiểm tra cập nhật; không có gì về bạn hay các cuộc trò chuyện được gửi đi. Chỉ giữ các tệp `.md` thông thường trong thư mục `skills/turkish-anti-ai-skill/` (tối đa 20 tệp và 1 MB), và mỗi tệp phải khớp với id của nó trong danh sách tệp của GitHub. Bản sao nằm trong `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>` (chỉ chủ sở hữu) và được thêm vào danh sách skill của dsh; không tập lệnh nào của gói được chạy. Công tắc và ngôn ngữ báo gần nhất nằm trong `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json`. Tắt nó sẽ gỡ skill và xóa bản sao.
|
|
193
|
+
- **Đếm lượt dùng:** phần Host yêu cầu GitHub hai tệp nhỏ trong bản phát hành của phiên bản đã cài (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`): `active.txt` mỗi ngày một lần, và `installed.txt` chỉ một lần cho mỗi thư mục home của dsh. GitHub đếm các yêu cầu này theo từng tệp, nên tác giả chỉ thấy có bao nhiêu bản sao của mỗi phiên bản đã yêu cầu `active.txt` trong ngày đó, và tổng cộng bao nhiêu bản sao đã yêu cầu `installed.txt` (số bản sao). Yêu cầu không có id, cookie hay dữ liệu nào về bạn hoặc các cuộc trò chuyện của bạn; GitHub thấy địa chỉ IP của bạn, giống như mỗi lần kiểm tra cập nhật. Ngày của yêu cầu `active.txt` gần nhất được lưu trong `$DSH_HOME/storages/dsh-composer-plus/active.json`, còn dấu cho biết `installed.txt` đã được đếm được lưu trong `$DSH_HOME/storages/dsh-composer-plus/installed.json`. Bản git checkout của kho này và bản sao đã đổi tên không gửi gì. Không có công tắc cho việc này.
|
|
186
194
|
- **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).
|
|
187
195
|
- **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).
|
|
188
196
|
- **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).
|
|
@@ -212,10 +220,11 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
212
220
|
- **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).
|
|
213
221
|
- **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.
|
|
214
222
|
- **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.
|
|
223
|
+
- **Báo cáo issue 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`. Hoặc nhấp **Mở trên GitHub thay vào đó**: trang issue mới của chính GitHub mở ra với bản nháp đã điền sẵn, và bạn gửi issue ở đó.
|
|
215
224
|
- **Dòng cuộc trò chuyện không có nhãn branch:** thanh bên không ở chế độ xem “Trong một danh sách” (trong “Không gian làm việc” và “Cây không gian làm việc”, không dòng cuộc trò chuyện nào hiển thị nhãn), cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài phiên bản này, thư mục của nó không phải repository git, hoặc **Branch Git trên dòng cuộc trò chuyện** đang tắt. Sau khi cập nhật, hãy khởi động lại dsh (phần Host ghi lại branch).
|
|
216
225
|
- **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.
|
|
217
226
|
- **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).
|
|
218
|
-
- **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.
|
|
227
|
+
- **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.23.0`), xem ghi chú cài đặt ở trên.
|
|
219
228
|
- **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.
|
|
220
229
|
- **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.
|
|
221
230
|
- **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.
|
|
@@ -237,9 +246,11 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
237
246
|
- 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.
|
|
238
247
|
- **Có gì mới trong Composer Plus N** hiện ghi chú bằng ngôn ngữ trong **Ngôn ngữ ứng dụng**. Ngôn ngữ giao diện có vùng khác sẽ nhận ghi chú của ngôn ngữ gốc (`en-GB` nhận ghi chú tiếng Anh, `zh-TW` nhận ghi chú tiếng Trung của `zh`). Ngôn ngữ không có ghi chú (ngôn ngữ do gói ngôn ngữ khác thêm vào, hoặc `pt-PT`, không phải `pt-BR`) sẽ hiện ghi chú tiếng Anh. Ghi chú đi kèm phiên bản mới. Nếu bản đang chạy không có tệp ghi chú đọc được (`release-notes.json`), cửa sổ hiện ghi chú tiếng Anh trên GitHub.
|
|
239
248
|
- Phiên bản được cài khi dsh đang chạy (cập nhật qua Cài đặt → Plugin hoặc một thư mục được sao chép) chỉ được tải sau khi khởi động lại dsh: đến lúc đó, **Cập nhật Composer Plus** hiện phiên bản đang chạy và yêu cầu khởi động lại. Cửa sổ **Có gì mới trong Composer Plus N** của phiên bản đó hiện một lần ở lần khởi động đầu tiên của phiên bản. Lần khởi động đầu tiên sau khi cài plugin này không hiện cửa sổ; **Có gì mới trong phiên bản này** mở ghi chú của phiên bản đang chạy.
|
|
249
|
+
- Dòng gắn sao GitHub bên dưới ghi chú không thể biết bạn đã gắn sao cho kho mã hay chưa: plugin không gọi mạng để kiểm tra. Mỗi trình duyệt (và ứng dụng desktop) lưu bản ghi riêng, nên dòng này có thể hiện thêm một lần trong trình duyệt khác.
|
|
240
250
|
- **Từ chối kèm ghi chú** gửi ghi chú như một tin nhắn vào lượt đang chờ, rồi từ chối yêu cầu; dsh hiện ghi chú trong cuộc trò chuyện như tin nhắn của bạn. Khi ô nhập ghi chú đang mở, thẻ chỉ hiện **Hủy** và **Từ chối**, nên một cú nhấp không thể vô tình cho phép yêu cầu; `Esc` hoặc **Hủy** đưa các nút của dsh trở lại. Ghi chú trống không gửi gì cả (hãy dùng nút **Từ chối** của chính dsh). Nếu việc từ chối thất bại sau khi ghi chú đã được gửi (ví dụ, trong lúc đó yêu cầu đã được trả lời ở nơi khác), ghi chú vẫn ở trong cuộc trò chuyện và mô hình đọc nó ở bước tiếp theo. Nút được đặt vào markup thẻ phê duyệt của dsh (`data-approval-key`), vì dsh không có vị trí dành cho thao tác trên thẻ; nếu một bản cập nhật dsh thay đổi markup đó, nút không hiện và nút **Từ chối** của chính dsh vẫn hoạt động như trước. Một ghi chú có tối đa 4.000 ký tự.
|
|
241
251
|
- **Nhập giá trị bí mật** chỉ ẩn đúng văn bản của giá trị: `[secret]` thay thế nó trong các kết quả công cụ sau đó của cùng cuộc trò chuyện. Agent vẫn có thể đọc tệp bằng một lệnh shell và in giá trị ở dạng khác (base64, một phần, có thêm khoảng trắng), và dạng đó đến được mô hình. Các công cụ tệp của chính agent (read, grep, write, edit) không mở được thư mục bí mật. Nếu giá trị cũng là một từ phổ biến, các kết quả khác của cuộc trò chuyện đó cũng hiện `[secret]`. Tệp còn đến khi lượt kết thúc; nếu dsh thoát giữa lượt, lần khởi động sau sẽ xóa nó. Mỗi cuộc trò chuyện chỉ có một yêu cầu mở cùng lúc. Công cụ thêm khoảng 870 ký tự (ước tính khoảng 220 token) vào mỗi yêu cầu gửi mô hình: hãy tắt khi không dùng.
|
|
242
252
|
- **Trích dẫn khi trả lời** trích văn bản đúng như trang hiển thị: khối mã, bảng hoặc danh sách thành các dòng thường, không có ký hiệu Markdown. Vùng chọn bắt đầu ở một câu trả lời và kết thúc ở câu trả lời khác, hoặc chạm vào quá trình suy nghĩ, một hàng công cụ hay tin nhắn của chính bạn, sẽ không hiện nút: hãy chọn trong một câu trả lời. Nút tìm câu trả lời qua cấu trúc trò chuyện của dsh, vì dsh không có slot cho vùng chọn văn bản; nếu bản cập nhật dsh đổi cấu trúc đó, nút sẽ không hiện. Khi trích dẫn nằm ở cuối ô nhập, thêm một dòng trống nữa để dòng bạn gõ tiếp bắt đầu bên dưới; dsh xóa các dòng trống ở cuối khi gửi.
|
|
253
|
+
- **Trích dẫn từ bản xem trước tệp** đọc bản xem trước tệp của chính dsh: số dòng lấy từ các hàng của bản xem trước, nên số dòng đúng với tệp mã và tệp văn bản. Tệp Markdown hiển thị dưới dạng trang đã định dạng, nên trích dẫn của nó có văn bản nhưng không có ký hiệu Markdown và không có số dòng; trích dẫn PDF có trang, không có dòng. Vùng chọn ở tiêu đề đường dẫn, trong một trình xem khác (bảng tính, tệp Office, hình ảnh) hoặc trải qua hai tệp đang mở sẽ không hiện nút, và thanh bên phải ở chế độ toàn màn hình cũng vậy (khi đó ô nhập không có trên màn hình). Nút tìm bản xem trước qua markup của dsh, vì dsh không có slot cho vùng chọn ở đó; nếu bản cập nhật dsh đổi markup đó, nút sẽ không hiện. Chỉ văn bản đã chọn vào ô nhập: nếu tệp thay đổi sau đó, trích dẫn không thay đổi.
|
|
243
254
|
- **Trò chuyện phụ** chỉ đọc nhờ chế độ chỉ đọc của chính dsh: công cụ tệp không thể ghi, lệnh shell chạy trong sandbox của dsh không có quyền ghi (hoặc không chạy khi sandbox không khởi động được). Tác tử vẫn có thể xin thêm quyền bằng thẻ phê duyệt của dsh, và một lệnh gọi mạng (ví dụ yêu cầu API) vẫn có thể thay đổi điều gì đó bên ngoài máy tính. Bản sao được tạo tại thời điểm mới nhất mà không có tin nhắn nào chờ trong hàng đợi, nên câu hỏi đặt ra khi còn tin nhắn chờ sẽ không thấy những gì xảy ra sau chúng. Bước đang chạy của cuộc trò chuyện được đóng trong bản sao, nên trò chuyện phụ biết phần đầu của bước đó nhưng không biết kết quả. Trò chuyện phụ là một cuộc trò chuyện bình thường: nó ở lại thanh bên và được tính vào mức dùng mô hình của bạn; hãy lưu trữ nó ở đó. Mang về chỉ lấy tin nhắn của chính trò chuyện phụ (tối đa 12.000 ký tự) và chỉ câu trả lời cuối cùng của mỗi câu hỏi; ghi chú của tác tử giữa các lệnh gọi công cụ không được lấy. dsh không cho plugin một vị trí để hiển thị cuộc trò chuyện trong thanh bên phải, nên trò chuyện phụ mở ở khung chính.
|
|
244
255
|
- **Ghi chú diff** chỉ hoạt động trong bảng thay đổi, không hoạt động ở khung Lượt cuối của dsh. Một phạm vi phải nằm trong một khối của diff (một phần `@@`). Ghi chú được lưu trong bộ nhớ của trình duyệt này, nên trình duyệt khác hoặc dsh trên máy khác không thấy; Tether giữ ghi chú riêng trong bộ nhớ. Ghi chú giữ các dòng như lúc bạn nhấp: nếu tác tử sửa tệp sau đó, ghi chú vẫn hiện dòng và số dòng cũ. Tối đa 50 ghi chú mỗi cuộc trò chuyện, 2.000 ký tự và 40 dòng mỗi ghi chú (sau đó là dòng `…`).
|
|
245
256
|
- **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ụ đó.
|
|
@@ -247,7 +258,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
247
258
|
- **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.
|
|
248
259
|
- **Vừa tiêu đề cuộc trò chuyện với cửa sổ** tìm tiêu đề cuộc trò chuyện của dsh qua các tên lớp do dsh tạo (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), vì dsh không có điểm móc bố cục cho nó. Nếu bản cập nhật dsh đổi các tên này, tiêu đề hiển thị như dsh vẽ. Trong cột trò chuyện rất hẹp, tiêu đề có thể chiếm hai hoặc ba dòng, nên vùng phía trên tin nhắn thấp hơn.
|
|
249
260
|
- **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). Khi có khóa APNs trong `apns.json` (xem `tether/README.md`), Mac gửi thông báo qua dịch vụ push của Apple, nên thông báo vẫn đến khi Tether đã đóng; Mac phải đang thức và mở dsh. Nếu không có khóa, đ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. Tether chỉ gửi thông báo sau khi bạn bật "Settings → Notifications → Send notifications" trong Tether. Tether lưu tùy chọn này và khung giờ của nó riêng cho từng máy Mac đã ghép nối. Tùy chọn này tắt theo mặc định trên mỗi máy Mac, 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 Mỗi thông báo hiện Mac và dự án của cuộc trò chuyện (`Studio Mac · recipe-box`), tiêu đề cuộc trò chuyện và nội dung: Turn finished hiện câu trả lời cuối cùng của agent. Khi có khóa APNs, nội dung này đi qua dịch vụ push của Apple. 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.
|
|
250
|
-
- **Máy tính từ xa** cần Tailscale trên cả hai máy Mac, và cần Composer Plus có bật tính năng này trên máy Mac mà bạn mở. Máy Mac đó không được ở chế độ ngủ, và dsh phải đang chạy trên máy.
|
|
261
|
+
- **Máy tính từ xa** cần Tailscale trên cả hai máy Mac, và cần Composer Plus có bật tính năng này trên máy Mac mà bạn mở. Máy Mac đó không được ở chế độ ngủ, và dsh phải đang chạy trên máy. Bộ chọn chỉ hiện khi thanh bên trái đang mở (không hiện khi thanh bên chỉ còn các biểu tượng). Trang của máy Mac kia chỉ hiện bộ chọn khi máy đó có phiên bản Composer Plus này hoặc mới hơn. Với phiên bản cũ hơn, nút **Quay lại máy Mac này** hiện ở trên cùng sau vài giây. Mỗi máy tính bạn đã mở giữ trang của nó trong bộ nhớ cho đến khi bạn tắt tính năng hoặc khởi động lại dsh. Trên ứng dụng desktop, trang của máy Mac kia là một trang nhúng: các phím tắt của chính dsh (ví dụ cuộc trò chuyện mới) không hoạt động trong trang đó, và việc tải tệp xuống, micrô và thông báo cũng không hoạt động ở đó. Tính năng dùng cổng 19392 (trên mỗi máy Mac, chỉ một dsh có thể cho máy tính khác vào). Từ trang của một máy Mac khác, bộ chọn chỉ chuyển giữa các máy tính của máy Mac này: bạn không thể mở máy Mac thứ ba thông qua máy Mac kia.
|
|
251
262
|
- 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.
|
|
252
263
|
- **Đá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.
|
|
253
264
|
- **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).
|
|
@@ -255,6 +266,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
255
266
|
- 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ó.
|
|
256
267
|
- **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.
|
|
257
268
|
- **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`).
|
|
269
|
+
- **Báo cáo issue** chỉ mở issue trong repository của Composer Plus (`furkancak1r/dsh-composer-plus`), không mở trong dự án của bạn (để làm việc đó, hãy dùng **Mở issue trên GitHub** trong danh sách **Để sau** của Ý tưởng tính năng). Tính năng cần một mô hình mặc định trong dsh để viết bản nháp, và GitHub CLI (`gh`) đã đăng nhập để mở issue. Bản nháp luôn bằng tiếng Anh. Mô hình có thể viết sai một chi tiết: hãy đọc bản nháp trước khi bạn nhấp **Mở issue**. Việc mở issue chạy tối đa 60 giây; cùng tiêu đề và văn bản gửi lại trong vòng một giờ sẽ hiện issue trước đó thay vì tạo bản sao. **Mở trên GitHub thay vào đó** cắt bớt mô tả rất dài để giữ liên kết ngắn.
|
|
258
270
|
- **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ừ đó.
|
|
259
271
|
- **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. Nhãn chỉ hiện trong “Trong một danh sách”.
|
|
260
272
|
- **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.
|
|
@@ -279,6 +291,8 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
279
291
|
- **Tiếp tục trong cuộc trò chuyện mới** gửi cuộc trò chuyện (tin nhắn, lệnh gọi công cụ và phần cuối của mỗi kết quả công cụ, tối đa khoảng 60.000 ký tự, phần mới nhất) đến mô hình của chính cuộc trò chuyện. Ghi chú bàn giao có thể bỏ sót một quyết định hoặc một tệp: hãy đọc ghi chú trước khi bắt đầu. Cuộc trò chuyện mới chỉ biết ghi chú và cuộc trò chuyện được liên kết (dsh đính kèm cuộc trò chuyện cũ làm ngữ cảnh chỉ đọc); ngữ cảnh mô hình của nó bắt đầu nhỏ, cuộc trò chuyện cũ vẫn giữ nguyên. Mỗi cuộc trò chuyện chỉ có một lần viết ghi chú hoặc bắt đầu tại một thời điểm.
|
|
280
292
|
- **Phân tích ngữ cảnh** hiện số ước tính theo quy tắc của chính dsh (khoảng 4 ký tự cho mỗi token), cùng quy tắc với vòng ngữ cảnh của dsh; số đếm của chính mô hình có thể khác. Định nghĩa công cụ là định nghĩa của yêu cầu mới nhất. Tính năng hiện ngữ cảnh như nhật ký cuộc trò chuyện ghi lại; một lượt đang chạy xuất hiện sau bước tiếp theo của lượt đó.
|
|
281
293
|
- **Các bước đã lên kế hoạch** chỉ tiết kiệm token khi mô hình thực sự lên kế hoạch: khi đang bật, mỗi yêu cầu đều mang công cụ `plan_next_steps` và một chỉ dẫn ngắn (khoảng 500 token), kể cả trong những cuộc trò chuyện mà mô hình không bao giờ lên kế hoạch. Một điều kiện chỉ chứng minh đúng điều nó nêu (ví dụ: mã thoát của bản dựng là 0), không chứng minh công việc là đúng. `ok` đọc các dấu kết quả riêng của dsh (`[exit code: N]`, hết thời gian, sandbox từ chối); một lệnh thất bại mà không có mã thoát khác 0 vẫn được tính là đạt. Các bước chạy lần lượt từng bước; hai bước cùng sẵn sàng sẽ được trả lại cho mô hình. Tin nhắn của bước được lưu dưới dạng tin nhắn trợ lý của mô hình trong cuộc trò chuyện (dsh không có dấu cho tin nhắn do plugin viết), nên nội dung của nó ghi rằng Composer Plus đã chạy bước đó. Không có trong Tether.
|
|
294
|
+
- **Gói skill tiếng Thổ Nhĩ Kỳ** cài một skill của bên thứ ba: các quy tắc đến từ kho GitHub của tác giả, không phải từ Composer Plus, và phiên bản mới được dùng từ lần kiểm tra hằng ngày tiếp theo mà chúng tôi không xem xét. Việc kiểm tra chỉ chứng minh các tệp đúng là những tệp GitHub liệt kê cho commit đó, không chứng minh các quy tắc là tốt. Mô hình quyết định khi nào tải skill (bạn cũng có thể gọi nó theo tên); các quy tắc chỉ áp dụng cho văn bản tiếng Thổ Nhĩ Kỳ. Phần Host dùng ngôn ngữ mà một trình duyệt báo gần nhất: khi hai trình duyệt dùng ngôn ngữ khác nhau, báo mới nhất được dùng. Khi chưa đăng nhập, GitHub chỉ cho 60 lệnh gọi API mỗi giờ; một lần kiểm tra bị từ chối vẫn giữ bản sao đã cài và hiện lý do trong Cài đặt.
|
|
295
|
+
- **Gỡ rối codebase** đi kèm một bản sao cố định của skill (caldoai/skills, commit f3cf477): thay đổi ở bản gốc chỉ đến cùng phiên bản Composer Plus mới. Skill chạy một mục tiêu dài có thể thay đổi nhiều tệp, và các tác tử con cùng bước kiểm tra của nó tốn nhiều token. Ở những phần dự án không có kiểm thử, nó có thể thay đổi hành vi mà bạn không biết: hãy khởi động trên một branch riêng và đọc diff trước khi merge. Skill cùng tên trong dự án, trong thư mục skill tùy chỉnh hoặc trong `~/.dsh/skills` sẽ thay thế nó. Khi công tắc tắt, `/untangle-codebase` được gửi tới mô hình như văn bản thường.
|
|
282
296
|
- **Bảng tác vụ** hiện các cuộc trò chuyện mà dsh liệt kê trong cửa sổ này: cuộc trò chuyện nằm ngoài dự án chỉ hiện trong **Tất cả dự án**, và thư mục branch riêng của từng cuộc trò chuyện (`<project>/.worktrees/<name>`) được tính là thuộc dự án của nó. Cột của một thẻ là trạng thái trực tiếp của cuộc trò chuyện, nên không thể kéo thẻ: cuộc trò chuyện chuyển sang **Xong** khi lượt của nó kết thúc, kể cả sau lỗi hoặc khi bị dừng, và quay lại **Đang làm** khi chạy lại. Chấm xanh lá là chấm hoàn tất của chính dsh, mà dsh chỉ giữ trong cửa sổ này: sau khi trang được tải lại, các cuộc trò chuyện đã xong hiện không có chấm này. **Xong** hiện 50 cuộc trò chuyện mới nhất (**Hiện N tác vụ cũ hơn** hiện phần còn lại). **Tìm dự án** chỉ tìm dự án theo tên, không theo đường dẫn thư mục. **Hoạt động trong 2 giờ qua** ẩn một dự án khi mọi cuộc trò chuyện của nó đều cũ hơn 2 giờ, không hoạt động và đã đọc; bảng vẫn hiện dự án mà bạn đã chọn. **Tác vụ mới** chỉ nhớ cuộc trò chuyện mới gần nhất của cửa sổ này: khi bạn mở một cuộc trò chuyện khác trước tin nhắn đầu tiên, cuộc trò chuyện đó vẫn ở trên cùng của **Đang làm** dưới tên **Tác vụ mới** cho đến khi bạn viết vào, nhưng bảng chỉ tự quay lại cho cuộc trò chuyện gần nhất. Sau khi tải lại, cuộc trò chuyện mới chưa có tin nhắn không có trên bảng (dsh giữ nó làm Phiên mới trống của dsh). Nhãn đến từ một lệnh gọi mô hình cho mỗi tác vụ, dựa trên tin nhắn đầu tiên của tác vụ: nhãn có thể sai, và cuộc trò chuyện mà bạn không bắt đầu trên bảng thì không có nhãn. Tiêu đề là tiêu đề cuộc trò chuyện của chính dsh (dịch vụ đặt tiêu đề của dsh, với mô hình của cuộc trò chuyện); cho đến khi có tiêu đề, thẻ hiện dòng đầu tiên của tin nhắn đầu tiên. **×** và **Gỡ tất cả** chỉ gỡ thẻ khỏi bảng: không cuộc trò chuyện nào bị xóa. **Hoàn tác** chỉ hiện trong 8 giây, trong cửa sổ này; sau đó, **Đã gỡ (N)** → **Đưa lại lên bảng** đưa một thẻ trở lại, và cuộc trò chuyện chạy lại sẽ tự quay lại. **Gỡ tất cả** hỏi trước rồi gỡ các thẻ đã xong và đã đọc của dự án đang hiện (của mọi dự án với **Tất cả dự án**), kể cả các thẻ nằm sau **Hiện N tác vụ cũ hơn**; thẻ chưa đọc (màu xanh lá) vẫn ở lại. dsh chỉ giữ chấm xanh lá trong cửa sổ này, nên sau khi tải lại, Gỡ tất cả có thể gỡ một thẻ mà bạn chưa đọc câu trả lời. Danh sách được lưu trên máy Mac này cho mọi cửa sổ và cho Tether; khi danh sách có 5.000 cuộc trò chuyện, các cuộc trò chuyện cũ nhất sẽ quay lại. **Trả lời** chỉ trả lời yêu cầu mới nhất của cuộc trò chuyện: khi yêu cầu đó đã được trả lời ở nơi khác (cửa sổ khác, Tether, Đánh giá tự động) hoặc cuộc trò chuyện hỏi điều mới, khung chi tiết báo điều đó và không gửi gì. Các phiên bản trước có danh sách tác vụ với bình luận và công cụ cho tác tử; chúng đã bị bỏ, và `board.json` cũ không được hiển thị. Ý tưởng và giao diện lấy từ [Kanzo](https://github.com/emanuele-em/kanzo) của emanuele-em (AGPL-3.0); Composer Plus không dùng mã của nó. `Cmd+Shift+K` là phím tắt của dsh: trong trình duyệt trên Linux, nó không có phím mặc định (hãy đặt trong trang phím tắt của dsh), và tiện ích trình duyệt hoặc ứng dụng khác có thể dùng phím này trước. Một thẻ rời **Xong** khi chấm xanh lá của dsh biến mất (bạn đã mở cuộc trò chuyện), hoặc với cuộc trò chuyện xong phía sau bảng khi nó là cuộc trò chuyện đang mở, khi cuộc trò chuyện đó hiện ra mà không có bảng điều khiển nào phía trên. Trạng thái đã đọc này chỉ có trong cửa sổ dsh này, như các chấm của dsh: sau khi tải lại hoặc trong cửa sổ khác, mọi cuộc trò chuyện đã xong đều được tính là đã đọc, nên nằm trong **Vừa xong**.
|
|
283
297
|
- **Ư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.
|
|
284
298
|
- **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 kiểm tra trong **Mở bộ nhớ** và sửa ở đó, hoặc sửa các tệp bằng tay khi dsh đã đóng. **Mở bộ nhớ** gửi ghi chú của dự án được chọn và ghi chú chung (mọi dự án khi bạn chọn Tất cả ghi chú; tối đa khoảng 60.000 ký tự, phần còn lại chỉ được đếm và không thể thay đổi trong yêu cầu đó) cùng văn bản của bạn tới mô hình mặc định của dsh, không phải mô hình của cuộc trò chuyện. Bản xem trước được giữ trên Mac trong 30 phút và cho đến khi dsh khởi động lại; nếu việc xem xét hoặc tác tử thay đổi ghi chú trong lúc đó, **Áp dụng** sẽ từ chối và bạn xem trước lại. **Áp dụng** lưu tất cả thay đổi của một bản xem trước hoặc không lưu gì: nếu một thay đổi không lưu được (ví dụ MEMORY.md đã đầy), ghi chú giữ nguyên và lý do được hiển thị. 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.
|
|
@@ -293,6 +307,8 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
293
307
|
- **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 đó.
|
|
294
308
|
- **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ó.
|
|
295
309
|
- **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.
|
|
310
|
+
- **Ghi nhớ kích thước cửa sổ** chỉ hoạt động trong ứng dụng máy tính. Mỗi lần khởi động, dsh hiển thị cửa sổ ở 1280 × 820 trước; cửa sổ chuyển sang kích thước đã lưu khi plugin tải. Trang không có sự kiện cho việc di chuyển cửa sổ, nên plugin đọc cửa sổ mỗi giây một lần: thay đổi trong 2 giây cuối trước khi thoát dsh sẽ không được lưu. Kích thước được lưu theo từng máy tính, trong bộ nhớ riêng của ứng dụng.
|
|
311
|
+
- **Đếm lượt dùng:** đếm bản sao, không đếm người: mỗi thư mục home của dsh là một bản sao. Số bản sao duy nhất (`installed.txt`) chỉ tính các bản sao đã cập nhật lên phiên bản đầu tiên có tệp này hoặc một phiên bản mới hơn; bản sao vẫn ở phiên bản cũ hơn sẽ không được đếm. Bản sao bị xóa thư mục `storages` sẽ được đếm lại. GitHub có thể đếm các yêu cầu từ cùng một địa chỉ IP (ví dụ nhiều máy tính sau cùng một bộ định tuyến NAT) trong khoảng 10 phút là một.
|
|
296
312
|
- 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).
|
|
297
313
|
|
|
298
314
|
## Câu hỏi thường gặp
|
|
@@ -363,6 +379,8 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
363
379
|
|
|
364
380
|
**Làm sao chỉ trả lời một phần của câu trả lời dài?** Chọn phần đó và nhấp **Trích dẫn** phía trên vùng chọn (**Trích dẫn khi trả lời**, bật mặc định). Phần đó vào ô nhập dưới dạng trích dẫn `> …`, và bạn viết câu trả lời bên dưới.
|
|
365
381
|
|
|
382
|
+
**Làm sao chỉ cho tác tử đúng các dòng của một tệp?** Mở tệp trong thanh bên phải (**Tệp trong không gian làm việc**), chọn các dòng rồi nhấp **Trích dẫn** phía trên vùng chọn (**Trích dẫn từ bản xem trước tệp**, bật mặc định). Ô nhập nhận đường dẫn và số dòng (ví dụ `src/login.js:2-3`) cùng các dòng dưới dạng khối mã; hãy viết câu hỏi của bạn bên dưới.
|
|
383
|
+
|
|
366
384
|
**Tôi có thể hỏi điều gì đó khi tác tử đang làm việc mà không dừng nó không?** Nhập câu hỏi rồi nhấp **Hỏi trong trò chuyện phụ** trong ô nhập (**Trò chuyện phụ**, bật theo mặc định). Một bản sao chỉ đọc của cuộc trò chuyện trả lời trong khi cuộc trò chuyện vẫn tiếp tục. Trong trò chuyện phụ, **Mang về** đưa câu trả lời vào ô nhập của cuộc trò chuyện.
|
|
367
385
|
|
|
368
386
|
**Làm sao bảo tác tử cần đổi gì trong diff của nó?** Trong **Bảng thay đổi**, mở diff của tệp, nhấp **+** ở một dòng và viết ghi chú (**Ghi chú diff**, bật theo mặc định). Sau đó nhấp **Gửi vào ô nhập**: các ghi chú vào ô nhập cùng tệp, số dòng và các dòng.
|
|
@@ -371,7 +389,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
371
389
|
|
|
372
390
|
**Tôi bị mất iPhone. Làm sao để chặn nó truy cập máy Mac của tôi?** Nhấp **Kết nối di động** ở góc dưới bên trái thanh bên, rồi nhấp **Remove** bên cạnh iPhone đó. Khóa của iPhone đó ngừng hoạt động ngay; nó chỉ có thể kết nối lại bằng một lần ghép nối mới mà bạn phê duyệt trên máy Mac.
|
|
373
391
|
|
|
374
|
-
**Làm sao để tiếp tục một cuộc trò chuyện của máy Mac kia trên máy Mac này?** Trên máy Mac kia, bật **Cài đặt → Composer Plus → Máy tính từ xa** và **Cho phép máy tính khác mở máy Mac này**, nhấp **Tạo liên kết ghép nối** và sao chép liên kết (gửi cho chính bạn, ví dụ bằng AirDrop hoặc Ghi chú). Trên máy Mac này, cũng bật **Máy tính từ xa**, chọn **Thêm máy tính…** ở bên trái
|
|
392
|
+
**Làm sao để tiếp tục một cuộc trò chuyện của máy Mac kia trên máy Mac này?** Trên máy Mac kia, bật **Cài đặt → Composer Plus → Máy tính từ xa** và **Cho phép máy tính khác mở máy Mac này**, nhấp **Tạo liên kết ghép nối** và sao chép liên kết (gửi cho chính bạn, ví dụ bằng AirDrop hoặc Ghi chú). Trên máy Mac này, cũng bật **Máy tính từ xa**, chọn **Thêm máy tính…** trong bộ chọn ở thanh bên trái (bên phải tên thương hiệu, phía trên **Phiên mới**), dán liên kết, nhập **Tên** và nhấp **Kết nối**. Sau đó nhấp **Phê duyệt** trên máy Mac kia. Từ đó trở đi, chọn máy tính đó trong cùng menu: máy đó lấp đầy cửa sổ này. Chọn **Máy Mac này** ở cùng vị trí để quay lại. Trong lúc đó, các cuộc trò chuyện của máy Mac này vẫn tiếp tục chạy.
|
|
375
393
|
|
|
376
394
|
**Có thể khóa Tether bằng Face ID không?** Có: trong Tether, bật "Settings → Privacy → Lock with Face ID". Sau đó, Tether yêu cầu Face ID (hoặc mật mã) khi mở và khi bạn quay lại ứng dụng.
|
|
377
395
|
|
|
@@ -403,6 +421,12 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
403
421
|
|
|
404
422
|
**dsh có thể chạy lệnh tiếp theo mà không hỏi lại mô hình không?** Có, với **Các bước đã lên kế hoạch** (mặc định tắt): hãy bật trong Cài đặt → Composer Plus. Khi đó mô hình có thể lên kế hoạch cho các lệnh tiếp theo kèm điều kiện, ví dụ “chạy kiểm thử khi bản dựng thành công”, và Composer Plus chạy một bước mà không gọi lại mô hình khi kết quả đáp ứng điều kiện. Phê duyệt và sandbox vẫn giữ nguyên.
|
|
405
423
|
|
|
424
|
+
**Skill tiếng Thổ Nhĩ Kỳ đến từ đâu, và tôi có thể gỡ nó không?** Từ [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) trên GitHub (MIT). Composer Plus chỉ cài nó khi **Ngôn ngữ ứng dụng** là Türkçe, chỉ giữ các tệp Markdown và không chạy tập lệnh nào của nó. Để gỡ, hãy tắt **Gói skill tiếng Thổ Nhĩ Kỳ** trong Cài đặt → Composer Plus: skill và bản sao đã tải bị xóa ngay.
|
|
425
|
+
|
|
426
|
+
**Làm sao để báo lỗi hoặc yêu cầu tính năng trong Composer Plus?** Cài đặt → Composer Plus → **Báo cáo issue…** (hoặc menu **…** của một cuộc trò chuyện → **Báo cáo issue về Composer Plus…**). Chọn một loại, mô tả bằng ngôn ngữ của bạn và nhấp **Viết bản nháp**. Kiểm tra bản nháp tiếng Anh, rồi nhấp **Mở issue**.
|
|
427
|
+
|
|
428
|
+
**Làm sao để tác tử dọn dẹp một codebase lộn xộn?** Nhập `/untangle-codebase` trong một cuộc trò chuyện (**Gỡ rối codebase**, mặc định bật), có thể kèm một phần, ví dụ `/untangle-codebase src/api`. Trước tiên tác tử liệt kê mã sao chép, liên kết ẩn, lớp bọc thừa, mã chết và các trường hợp đặc biệt, rồi sửa chúng như một mục tiêu và kiểm tra lại bằng các tác tử con. Hãy khởi động nó trong một cuộc trò chuyện của **Branch riêng cho từng cuộc trò chuyện** để công việc nằm trên branch riêng.
|
|
429
|
+
|
|
406
430
|
**Plugin có hoạt động với ứng dụng desktop không?** Có: Cài đặt → Plugin → **Thêm plugin** → `dsh-composer-plus`. Đã kiểm thử trên dsh 0.2.0-rc.2 (desktop và web) và 0.2.1-rc.2 (web).
|
|
407
431
|
|
|
408
432
|
## Phát triển
|
|
@@ -422,6 +446,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
|
|
|
422
446
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
|
|
423
447
|
# Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
|
|
424
448
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
|
|
449
|
+
# Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
|
|
450
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
|
|
425
451
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
426
452
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
427
453
|
# What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
|
|
@@ -494,3 +520,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
|
|
|
494
520
|
## License
|
|
495
521
|
|
|
496
522
|
MIT
|
|
523
|
+
|
|
524
|
+
`assets/skills/untangle-codebase/SKILL.md` là skill `untangle-codebase` của [caldoai/skills](https://github.com/caldoai/skills), © 2026 Maze, theo Giấy phép MIT ([giấy phép của nó](assets/skills/untangle-codebase/LICENSE)).
|