feat: assistant loading placeholder docs - #1863
Conversation
* fix(memory): tighten lifecycle contract * chore: update resources
|
Caution Review failedAn error occurred during the review process. Please try again later. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…g-placeholder-docs # Conflicts: # docs/features/assistant-permission-review-mode/spec.md # src/main/presenter/agentRuntimePresenter/dispatch.ts # src/main/presenter/agentRuntimePresenter/index.ts # src/renderer/src/i18n/da-DK/chat.json # src/renderer/src/i18n/da-DK/dialog.json # src/renderer/src/i18n/de-DE/chat.json # src/renderer/src/i18n/de-DE/dialog.json # src/renderer/src/i18n/es-ES/chat.json # src/renderer/src/i18n/es-ES/dialog.json # src/renderer/src/i18n/fa-IR/chat.json # src/renderer/src/i18n/fa-IR/dialog.json # src/renderer/src/i18n/fr-FR/chat.json # src/renderer/src/i18n/fr-FR/dialog.json # src/renderer/src/i18n/he-IL/chat.json # src/renderer/src/i18n/he-IL/dialog.json # src/renderer/src/i18n/id-ID/chat.json # src/renderer/src/i18n/id-ID/dialog.json # src/renderer/src/i18n/it-IT/chat.json # src/renderer/src/i18n/it-IT/dialog.json # src/renderer/src/i18n/ja-JP/chat.json # src/renderer/src/i18n/ja-JP/dialog.json # src/renderer/src/i18n/ko-KR/chat.json # src/renderer/src/i18n/ko-KR/dialog.json # src/renderer/src/i18n/ms-MY/chat.json # src/renderer/src/i18n/ms-MY/dialog.json # src/renderer/src/i18n/pl-PL/chat.json # src/renderer/src/i18n/pl-PL/dialog.json # src/renderer/src/i18n/pt-BR/chat.json # src/renderer/src/i18n/pt-BR/dialog.json # src/renderer/src/i18n/ru-RU/chat.json # src/renderer/src/i18n/ru-RU/dialog.json # src/renderer/src/i18n/tr-TR/chat.json # src/renderer/src/i18n/tr-TR/dialog.json # src/renderer/src/i18n/vi-VN/chat.json # src/renderer/src/i18n/vi-VN/dialog.json # src/renderer/src/pages/ChatPage.vue # test/main/presenter/agentRuntimePresenter/agentRuntimePresenter.test.ts # test/main/presenter/agentRuntimePresenter/dispatch.test.ts # test/renderer/components/ChatPage.test.ts
There was a problem hiding this comment.
Actionable comments posted: 1
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
♻️ Duplicate comments (1)
src/renderer/src/i18n/es-ES/dialog.json (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated
deleteMessagestrings.Same issue as other locale files —
title,description, andconfirmare left in English instead of Spanish.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/es-ES/dialog.json` around lines 89 - 93, The deleteMessage entries in the es-ES dialog locale are still in English. Update the title, description, and confirm strings in the dialog.json translation block to Spanish, matching the existing localization style used elsewhere in this locale file. Use the deleteMessage key to locate and replace all three untranslated fields.
🟡 Minor comments (28)
src/renderer/src/i18n/da-DK/chat.json-314-315 (1)
314-315: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated placeholder string for
autoApprove.Same issue as
it-IT: the new key uses literal English"Approve for me"instead of a Danish translation.🌐 Suggested fix
- "fullAccess": "Fuld adgang", - "autoApprove": "Approve for me" + "fullAccess": "Fuld adgang", + "autoApprove": "Godkend for mig"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/da-DK/chat.json` around lines 314 - 315, The new chat translation entry for autoApprove is still using the English placeholder text. Update the autoApprove value in the da-DK chat.json localization to a proper Danish translation, matching the style of nearby keys like fullAccess, so the i18n bundle contains no literal English for this label.src/renderer/src/i18n/it-IT/chat.json-330-331 (1)
330-331: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated placeholder string for
autoApprove.The new key uses the literal English string
"Approve for me"instead of an Italian translation, unlikezh-CNwhich shipped a properly localized value ("助手代审"). This will surface English text in the Italian UI.🌐 Suggested fix
- "fullAccess": "Accesso completo", - "autoApprove": "Approve for me" + "fullAccess": "Accesso completo", + "autoApprove": "Approva per me"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/it-IT/chat.json` around lines 330 - 331, The `autoApprove` entry in the Italian chat translation is still using the English placeholder text, so update the `chat.json` locale value for `autoApprove` to a proper Italian translation consistent with the other locale files. Locate the `autoApprove` key in `src/renderer/src/i18n/it-IT/chat.json` and replace the literal English phrase with the localized Italian string.src/renderer/src/i18n/he-IL/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winNew
deleteMessagestrings left untranslated (English) in Hebrew locale file.The new keys
title,description,confirmare in English rather than Hebrew, unlike every other string in this file.🌐 Suggested Hebrew translations
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "למחוק את ההודעה הזו?", + "description": "פעולה זו תמחק את ההודעה הזו ואת ההקשר שיוחזר אחריה. לא ניתן לבטל פעולה זו.", + "confirm": "מחק הודעה" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/he-IL/dialog.json` around lines 89 - 93, The new deleteMessage entries in the Hebrew locale are still in English; update the title, description, and confirm values in dialog.json to proper Hebrew and keep the wording consistent with the rest of the he-IL translations. Use the deleteMessage object as the target to replace these three strings with localized text.src/renderer/src/i18n/he-IL/chat.json-314-315 (1)
314-315: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winNew
autoApprovestring left untranslated in Hebrew locale file.
"Approve for me"is English text placed in a Hebrew locale file.🌐 Suggested Hebrew translation
- "autoApprove": "Approve for me" + "autoApprove": "אשר בשבילי"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/he-IL/chat.json` around lines 314 - 315, The Hebrew locale entry for autoApprove is still in English, so update the chat.json translation to use Hebrew text consistent with the surrounding i18n strings. Locate the autoApprove key in the he-IL locale file and replace the English phrase with the proper Hebrew translation, keeping the existing key structure unchanged.src/renderer/src/i18n/vi-VN/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winNew
deleteMessagestrings left untranslated (English) in Vietnamese locale file.Same untranslated-string issue as the other locale files touched in this PR.
🌐 Suggested Vietnamese translations
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Xóa tin nhắn này?", + "description": "Hành động này sẽ xóa tin nhắn này và ngữ cảnh được tạo lại sau đó. Không thể hoàn tác.", + "confirm": "Xóa tin nhắn" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/vi-VN/dialog.json` around lines 89 - 93, The new deleteMessage entries in the Vietnamese dialog.json are still in English, so translate the title, description, and confirm strings to Vietnamese. Update the deleteMessage block in the vi-VN locale file to match the existing localization style used by other keys in this file and keep the same symbol names so the UI reads localized text.src/renderer/src/i18n/ru-RU/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winNew
deleteMessagestrings left untranslated (English) in Russian locale file.Same issue as other non-English locales — new keys should be translated to Russian.
🌐 Suggested Russian translations
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Удалить это сообщение?", + "description": "Это удалит сообщение и последующий воссозданный контекст. Это действие нельзя отменить.", + "confirm": "Удалить сообщение" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ru-RU/dialog.json` around lines 89 - 93, The new deleteMessage strings in the Russian locale are still in English; update the deleteMessage entry in dialog.json to use Russian translations for title, description, and confirm. Keep the existing structure and translate the text consistently with the rest of the ru-RU messages so the locale file is fully localized.src/renderer/src/i18n/ja-JP/dialog.json-88-93 (1)
88-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated strings in
ja-JPlocale.The new
deleteMessage.title,description, andconfirmvalues are left in English while every other key in this file is localized to Japanese.🌐 Suggested fix
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "このメッセージを削除しますか?", + "description": "このメッセージと、その後に再生成されたコンテキストが削除されます。この操作は取り消せません。", + "confirm": "メッセージを削除" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ja-JP/dialog.json` around lines 88 - 93, The new deleteMessage strings in the ja-JP dialog locale are still in English, so localize deleteMessage.title, deleteMessage.description, and deleteMessage.confirm to Japanese to match the rest of the file. Update the values in the dialog.json entry for deleteMessage and keep the same keys so the existing translations continue to resolve correctly.src/renderer/src/i18n/ms-MY/chat.json-330-331 (1)
330-331: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string in
ms-MYlocale.
autoApproveis left in English ("Approve for me") while the siblingfullAccesskey is properly localized ("akses penuh"). This will show English text to Malay-locale users.🌐 Suggested fix
- "autoApprove": "Approve for me" + "autoApprove": "Luluskan untuk saya"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ms-MY/chat.json` around lines 330 - 331, The ms-MY locale entry for autoApprove is still untranslated and should match the surrounding localized strings. Update the autoApprove value in chat.json to a Malay translation, using the existing i18n keys in that section (such as fullAccess) as a reference to keep tone and style consistent.src/renderer/src/i18n/de-DE/chat.json-328-332 (1)
328-332: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string in de-DE locale.
autoApprovevalue "Approve for me" is left in English rather than German, unlike the surroundingdefault/fullAccessentries.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/de-DE/chat.json` around lines 328 - 332, The de-DE locale entry for permissionMode contains an untranslated English string in autoApprove. Update the chat.json translation so autoApprove matches the surrounding German entries, using the existing permissionMode key to locate it and replacing the English text with a proper German translation.src/renderer/src/i18n/vi-VN/chat.json-328-332 (1)
328-332: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string in vi-VN locale.
autoApprovevalue "Approve for me" is left in English inside the Vietnamese locale file, while the siblingfullAccess/defaultkeys are properly translated.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/vi-VN/chat.json` around lines 328 - 332, The vi-VN locale entry for permissionMode contains an untranslated English string in the autoApprove key. Update the autoApprove value in src/renderer/src/i18n/vi-VN/chat.json to a Vietnamese translation consistent with the neighboring default and fullAccess entries, and keep the existing permissionMode key structure unchanged.src/renderer/src/i18n/ms-MY/dialog.json-88-93 (1)
88-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated
deleteMessagestrings in ms-MY locale.
title,description, andconfirmare all in English rather than Malay, inconsistent with the rest of this locale file.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ms-MY/dialog.json` around lines 88 - 93, The deleteMessage entries in the ms-MY dialog locale are still in English; update the title, description, and confirm strings in the deleteMessage object to proper Malay so this locale stays consistent with the rest of the file. Use the deleteMessage keys in dialog.json as the target for the translation fix and leave the structure unchanged.src/main/presenter/agentRuntimePresenter/index.ts-3852-3858 (1)
3852-3858: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick winUse the live tool-loop messages for auto-approve review
reviewToolPermissionstill slices the initialmessagessnapshot fromrunStreamForMessage, whileprocessStreamclones that array intoconversationMessagesand mutates the clone during tool execution. The reviewer never sees the live tool-loop context.src/main/presenter/agentRuntimePresenter/index.ts:3852-3858🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/presenter/agentRuntimePresenter/index.ts` around lines 3852 - 3858, The auto-approve review is using the stale `messages` snapshot instead of the live tool-loop state, so update `reviewToolPermission` in `agentRuntimePresenter` to slice from `conversationMessages` (the array mutated by `processStream`) when calling `reviewToolPermissionForAutoApprove`. Keep the same recent-message limit and abort signal, but ensure the reviewer sees the current tool-execution context rather than the initial `runStreamForMessage` payload.src/renderer/src/i18n/id-ID/chat.json-330-331 (1)
330-331: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated string in Indonesian locale.
autoApproveis set to the English phrase"Approve for me"while all sibling keys (e.g.fullAccess:"akses penuh") are translated into Indonesian. This is inconsistent with the rest of the locale file.🌐 Suggested Indonesian translation
- "autoApprove": "Approve for me" + "autoApprove": "Setujui untuk saya"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/id-ID/chat.json` around lines 330 - 331, The Indonesian locale entry for autoApprove is still in English while neighboring strings in chat.json are translated, so update that key to an Indonesian phrase consistent with the rest of the file. Locate the autoApprove field alongside fullAccess in the Indonesian chat translations and replace the English text with the proper Indonesian translation.src/renderer/src/i18n/fa-IR/dialog.json-89-93 (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated strings in fa-IR locale.
deleteMessage.title,description, andconfirmare in English instead of Persian, inconsistent with the rest of the file.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/fa-IR/dialog.json` around lines 89 - 93, The fa-IR locale entry for deleteMessage still contains English strings, so translate deleteMessage.title, deleteMessage.description, and deleteMessage.confirm into Persian to match the rest of the dialog.json file. Update the deleteMessage object in the fa-IR translation JSON and keep the meaning consistent with the existing keys.src/renderer/src/i18n/pt-BR/dialog.json-89-93 (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated strings in pt-BR locale.
The new
deleteMessage.title,description, andconfirmvalues are in English instead of Portuguese.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/pt-BR/dialog.json` around lines 89 - 93, The pt-BR dialog locale has untranslated `deleteMessage` strings; update the `deleteMessage.title`, `deleteMessage.description`, and `deleteMessage.confirm` entries in `dialog.json` to Portuguese, keeping the existing key structure intact so the UI uses localized copy instead of English.src/renderer/src/i18n/ja-JP/chat.json-314-315 (1)
314-315: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated string in ja-JP locale.
autoApprovevalue is left in English ("Approve for me") instead of being translated to Japanese, unlike the adjacentfullAccesskey.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ja-JP/chat.json` around lines 314 - 315, The ja-JP chat locale has an untranslated value for autoApprove, which is still in English while nearby keys are localized. Update the autoApprove entry in the Japanese translation file to a proper Japanese phrase, keeping it consistent with the surrounding localization in chat.json and the existing i18n key naming.src/renderer/src/i18n/fr-FR/chat.json-314-315 (1)
314-315: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated string in fr-FR locale.
autoApprovevalue ("Approve for me") isn't translated to French, unlike the neighboringfullAccesskey.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/fr-FR/chat.json` around lines 314 - 315, The fr-FR locale has an untranslated value for the autoApprove key, while nearby entries are localized. Update the chat.json entry for autoApprove in the French translation file so it uses a proper French phrase consistent with the surrounding localization strings, keeping the key name unchanged.src/renderer/src/i18n/tr-TR/chat.json-330-331 (1)
330-331: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string in Turkish locale file.
permissionMode.autoApproveis left in English ("Approve for me") instead of Turkish, unlike the siblingfullAccesskey.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/tr-TR/chat.json` around lines 330 - 331, The permissionMode.autoApprove entry in the Turkish chat locale is still in English, so update the translation in the chat.json locale object alongside permissionMode.fullAccess to use the correct Turkish text. Locate the string value for autoApprove and replace it with a Turkish translation consistent with the surrounding locale entries.src/renderer/src/i18n/de-DE/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated strings in German locale file.
deleteMessage.title,description, andconfirmremain in English instead of German.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/de-DE/dialog.json` around lines 89 - 93, The deleteMessage strings in the German locale are still in English, so update the deleteMessage.title, deleteMessage.description, and deleteMessage.confirm entries in the dialog.json translation block to proper German text. Keep the same keys and structure, and verify the localized wording matches the existing dialog message context.src/renderer/src/i18n/fa-IR/chat.json-314-315 (1)
314-315: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string in Persian locale file.
permissionMode.autoApproveis in English ("Approve for me") whilefullAccessanddefaultin the same object are properly translated to Farsi.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/fa-IR/chat.json` around lines 314 - 315, The permissionMode.autoApprove entry in the fa-IR locale is still in English, unlike the surrounding translations in the same object. Update the autoApprove value in the chat.json locale file to a proper Farsi translation, keeping it consistent with fullAccess and default and using the same key path reference permissionMode.autoApprove.src/renderer/src/i18n/pl-PL/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated strings in Polish locale file.
deleteMessage.title,description, andconfirmare left in English instead of Polish.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/pl-PL/dialog.json` around lines 89 - 93, The deleteMessage strings in the pl-PL dialog locale are still in English; update deleteMessage.title, deleteMessage.description, and deleteMessage.confirm in the dialog.json translation entry to Polish. Use the existing dialog JSON structure and keep the same keys so the localized copy is applied where deleteMessage is referenced.src/renderer/src/i18n/it-IT/dialog.json-89-93 (1)
89-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated strings in Italian locale file.
deleteMessage.title,description, andconfirmare in English rather than Italian, unlike every other key in this file.🌐 Suggested Italian translation
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Eliminare questo messaggio?", + "description": "Questo eliminerà il messaggio e il contesto rigenerato successivo. Questa azione non può essere annullata.", + "confirm": "Elimina messaggio" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/it-IT/dialog.json` around lines 89 - 93, The deleteMessage entries in the Italian locale file are still in English; update deleteMessage.title, deleteMessage.description, and deleteMessage.confirm in dialog.json to proper Italian so they match the rest of the it-IT translations. Use the deleteMessage key group in the locale JSON to locate and replace these three strings consistently.src/renderer/src/i18n/pt-BR/chat.json-312-316 (1)
312-316: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUntranslated string:
autoApprovevalue is in English, not Portuguese.
"autoApprove": "Approve for me"appears to be the raw English source string left untranslated in a pt-BR locale file, unlike the siblingfullAccesskey which is properly localized ("Acesso total"). Compare with the zh-HK equivalent in this same PR, which is correctly localized ("助手代審").🌐 Suggested fix
"permissionMode": { "default": "Permissões padrão", "fullAccess": "Acesso total", - "autoApprove": "Approve for me" + "autoApprove": "Aprovar para mim" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/pt-BR/chat.json` around lines 312 - 316, The permissionMode.autoApprove translation in the pt-BR chat locale is still in English and should be localized consistently with the other keys in this object. Update the autoApprove value in chat.json to a Portuguese equivalent, matching the style used by default and fullAccess, and verify the same key remains correctly translated across related locale files.src/renderer/src/i18n/id-ID/dialog.json-88-93 (1)
88-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
deleteMessageblock is untranslated (still in English).
title,description, andconfirmunderdeleteMessageare plain English strings while every other entry in this id-ID file is in Bahasa Indonesia (e.g.agentTransfer.deleteTitle). This will show English text to Indonesian-locale users.🌐 Suggested fix
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Hapus pesan ini?", + "description": "Tindakan ini akan menghapus pesan ini dan konteks yang dibuat ulang setelahnya. Tindakan ini tidak dapat dibatalkan.", + "confirm": "Hapus pesan" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/id-ID/dialog.json` around lines 88 - 93, The deleteMessage strings in the id-ID dialog translation are still in English and should be localized to Bahasa Indonesia to match the rest of this file. Update the title, description, and confirm values in the deleteMessage object in dialog.json with Indonesian translations, keeping the same keys and structure used by other translated entries like agentTransfer.deleteTitle.src/renderer/src/i18n/tr-TR/dialog.json-89-93 (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated
deleteMessagestrings.The new
title,description, andconfirmvalues are in English rather than Turkish, unlike every other string in this file.🌐 Suggested fix (verify with a native speaker)
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Bu mesaj silinsin mi?", + "description": "Bu, mesajı ve sonrasında yeniden oluşturulan bağlamı silecektir. Bu işlem geri alınamaz.", + "confirm": "Mesajı sil" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/tr-TR/dialog.json` around lines 89 - 93, The new deleteMessage copy in dialog.json is still in English, so localize the title, description, and confirm values to Turkish to match the rest of the tr-TR file. Update the strings under deleteMessage in the dialog translation object, keeping the same keys and tone as nearby entries. Verify the wording is natural Turkish and consistent with the existing translation style in this i18n file.src/renderer/src/i18n/ru-RU/chat.json-314-315 (1)
314-315: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated
autoApprovestring.
"Approve for me"is English text left in the Russian locale file.🌐 Suggested fix (verify with a native speaker)
"permissionMode": { "default": "Разрешения по умолчанию", "fullAccess": "Полный доступ", - "autoApprove": "Approve for me" + "autoApprove": "Утверждать за меня" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/ru-RU/chat.json` around lines 314 - 315, The chat locale entry for autoApprove is still in English in the Russian translation file; update the autoApprove string in the ru-RU chat.json locale alongside fullAccess so it uses a proper Russian translation instead of "Approve for me". Keep the key name unchanged and ensure the translated text matches the surrounding i18n values in this file.src/renderer/src/i18n/fr-FR/dialog.json-89-93 (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated English strings in French locale file.
Same issue as the Danish locale:
deleteMessage.title/description/confirmare copied verbatim in English rather than translated to French.🌐 Suggested French translation (verify wording with a native speaker)
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Supprimer ce message ?", + "description": "Cela supprimera ce message ainsi que le contexte régénéré qui suit. Cette action est irréversible.", + "confirm": "Supprimer le message" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/fr-FR/dialog.json` around lines 89 - 93, The deleteMessage strings in the French locale are still in English; translate the title, description, and confirm copy in the fr-FR dialog.json entry. Update the deleteMessage object so its text is proper French while keeping the same keys and structure used by the locale file.src/renderer/src/i18n/da-DK/dialog.json-89-93 (1)
89-93: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUntranslated English strings in Danish locale file.
The new
deleteMessage.title/description/confirmstrings are left in English instead of being translated to Danish, unlike every other key in this file (e.g.agentTransfer).🌐 Suggested Danish translation (verify wording with a native speaker)
"deleteMessage": { - "title": "Delete this message?", - "description": "This will delete this message and following regenerated context. This action cannot be undone.", - "confirm": "Delete message" + "title": "Slet denne besked?", + "description": "Dette vil slette denne besked og efterfølgende regenereret kontekst. Denne handling kan ikke fortrydes.", + "confirm": "Slet besked" }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/i18n/da-DK/dialog.json` around lines 89 - 93, The new deleteMessage strings in the Danish locale are still in English, so translate the title, description, and confirm values in dialog.json to Danish to match the rest of the file. Update the deleteMessage entry consistently with the existing localized keys such as agentTransfer, keeping the same key structure and replacing only the string values.
🧹 Nitpick comments (4)
docs/features/message-delete-confirmation/plan.md (1)
29-29: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueHyphenate "keyboard-reachable".
Static analysis flags a missing hyphen: "keyboard reachable" should be "keyboard-reachable" when used as a compound modifier.
✏️ Suggested fix
-- Accessibility concerns: modal focus, Escape close, keyboard reachable cancel/confirm. +- Accessibility concerns: modal focus, Escape close, keyboard-reachable cancel/confirm.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/features/message-delete-confirmation/plan.md` at line 29, The phrasing in the plan note uses “keyboard reachable” as a compound modifier; update the wording to “keyboard-reachable” in the accessibility concerns sentence. Make this change in the relevant text around the message-delete-confirmation plan so the description is hyphenated consistently and passes static analysis.Source: Linters/SAST tools
src/main/presenter/agentSessionPresenter/index.ts (1)
120-123: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winExtract
normalizePermissionModeto a shared helper
src/main/presenter/agentSessionPresenter/index.tsandsrc/main/presenter/agentRuntimePresenter/index.tsboth implement the same permission-mode normalization. Move it to a shared helper so the rule stays single-sourced.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/presenter/agentSessionPresenter/index.ts` around lines 120 - 123, The permission-mode normalization logic is duplicated in both agent presenter modules, so move normalizePermissionMode into a shared helper and have agentSessionPresenter and agentRuntimePresenter import and use that single implementation. Keep the existing behavior for PermissionMode values the same, but centralize the logic in one reusable function so the rule is maintained in one place.src/renderer/src/pages/ChatPage.vue (1)
556-560: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMinor duplication:
CSS.escapefallback repeated.The same
CSS.escape-with-regex-fallback pattern for building a[data-message-id="..."]selector also appears infocusPendingSpotlightMessageJump(lines 848-851). Consider extracting a smallescapeMessageIdSelector(id)helper to avoid the two copies drifting apart.♻️ Suggested helper
function escapeMessageIdSelector(id: string): string { return typeof CSS !== 'undefined' && typeof CSS.escape === 'function' ? CSS.escape(id) : id.replace(/["\\]/g, '\\$&') }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/renderer/src/pages/ChatPage.vue` around lines 556 - 560, The selector-escaping logic for message IDs is duplicated in the message jump code and in focusPendingSpotlightMessageJump, so extract it into a shared helper like escapeMessageIdSelector(id) and use that in both places. Update the currentAnchor.messageId selector building to call the helper, and reuse the same helper anywhere else the [data-message-id="..."] selector is constructed so the CSS.escape fallback stays consistent.src/main/presenter/agentRuntimePresenter/dispatch.ts (1)
777-901: 🔒 Security & Privacy | 🔵 Trivial | 🏗️ Heavy liftHeuristic-based tool classification for auto-review — confirm coverage is intentional.
isReviewableFullAccessToolCallandbuildSyntheticPermissionForReviewrely on substring matching against tool names ('file','search','settings','memory','skill', etc.) to decide whether an agent-sourced tool needs LLM review inauto_approvemode. This is broad by design (favoring more review over less), but it also means any agent tool whose name happens to contain one of these substrings (e.g., a hypotheticalsearch_engine_statusread-only tool) gets flagged as reviewable/full-access-worthy even if it's harmless, and conversely a tool with none of these substrings and no path/command in its args (e.g., a tool namedrun_task) will bypass review entirely. Given this heuristic is the security backbone ofauto_approvemode for agent tools, consider driving classification off a declared capability/risk field on the tool definition rather than name substrings, going forward.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/presenter/agentRuntimePresenter/dispatch.ts` around lines 777 - 901, The auto-review classification in isReviewableFullAccessToolCall and buildSyntheticPermissionForReview is overly dependent on tool-name substring matching, which can both over-flag harmless tools and miss risky ones. Update this logic to use an explicit capability/risk signal from the tool definition instead of relying on names, and keep the existing argument-based checks in collectStringValues, extractToolArgPaths, and extractToolArgCommand only as secondary signals. Use the existing ToolExecutionContext and toolDef/toolContext fields to locate the call sites and ensure the permission decision is driven by declared metadata rather than heuristics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/main/presenter/agentRuntimePresenter/dispatch.ts`:
- Around line 903-944: In reviewAutoApproveAction, the decision handling is
fail-open because anything other than ask_user or block falls through to
auto_allow. Update the hooks.reviewToolPermission result handling to use an
explicit allow-list: only return auto_allow for a confirmed auto_allow decision,
keep ask_user for ask_user or missing/invalid results, and continue throwing on
block. Make the default path fail-closed so unexpected or malformed values from
reviewToolPermission do not auto-approve the tool call.
---
Minor comments:
In `@src/main/presenter/agentRuntimePresenter/index.ts`:
- Around line 3852-3858: The auto-approve review is using the stale `messages`
snapshot instead of the live tool-loop state, so update `reviewToolPermission`
in `agentRuntimePresenter` to slice from `conversationMessages` (the array
mutated by `processStream`) when calling `reviewToolPermissionForAutoApprove`.
Keep the same recent-message limit and abort signal, but ensure the reviewer
sees the current tool-execution context rather than the initial
`runStreamForMessage` payload.
In `@src/renderer/src/i18n/da-DK/chat.json`:
- Around line 314-315: The new chat translation entry for autoApprove is still
using the English placeholder text. Update the autoApprove value in the da-DK
chat.json localization to a proper Danish translation, matching the style of
nearby keys like fullAccess, so the i18n bundle contains no literal English for
this label.
In `@src/renderer/src/i18n/da-DK/dialog.json`:
- Around line 89-93: The new deleteMessage strings in the Danish locale are
still in English, so translate the title, description, and confirm values in
dialog.json to Danish to match the rest of the file. Update the deleteMessage
entry consistently with the existing localized keys such as agentTransfer,
keeping the same key structure and replacing only the string values.
In `@src/renderer/src/i18n/de-DE/chat.json`:
- Around line 328-332: The de-DE locale entry for permissionMode contains an
untranslated English string in autoApprove. Update the chat.json translation so
autoApprove matches the surrounding German entries, using the existing
permissionMode key to locate it and replacing the English text with a proper
German translation.
In `@src/renderer/src/i18n/de-DE/dialog.json`:
- Around line 89-93: The deleteMessage strings in the German locale are still in
English, so update the deleteMessage.title, deleteMessage.description, and
deleteMessage.confirm entries in the dialog.json translation block to proper
German text. Keep the same keys and structure, and verify the localized wording
matches the existing dialog message context.
In `@src/renderer/src/i18n/fa-IR/chat.json`:
- Around line 314-315: The permissionMode.autoApprove entry in the fa-IR locale
is still in English, unlike the surrounding translations in the same object.
Update the autoApprove value in the chat.json locale file to a proper Farsi
translation, keeping it consistent with fullAccess and default and using the
same key path reference permissionMode.autoApprove.
In `@src/renderer/src/i18n/fa-IR/dialog.json`:
- Around line 89-93: The fa-IR locale entry for deleteMessage still contains
English strings, so translate deleteMessage.title, deleteMessage.description,
and deleteMessage.confirm into Persian to match the rest of the dialog.json
file. Update the deleteMessage object in the fa-IR translation JSON and keep the
meaning consistent with the existing keys.
In `@src/renderer/src/i18n/fr-FR/chat.json`:
- Around line 314-315: The fr-FR locale has an untranslated value for the
autoApprove key, while nearby entries are localized. Update the chat.json entry
for autoApprove in the French translation file so it uses a proper French phrase
consistent with the surrounding localization strings, keeping the key name
unchanged.
In `@src/renderer/src/i18n/fr-FR/dialog.json`:
- Around line 89-93: The deleteMessage strings in the French locale are still in
English; translate the title, description, and confirm copy in the fr-FR
dialog.json entry. Update the deleteMessage object so its text is proper French
while keeping the same keys and structure used by the locale file.
In `@src/renderer/src/i18n/he-IL/chat.json`:
- Around line 314-315: The Hebrew locale entry for autoApprove is still in
English, so update the chat.json translation to use Hebrew text consistent with
the surrounding i18n strings. Locate the autoApprove key in the he-IL locale
file and replace the English phrase with the proper Hebrew translation, keeping
the existing key structure unchanged.
In `@src/renderer/src/i18n/he-IL/dialog.json`:
- Around line 89-93: The new deleteMessage entries in the Hebrew locale are
still in English; update the title, description, and confirm values in
dialog.json to proper Hebrew and keep the wording consistent with the rest of
the he-IL translations. Use the deleteMessage object as the target to replace
these three strings with localized text.
In `@src/renderer/src/i18n/id-ID/chat.json`:
- Around line 330-331: The Indonesian locale entry for autoApprove is still in
English while neighboring strings in chat.json are translated, so update that
key to an Indonesian phrase consistent with the rest of the file. Locate the
autoApprove field alongside fullAccess in the Indonesian chat translations and
replace the English text with the proper Indonesian translation.
In `@src/renderer/src/i18n/id-ID/dialog.json`:
- Around line 88-93: The deleteMessage strings in the id-ID dialog translation
are still in English and should be localized to Bahasa Indonesia to match the
rest of this file. Update the title, description, and confirm values in the
deleteMessage object in dialog.json with Indonesian translations, keeping the
same keys and structure used by other translated entries like
agentTransfer.deleteTitle.
In `@src/renderer/src/i18n/it-IT/chat.json`:
- Around line 330-331: The `autoApprove` entry in the Italian chat translation
is still using the English placeholder text, so update the `chat.json` locale
value for `autoApprove` to a proper Italian translation consistent with the
other locale files. Locate the `autoApprove` key in
`src/renderer/src/i18n/it-IT/chat.json` and replace the literal English phrase
with the localized Italian string.
In `@src/renderer/src/i18n/it-IT/dialog.json`:
- Around line 89-93: The deleteMessage entries in the Italian locale file are
still in English; update deleteMessage.title, deleteMessage.description, and
deleteMessage.confirm in dialog.json to proper Italian so they match the rest of
the it-IT translations. Use the deleteMessage key group in the locale JSON to
locate and replace these three strings consistently.
In `@src/renderer/src/i18n/ja-JP/chat.json`:
- Around line 314-315: The ja-JP chat locale has an untranslated value for
autoApprove, which is still in English while nearby keys are localized. Update
the autoApprove entry in the Japanese translation file to a proper Japanese
phrase, keeping it consistent with the surrounding localization in chat.json and
the existing i18n key naming.
In `@src/renderer/src/i18n/ja-JP/dialog.json`:
- Around line 88-93: The new deleteMessage strings in the ja-JP dialog locale
are still in English, so localize deleteMessage.title,
deleteMessage.description, and deleteMessage.confirm to Japanese to match the
rest of the file. Update the values in the dialog.json entry for deleteMessage
and keep the same keys so the existing translations continue to resolve
correctly.
In `@src/renderer/src/i18n/ms-MY/chat.json`:
- Around line 330-331: The ms-MY locale entry for autoApprove is still
untranslated and should match the surrounding localized strings. Update the
autoApprove value in chat.json to a Malay translation, using the existing i18n
keys in that section (such as fullAccess) as a reference to keep tone and style
consistent.
In `@src/renderer/src/i18n/ms-MY/dialog.json`:
- Around line 88-93: The deleteMessage entries in the ms-MY dialog locale are
still in English; update the title, description, and confirm strings in the
deleteMessage object to proper Malay so this locale stays consistent with the
rest of the file. Use the deleteMessage keys in dialog.json as the target for
the translation fix and leave the structure unchanged.
In `@src/renderer/src/i18n/pl-PL/dialog.json`:
- Around line 89-93: The deleteMessage strings in the pl-PL dialog locale are
still in English; update deleteMessage.title, deleteMessage.description, and
deleteMessage.confirm in the dialog.json translation entry to Polish. Use the
existing dialog JSON structure and keep the same keys so the localized copy is
applied where deleteMessage is referenced.
In `@src/renderer/src/i18n/pt-BR/chat.json`:
- Around line 312-316: The permissionMode.autoApprove translation in the pt-BR
chat locale is still in English and should be localized consistently with the
other keys in this object. Update the autoApprove value in chat.json to a
Portuguese equivalent, matching the style used by default and fullAccess, and
verify the same key remains correctly translated across related locale files.
In `@src/renderer/src/i18n/pt-BR/dialog.json`:
- Around line 89-93: The pt-BR dialog locale has untranslated `deleteMessage`
strings; update the `deleteMessage.title`, `deleteMessage.description`, and
`deleteMessage.confirm` entries in `dialog.json` to Portuguese, keeping the
existing key structure intact so the UI uses localized copy instead of English.
In `@src/renderer/src/i18n/ru-RU/chat.json`:
- Around line 314-315: The chat locale entry for autoApprove is still in English
in the Russian translation file; update the autoApprove string in the ru-RU
chat.json locale alongside fullAccess so it uses a proper Russian translation
instead of "Approve for me". Keep the key name unchanged and ensure the
translated text matches the surrounding i18n values in this file.
In `@src/renderer/src/i18n/ru-RU/dialog.json`:
- Around line 89-93: The new deleteMessage strings in the Russian locale are
still in English; update the deleteMessage entry in dialog.json to use Russian
translations for title, description, and confirm. Keep the existing structure
and translate the text consistently with the rest of the ru-RU messages so the
locale file is fully localized.
In `@src/renderer/src/i18n/tr-TR/chat.json`:
- Around line 330-331: The permissionMode.autoApprove entry in the Turkish chat
locale is still in English, so update the translation in the chat.json locale
object alongside permissionMode.fullAccess to use the correct Turkish text.
Locate the string value for autoApprove and replace it with a Turkish
translation consistent with the surrounding locale entries.
In `@src/renderer/src/i18n/tr-TR/dialog.json`:
- Around line 89-93: The new deleteMessage copy in dialog.json is still in
English, so localize the title, description, and confirm values to Turkish to
match the rest of the tr-TR file. Update the strings under deleteMessage in the
dialog translation object, keeping the same keys and tone as nearby entries.
Verify the wording is natural Turkish and consistent with the existing
translation style in this i18n file.
In `@src/renderer/src/i18n/vi-VN/chat.json`:
- Around line 328-332: The vi-VN locale entry for permissionMode contains an
untranslated English string in the autoApprove key. Update the autoApprove value
in src/renderer/src/i18n/vi-VN/chat.json to a Vietnamese translation consistent
with the neighboring default and fullAccess entries, and keep the existing
permissionMode key structure unchanged.
In `@src/renderer/src/i18n/vi-VN/dialog.json`:
- Around line 89-93: The new deleteMessage entries in the Vietnamese dialog.json
are still in English, so translate the title, description, and confirm strings
to Vietnamese. Update the deleteMessage block in the vi-VN locale file to match
the existing localization style used by other keys in this file and keep the
same symbol names so the UI reads localized text.
---
Duplicate comments:
In `@src/renderer/src/i18n/es-ES/dialog.json`:
- Around line 89-93: The deleteMessage entries in the es-ES dialog locale are
still in English. Update the title, description, and confirm strings in the
dialog.json translation block to Spanish, matching the existing localization
style used elsewhere in this locale file. Use the deleteMessage key to locate
and replace all three untranslated fields.
---
Nitpick comments:
In `@docs/features/message-delete-confirmation/plan.md`:
- Line 29: The phrasing in the plan note uses “keyboard reachable” as a compound
modifier; update the wording to “keyboard-reachable” in the accessibility
concerns sentence. Make this change in the relevant text around the
message-delete-confirmation plan so the description is hyphenated consistently
and passes static analysis.
In `@src/main/presenter/agentRuntimePresenter/dispatch.ts`:
- Around line 777-901: The auto-review classification in
isReviewableFullAccessToolCall and buildSyntheticPermissionForReview is overly
dependent on tool-name substring matching, which can both over-flag harmless
tools and miss risky ones. Update this logic to use an explicit capability/risk
signal from the tool definition instead of relying on names, and keep the
existing argument-based checks in collectStringValues, extractToolArgPaths, and
extractToolArgCommand only as secondary signals. Use the existing
ToolExecutionContext and toolDef/toolContext fields to locate the call sites and
ensure the permission decision is driven by declared metadata rather than
heuristics.
In `@src/main/presenter/agentSessionPresenter/index.ts`:
- Around line 120-123: The permission-mode normalization logic is duplicated in
both agent presenter modules, so move normalizePermissionMode into a shared
helper and have agentSessionPresenter and agentRuntimePresenter import and use
that single implementation. Keep the existing behavior for PermissionMode values
the same, but centralize the logic in one reusable function so the rule is
maintained in one place.
In `@src/renderer/src/pages/ChatPage.vue`:
- Around line 556-560: The selector-escaping logic for message IDs is duplicated
in the message jump code and in focusPendingSpotlightMessageJump, so extract it
into a shared helper like escapeMessageIdSelector(id) and use that in both
places. Update the currentAnchor.messageId selector building to call the helper,
and reuse the same helper anywhere else the [data-message-id="..."] selector is
constructed so the CSS.escape fallback stays consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: f7d043ca-aa92-4f66-aed7-78516a84169f
📒 Files selected for processing (107)
docs/features/assistant-permission-review-mode/plan.mddocs/features/assistant-permission-review-mode/spec.mddocs/features/assistant-permission-review-mode/tasks.mddocs/features/deepchat-skills-management/plan.mddocs/features/deepchat-skills-management/spec.mddocs/features/deepchat-skills-management/tasks.mddocs/features/message-delete-confirmation/plan.mddocs/features/message-delete-confirmation/spec.mddocs/features/message-delete-confirmation/tasks.mddocs/features/tool-call-review-status-indicator/plan.mddocs/features/tool-call-review-status-indicator/spec.mddocs/features/tool-call-review-status-indicator/tasks.mddocs/issues/assistant-loading-placeholder-delay/plan.mddocs/issues/assistant-loading-placeholder-delay/spec.mddocs/issues/assistant-loading-placeholder-delay/tasks.mddocs/issues/session-restore-scroll-intent/plan.mddocs/issues/session-restore-scroll-intent/spec.mddocs/issues/session-restore-scroll-intent/tasks.mdresources/acp-registry/registry.jsonresources/model-db/providers.jsonsrc/main/presenter/agentRuntimePresenter/dispatch.tssrc/main/presenter/agentRuntimePresenter/index.tssrc/main/presenter/agentRuntimePresenter/types.tssrc/main/presenter/agentSessionPresenter/index.tssrc/main/presenter/memoryPresenter/index.tssrc/main/presenter/memoryPresenter/lifecycle.tssrc/main/presenter/sqlitePresenter/tables/deepchatSessions.tssrc/main/presenter/toolPresenter/index.tssrc/main/routes/index.tssrc/renderer/api/MemoryClient.tssrc/renderer/api/SessionClient.tssrc/renderer/settings/components/MemoryManagerPanel.vuesrc/renderer/settings/components/skills/SkillCard.vuesrc/renderer/settings/components/skills/SkillDetailDialog.vuesrc/renderer/settings/components/skills/SkillsSettings.vuesrc/renderer/src/components/chat/ChatStatusBar.vuesrc/renderer/src/components/chat/MessageListRow.vuesrc/renderer/src/components/chat/messageListItems.tssrc/renderer/src/components/markdown/MarkdownRenderer.vuesrc/renderer/src/components/message/MessageBlockImage.vuesrc/renderer/src/components/message/MessageBlockToolCall.vuesrc/renderer/src/i18n/da-DK/chat.jsonsrc/renderer/src/i18n/da-DK/dialog.jsonsrc/renderer/src/i18n/de-DE/chat.jsonsrc/renderer/src/i18n/de-DE/dialog.jsonsrc/renderer/src/i18n/en-US/chat.jsonsrc/renderer/src/i18n/en-US/dialog.jsonsrc/renderer/src/i18n/es-ES/chat.jsonsrc/renderer/src/i18n/es-ES/dialog.jsonsrc/renderer/src/i18n/fa-IR/chat.jsonsrc/renderer/src/i18n/fa-IR/dialog.jsonsrc/renderer/src/i18n/fr-FR/chat.jsonsrc/renderer/src/i18n/fr-FR/dialog.jsonsrc/renderer/src/i18n/he-IL/chat.jsonsrc/renderer/src/i18n/he-IL/dialog.jsonsrc/renderer/src/i18n/id-ID/chat.jsonsrc/renderer/src/i18n/id-ID/dialog.jsonsrc/renderer/src/i18n/it-IT/chat.jsonsrc/renderer/src/i18n/it-IT/dialog.jsonsrc/renderer/src/i18n/ja-JP/chat.jsonsrc/renderer/src/i18n/ja-JP/dialog.jsonsrc/renderer/src/i18n/ko-KR/chat.jsonsrc/renderer/src/i18n/ko-KR/dialog.jsonsrc/renderer/src/i18n/ms-MY/chat.jsonsrc/renderer/src/i18n/ms-MY/dialog.jsonsrc/renderer/src/i18n/pl-PL/chat.jsonsrc/renderer/src/i18n/pl-PL/dialog.jsonsrc/renderer/src/i18n/pt-BR/chat.jsonsrc/renderer/src/i18n/pt-BR/dialog.jsonsrc/renderer/src/i18n/ru-RU/chat.jsonsrc/renderer/src/i18n/ru-RU/dialog.jsonsrc/renderer/src/i18n/tr-TR/chat.jsonsrc/renderer/src/i18n/tr-TR/dialog.jsonsrc/renderer/src/i18n/vi-VN/chat.jsonsrc/renderer/src/i18n/vi-VN/dialog.jsonsrc/renderer/src/i18n/zh-CN/chat.jsonsrc/renderer/src/i18n/zh-CN/dialog.jsonsrc/renderer/src/i18n/zh-HK/chat.jsonsrc/renderer/src/i18n/zh-HK/dialog.jsonsrc/renderer/src/i18n/zh-TW/chat.jsonsrc/renderer/src/i18n/zh-TW/dialog.jsonsrc/renderer/src/pages/ChatPage.vuesrc/renderer/src/stores/ui/message.tssrc/shared/contracts/common.tssrc/shared/contracts/domainSchemas.tssrc/shared/contracts/routes/memory.routes.tssrc/shared/types/agent-interface.d.tstest/main/presenter/agentRuntimePresenter/agentRuntimePresenter.test.tstest/main/presenter/agentRuntimePresenter/dispatch.test.tstest/main/presenter/agentSessionPresenter/integration.test.tstest/main/presenter/memoryLifecycle.test.tstest/main/routes/contracts.test.tstest/main/routes/dispatcher.test.tstest/main/routes/memoryDto.test.tstest/renderer/api/clients.test.tstest/renderer/components/ChatPage.test.tstest/renderer/components/ChatStatusBar.test.tstest/renderer/components/MarkdownRenderer.test.tstest/renderer/components/MemoryManagerDialog.test.tstest/renderer/components/MessageListRow.test.tstest/renderer/components/NewThreadPage.onboarding.test.tstest/renderer/components/NewThreadPage.test.tstest/renderer/components/SkillSyncSettings.test.tstest/renderer/components/SkillsSettingsAgentScope.test.tstest/renderer/components/message/MessageBlockMedia.test.tstest/renderer/components/message/MessageBlockToolCall.test.tstest/renderer/stores/messageStore.test.ts
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/main/presenter/agentRuntimePresenter/dispatch.ts (1)
916-921: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winOnly show
reviewingwhen a reviewer hook exists.This toggles and flushes the reviewing state before checking whether
hooks.reviewToolPermissionis actually present. In the no-hook path the function immediately falls back to'ask_user', so the UI can briefly show a review that never started.Suggested fix
}): Promise<'auto_allow' | 'ask_user'> { const { hooks, io, state, rendererFlushHandle, execution, permission, reason } = params - if (setToolCallAutoApproveReviewing(state.blocks, execution.completedToolCall.id, true)) { + const hasReviewer = Boolean(hooks?.reviewToolPermission) + if (hasReviewer && setToolCallAutoApproveReviewing(state.blocks, execution.completedToolCall.id, true)) { state.dirty = true rendererFlushHandle.flush() } try { const result = await hooks?.reviewToolPermission?.({ @@ } finally { - if (setToolCallAutoApproveReviewing(state.blocks, execution.completedToolCall.id, false)) { + if ( + hasReviewer && + setToolCallAutoApproveReviewing(state.blocks, execution.completedToolCall.id, false) + ) { state.dirty = true rendererFlushHandle.flush() } }Also applies to: 942-944
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/presenter/agentRuntimePresenter/dispatch.ts` around lines 916 - 921, The reviewing state is being set and flushed before confirming that hooks.reviewToolPermission exists, which can briefly show a review UI in the no-hook path. Update the dispatch flow in the reviewToolPermission handling so the setToolCallAutoApproveReviewing call and rendererFlushHandle.flush only happen after verifying the reviewer hook is present, keeping the reviewing state gated to the actual hook-driven path. Use the surrounding dispatch logic and hooks.reviewToolPermission branch to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/main/presenter/agentRuntimePresenter/dispatch.ts`:
- Around line 916-921: The reviewing state is being set and flushed before
confirming that hooks.reviewToolPermission exists, which can briefly show a
review UI in the no-hook path. Update the dispatch flow in the
reviewToolPermission handling so the setToolCallAutoApproveReviewing call and
rendererFlushHandle.flush only happen after verifying the reviewer hook is
present, keeping the reviewing state gated to the actual hook-driven path. Use
the surrounding dispatch logic and hooks.reviewToolPermission branch to locate
the change.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 10f1a278-f244-4f2e-9c7c-c0e690797a7e
📒 Files selected for processing (4)
src/main/presenter/agentRuntimePresenter/dispatch.tssrc/renderer/src/pages/ChatPage.vuetest/main/presenter/agentRuntimePresenter/dispatch.test.tstest/renderer/components/ChatPage.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/renderer/src/pages/ChatPage.vue
- test/renderer/components/ChatPage.test.ts
Summary by CodeRabbit
New Features
Bug Fixes
Documentation