diff --git a/README.md b/README.md
index a99d5aa5..49fc67b5 100644
--- a/README.md
+++ b/README.md
@@ -97,8 +97,8 @@ This makes Sub-Agents useful for parallel code inspection, splitting research ac
While ChatGPT is still working, ChatCMD lets you prepare the next instruction without waiting for the current response to finish. The task composer exposes two different delivery modes:
-- **Queue another message (`Gửi thêm tin nhắn`):** adds the message to the task's persistent ChatGPT queue. ChatCMD keeps it waiting until the current conversation is idle, the browser bridge is connected, the exact ChatGPT tab is open, and the UI is ready for another prompt; it then sends the first queued message automatically.
-- **Send immediate message (`Gửi ngay tin nhắn`):** marks the message as `immediate`, allowing the AI to receive it on its next MCP call in the same conversation instead of waiting for the normal browser-send window. If the active turn ends before that happens, the message remains available as a normal queued follow-up rather than being lost.
+- **Queue another message:** adds the message to the task's persistent ChatGPT queue. ChatCMD keeps it waiting until the current conversation is idle, the browser bridge is connected, the exact ChatGPT tab is open, and the UI is ready for another prompt; it then sends the first queued message automatically.
+- **Send immediate message:** marks the message as `immediate`, allowing the AI to receive it on its next MCP call in the same conversation instead of waiting for the normal browser-send window. If the active turn ends before that happens, the message remains available as a normal queued follow-up rather than being lost.
Queued follow-ups are manageable directly from the task UI: messages can be reordered, edited, deleted, promoted from queued to immediate, or demoted back to normal queue mode. Realtime queue events keep the panel synchronized when messages are consumed, and automatic sending is paused while compact/resume, bridge synchronization, another send, or an edit is in progress.
@@ -110,7 +110,7 @@ Long ChatGPT conversations eventually become harder to continue reliably as thei
How it works:
-1. **Confirm before anything is sent.** Selecting **Compact & resume now** opens a confirmation dialog. The optional **Tiếp tục công việc sau khi compact xong** checkbox starts unchecked on every opening; leave it unchecked to transfer context only, or opt in to automatically continue the working request after the replacement chat has been attached.
+1. **Confirm before anything is sent.** Selecting **Compact & resume now** opens a confirmation dialog. The optional **Continue work after compaction** checkbox starts unchecked on every opening; leave it unchecked to transfer context only, or opt in to automatically continue the working request after the replacement chat has been attached.
2. **Freeze the task at a safe boundary.** ChatCMD fences new local MCP operations for the compacting task, waits for already-admitted operations to finish, and stops the current ChatGPT generation before asking the source conversation to produce its handoff. Existing drafts and queued follow-up messages are preserved rather than overwritten.
3. **Write and persist the handoff first.** The source ChatGPT conversation receives a structured handoff request covering requirements, corrections, completed versus planned work, bug/fix/evidence chains, delegated work, environment details, blockers, and remaining tasks. The resulting public answer is saved durably in SQLite before ChatCMD is allowed to open or commit a replacement conversation.
4. **Bootstrap a fresh ChatGPT conversation.** ChatCMD opens a new conversation and sends a no-tools resume/bootstrap message containing the saved handoff. It waits until the destination's real canonical ChatGPT conversation identity and resume marker are observed before changing the task's active conversation binding.
@@ -118,7 +118,7 @@ How it works:
6. **Optionally continue the work.** Only when the saved opt-in is enabled does ChatCMD enqueue the deterministic post-handoff continuation request. Repeated resume calls are idempotent, so recovery or retries do not create duplicate working messages.
7. **Retire the source tab conservatively.** After the new conversation is safely attached, ChatCMD attempts to close only the exact recorded source tab. If tab identity, draft state, generation state, or dispatch ownership is ambiguous, it leaves the tab open rather than risking closure of the wrong conversation.
-The UI shows live phases for preparing, writing the handoff, saving it, and opening the new chat. Compact state is persisted independently of the browser worker, so extension reloads, closed/reopened tabs, delayed Send availability, or lost responses can be reconciled from SQLite plus browser dispatch metadata instead of blindly repeating prompts. Completed compactions remain available in **Lịch sử thu gọn ngữ cảnh**, including references to the archived source and replacement conversation.
+The UI shows live phases for preparing, writing the handoff, saving it, and opening the new chat. Compact state is persisted independently of the browser worker, so extension reloads, closed/reopened tabs, delayed Send availability, or lost responses can be reconciled from SQLite plus browser dispatch metadata instead of blindly repeating prompts. Completed compactions remain available in **Context compaction history**, including references to the archived source and replacement conversation.
Compact & resume is intentionally fail-closed: if ChatCMD cannot prove which prompt was sent, which conversation produced the handoff, or which destination owns the resume marker, it pauses with a recoverable state instead of silently dropping context or binding the task to the wrong chat. See [docs/COMPACT_RESUME.md](docs/COMPACT_RESUME.md) for the full persistence, identity, recovery, and dispatch model.
diff --git a/README_vi.md b/README_vi.md
index dd160d2c..0ab8363f 100644
--- a/README_vi.md
+++ b/README_vi.md
@@ -30,7 +30,7 @@ ChatCMD là một cầu nối tự host giữa các AI client tương thích MCP
|
- Task workspace và phản hồi cuối -
+ Không gian làm việc của tác vụ và phản hồi cuối+
|
Timeline hoạt động của agent @@ -307,14 +307,14 @@ Xem [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) để biết contributor workflow
|
- Dialog câu hỏi trong Plan mode -
+ Hộp thoại câu hỏi trong chế độ lập kế hoạch+
|
|
- Task Plan mode và approval control -
+ Tác vụ ở chế độ lập kế hoạch và điều khiển phê duyệt+
|
Phản hồi plan đã hoàn tất diff --git a/crates/chatcmd-mcp/src/tool_methods.rs b/crates/chatcmd-mcp/src/tool_methods.rs index 48921396..d4d5e7c8 100644 --- a/crates/chatcmd-mcp/src/tool_methods.rs +++ b/crates/chatcmd-mcp/src/tool_methods.rs @@ -263,7 +263,7 @@ tool_methods!( ( git_commit, GitCommitArgs, - "Create or preview a Git commit without shell interpolation. Required field: message and exactly one explicit scope: non-empty normalized paths or all=true. all defaults to false, is mutually exclusive with paths, commits only already-staged changes, and fails closed while unstaged or untracked changes exist. Set previewOnly=true for a side-effect-free GitCommitPreview; pass it back as expectedPreview to bind execution to the previewed HEAD/index/worktree bytes. The runtime refuses stale previews, staged paths outside scope, ambiguous path spellings, and selected paths with mixed staged/unstaged changes." + "Create or preview a Git commit without shell interpolation. Required field: message and exactly one explicit scope: non-empty normalized paths or all=true. all defaults to false and is mutually exclusive with paths. With all=true, the runtime previews the full worktree, snapshots the existing Git index, stages all tracked/untracked changes with git add --all, and restores the previous index if staging or commit fails before HEAD changes. Set previewOnly=true for a side-effect-free GitCommitPreview; pass it back as expectedPreview to bind execution to the previewed HEAD/index/worktree bytes. For path-scoped commits, the runtime refuses stale previews, staged paths outside scope, ambiguous path spellings, and selected paths with mixed staged/unstaged changes." ), ( process_list, diff --git a/crates/chatcmd-runtime/src/git_service.rs b/crates/chatcmd-runtime/src/git_service.rs index 5795e68b..b24df0ab 100644 --- a/crates/chatcmd-runtime/src/git_service.rs +++ b/crates/chatcmd-runtime/src/git_service.rs @@ -291,7 +291,15 @@ impl GitService { options: &GitRunOptions, cancellation: CancellationToken, ) -> RuntimeResult ChatGPT
+ {selectedAgent ? `Bạn muốn mình giao công việc gì cho @${selectedAgent.name}?` : 'Chọn một MCP agent để bắt đầu cuộc trò chuyện.'} Yêu cầu của bạn sẽ được gửi qua ChatGPT và agent sẽ thực hiện công việc trong ChatCMD.ChatGPT
{selectedAgent ? tr('What would you like me to assign to @{name}?', { name: selectedAgent.name }) : tr('Choose an MCP agent to start the conversation.')} {tr('Your request will be sent through ChatGPT and the agent will perform the work in ChatCMD.')}{content.trim() ? content : effectiveContent}
- Thư mục dự án
+ {tr('Project folder')}
-
@@ -182,22 +191,22 @@ export function NewChatGptConversation() {
- {textAttachments.length > 0 &&
- {textAttachments.map((attachment) => ;
@@ -213,7 +222,7 @@ export function ChatGptTaskCard({ taskId }: { taskId: string }) {
return () => window.clearInterval(timer);
}, [bridge.data?.conversationUrl, refreshBridge]);
if (!bridge.data) return null;
- return
+ {textAttachments.map((attachment) => }
{selectedAgent ? `Gửi tới @${selectedAgent.name}` : tr('No enabled agent')}
+ {selectedPrompt(enabledAgents, agentId, projectFolder, effectiveContent)}{selectedAgent ? tr('Send to @{name}', { name: selectedAgent.name }) : tr('No enabled agent')}
- {folderMenuOpen && {selectedPrompt(enabledAgents, agentId, projectFolder, effectiveContent)}{projects.loading ? {projects.error || 'Chưa có dự án đã lưu.'} }{projects.loading ? {projects.error || tr('No saved projects yet.')} }Bạn chưa chọn thư mụcChọn thư mục dự án cụ thể giúp AI làm việc tốt hơn trên môi trường đó, bạn có muốn vẫn tiếp tục mà không có thư mục không? {tr('No folder selected')}{tr('Choosing a specific project folder helps the AI work better in that environment. Do you still want to continue without a folder?')} |