From 6cd71bdfe5b12067dcea123fb7bed216b50abf75 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Fri, 29 May 2026 12:08:01 +0300 Subject: [PATCH] feat: turn Explore into a full /explore command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Promote the last plain-prompt draft chip into a proper /explore command so all draft welcome presets are now commands. Its hidden prompt investigates the repository and gives a structured orientation — big picture, main modules, how they connect, conventions, and where to start — instead of a file-by-file dump. Follows the established pattern: visible + hidden magic prompts wired into command autocomplete, the submit handler, the draft chip, and the Magic Prompts settings page, with i18n across all locales. Drops the now-unused explore prompt string. --- packages/ui/src/components/chat/ChatInput.tsx | 26 +++++++++++++++-- .../components/chat/CommandAutocomplete.tsx | 8 +++++ .../magic-prompts/MagicPromptsPage.tsx | 8 +++++ .../magic-prompts/MagicPromptsSidebar.tsx | 1 + .../ui/src/lib/i18n/messages/en.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/en.ts | 3 +- .../ui/src/lib/i18n/messages/es.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/es.ts | 3 +- .../ui/src/lib/i18n/messages/ko.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/ko.ts | 3 +- .../ui/src/lib/i18n/messages/pl.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/pl.ts | 3 +- .../src/lib/i18n/messages/pt-BR.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/pt-BR.ts | 3 +- .../ui/src/lib/i18n/messages/uk.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/uk.ts | 3 +- .../src/lib/i18n/messages/zh-CN.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/zh-CN.ts | 3 +- .../src/lib/i18n/messages/zh-TW.settings.ts | 3 ++ packages/ui/src/lib/i18n/messages/zh-TW.ts | 3 +- packages/ui/src/lib/magicPrompts.ts | 29 +++++++++++++++++++ 21 files changed, 110 insertions(+), 10 deletions(-) diff --git a/packages/ui/src/components/chat/ChatInput.tsx b/packages/ui/src/components/chat/ChatInput.tsx index 66291768..93811885 100644 --- a/packages/ui/src/components/chat/ChatInput.tsx +++ b/packages/ui/src/components/chat/ChatInput.tsx @@ -99,7 +99,7 @@ type DraftPreset = { command?: string; }; const DRAFT_PRESETS: readonly DraftPreset[] = [ - { id: 'explore', icon: 'compass-3', labelKey: 'chat.draftPresets.explore.label', promptKey: 'chat.draftPresets.explore.prompt' }, + { id: 'explore', icon: 'compass-3', labelKey: 'chat.draftPresets.explore.label', command: '/explore' }, { id: 'catchup', icon: 'history', labelKey: 'chat.draftPresets.catchup.label', command: '/catch-up' }, { id: 'weigh', icon: 'scales-3', labelKey: 'chat.draftPresets.weigh.label', command: '/weigh' }, { id: 'plan', icon: 'survey', labelKey: 'chat.draftPresets.plan.label', command: '/plan-feature' }, @@ -1124,7 +1124,7 @@ const ChatInputComponent: React.FC = ({ onOpenSettings, scrollTo const availableSkills = useSkillsStore((s) => s.skills); const knownSlashNames = React.useMemo(() => { const names = new Set([ - 'init', 'review', 'undo', 'redo', 'timeline', 'compact', 'summary', 'workspace-review', 'plan-feature', 'catch-up', 'debug', 'weigh', + 'init', 'review', 'undo', 'redo', 'timeline', 'compact', 'summary', 'workspace-review', 'plan-feature', 'catch-up', 'debug', 'weigh', 'explore', ]); for (const command of availableCommands) names.add(command.name.toLowerCase()); for (const skill of availableSkills) names.add(skill.name.toLowerCase()); @@ -2040,6 +2040,28 @@ const ChatInputComponent: React.FC = ({ onOpenSettings, scrollTo } return; } + else if (commandName === 'explore' && (currentSessionId || newSessionDraftOpen)) { + try { + await sessionActions.waitForConnectionOrThrow(); + const visibleText = await renderMagicPrompt('session.explore.visible'); + const instructionsText = await renderMagicPrompt('session.explore.instructions'); + await sendMessage( + visibleText, + providerIdToSend, + modelIdToSend, + agentNameToSend, + [], + agentMentionName, + [{ text: instructionsText, synthetic: true }], + variantToSend, + inputMode, + ); + scrollToBottom?.(); + } catch (error) { + toast.error(error instanceof Error ? error.message : t('chat.chatInput.toast.exploreFailed')); + } + return; + } } const currentSessionDirectory = currentSessionId diff --git a/packages/ui/src/components/chat/CommandAutocomplete.tsx b/packages/ui/src/components/chat/CommandAutocomplete.tsx index 11e01707..eeed9c21 100644 --- a/packages/ui/src/components/chat/CommandAutocomplete.tsx +++ b/packages/ui/src/components/chat/CommandAutocomplete.tsx @@ -168,6 +168,10 @@ export const CommandAutocomplete = React.forwardRef = { { id: 'session.weigh.instructions', titleKey: 'settings.magicPrompts.page.block.instructions' }, ], }, + 'session.explore': { + titleKey: 'settings.magicPrompts.page.group.sessionExplore.title', + descriptionKey: 'settings.magicPrompts.page.group.sessionExplore.description', + blocks: [ + { id: 'session.explore.visible', titleKey: 'settings.magicPrompts.page.block.visiblePrompt' }, + { id: 'session.explore.instructions', titleKey: 'settings.magicPrompts.page.block.instructions' }, + ], + }, 'session.fusion': { titleKey: 'settings.magicPrompts.page.group.sessionFusion.title', descriptionKey: 'settings.magicPrompts.page.group.sessionFusion.description', diff --git a/packages/ui/src/components/sections/magic-prompts/MagicPromptsSidebar.tsx b/packages/ui/src/components/sections/magic-prompts/MagicPromptsSidebar.tsx index 93fb8aae..ba1d2a96 100644 --- a/packages/ui/src/components/sections/magic-prompts/MagicPromptsSidebar.tsx +++ b/packages/ui/src/components/sections/magic-prompts/MagicPromptsSidebar.tsx @@ -45,6 +45,7 @@ export const MagicPromptsSidebar: React.FC = ({ onItem { groupKey: 'settings.magicPrompts.sidebar.group.session', items: [ + { id: 'session.explore', titleKey: 'settings.magicPrompts.sidebar.item.sessionExplore' }, { id: 'session.summary', titleKey: 'settings.magicPrompts.sidebar.item.sessionSummary' }, { id: 'session.review', titleKey: 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview' }, { id: 'session.plan', titleKey: 'settings.magicPrompts.sidebar.item.sessionFeaturePlan' }, diff --git a/packages/ui/src/lib/i18n/messages/en.settings.ts b/packages/ui/src/lib/i18n/messages/en.settings.ts index 301bfc09..fcf55e69 100644 --- a/packages/ui/src/lib/i18n/messages/en.settings.ts +++ b/packages/ui/src/lib/i18n/messages/en.settings.ts @@ -223,6 +223,7 @@ export const settingsDict = { 'settings.magicPrompts.sidebar.item.planImplement': 'Implement Plan', 'settings.magicPrompts.sidebar.item.sessionSummary': 'Session Summary', 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Workspace Review', + 'settings.magicPrompts.sidebar.item.sessionExplore': 'Codebase Tour', 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': 'Feature Planning', 'settings.magicPrompts.sidebar.item.sessionCatchUp': 'Catch Up', 'settings.magicPrompts.sidebar.item.sessionDebug': 'Debugging', @@ -1689,6 +1690,8 @@ export const settingsDict = { 'settings.magicPrompts.page.group.sessionSummary.title': 'Session Summary', 'settings.magicPrompts.page.group.sessionSummary.description': 'Prompts used by the /summary slash command: visible user message + hidden instructions. Non-destructive - does not compact session history.', 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Workspace Review', + 'settings.magicPrompts.page.group.sessionExplore.title': 'Codebase Tour', + 'settings.magicPrompts.page.group.sessionExplore.description': 'Prompts used by the /explore slash command: visible user message + hidden instructions. Investigates the repository and gives a structured orientation — the big picture, main modules, how they connect, and where to start — rather than a file-by-file dump.', 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': 'Prompts used by the /workspace-review slash command: visible user message + hidden instructions. Reviews current workspace changes for high-signal issues only.', 'settings.magicPrompts.page.group.sessionFeaturePlan.title': 'Feature Planning', 'settings.magicPrompts.page.group.sessionFeaturePlan.description': 'Prompts used by the /plan-feature slash command: visible user message + hidden instructions. Runs a guided dialogue that researches the code and asks clarifying questions in small batches before producing an implementation plan.', diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index 96805ac0..2797800e 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -1454,7 +1454,6 @@ export const dict = { 'chat.emptyState.draftTitle': 'What are we working on?', 'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?', 'chat.draftPresets.explore.label': 'Explore the codebase', - 'chat.draftPresets.explore.prompt': 'Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.', 'chat.draftPresets.catchup.label': 'Catch me up', 'chat.draftPresets.weigh.label': 'Weigh my options', 'chat.draftPresets.plan.label': 'Start feature planning', @@ -1524,6 +1523,7 @@ export const dict = { 'chat.commandAutocomplete.command.catchUpDescription': 'Re-establish context: what you were doing and where to pick up.', 'chat.commandAutocomplete.command.debugDescription': 'Guided root-cause investigation for a bug before proposing a fix.', 'chat.commandAutocomplete.command.weighDescription': 'Weigh 2-3 approaches with trade-offs and a recommendation before you commit.', + 'chat.commandAutocomplete.command.exploreDescription': 'Get oriented in this codebase: a high-level tour of the architecture and main parts.', 'chat.commandAutocomplete.badge.skill': 'skill', 'chat.commandAutocomplete.badge.command': 'command', 'chat.commandAutocomplete.badge.system': 'system', @@ -1643,6 +1643,7 @@ export const dict = { 'chat.chatInput.toast.catchUpFailed': 'Failed to catch up', 'chat.chatInput.toast.debugFailed': 'Failed to start debugging', 'chat.chatInput.toast.weighFailed': 'Failed to weigh options', + 'chat.chatInput.toast.exploreFailed': 'Failed to start the tour', 'chat.chatInput.toast.attachmentsTooLarge': 'Attachments are too large to send. Please try reducing the number or size of images.', 'chat.chatInput.toast.sendAttachmentsFailed': 'Failed to send attachments. Try fewer files or smaller images.', 'chat.chatInput.toast.messageSendFailed': 'Message failed to send. Attachments restored.', diff --git a/packages/ui/src/lib/i18n/messages/es.settings.ts b/packages/ui/src/lib/i18n/messages/es.settings.ts index ca1b40ea..a53b3751 100644 --- a/packages/ui/src/lib/i18n/messages/es.settings.ts +++ b/packages/ui/src/lib/i18n/messages/es.settings.ts @@ -190,6 +190,7 @@ export const settingsDict = { "settings.magicPrompts.sidebar.item.planImplement": "Implementar plan", "settings.magicPrompts.sidebar.item.sessionSummary": "Resumen de sesión", "settings.magicPrompts.sidebar.item.sessionWorkspaceReview": "Revisión del espacio de trabajo", + "settings.magicPrompts.sidebar.item.sessionExplore": "Recorrido del código", "settings.magicPrompts.sidebar.item.sessionFeaturePlan": "Planificación de funciones", "settings.magicPrompts.sidebar.item.sessionCatchUp": "Ponerse al día", "settings.magicPrompts.sidebar.item.sessionDebug": "Depuración", @@ -1656,6 +1657,8 @@ export const settingsDict = { "settings.magicPrompts.page.group.sessionSummary.title": "Resumen de sesión", "settings.magicPrompts.page.group.sessionSummary.description": "Prompts usados por el comando /summary: mensaje visible del usuario + instrucciones ocultas. No destructivo: no compacta el historial de la sesión.", "settings.magicPrompts.page.group.sessionWorkspaceReview.title": "Revisión del espacio de trabajo", + "settings.magicPrompts.page.group.sessionExplore.title": "Recorrido del código", + "settings.magicPrompts.page.group.sessionExplore.description": "Prompts usados por el comando /explore: mensaje visible del usuario + instrucciones ocultas. Investiga el repositorio y ofrece una orientación estructurada — la visión general, los módulos principales, cómo se conectan y por dónde empezar — en lugar de un listado archivo por archivo.", "settings.magicPrompts.page.group.sessionWorkspaceReview.description": "Prompts usados por el comando /workspace-review: mensaje visible del usuario + instrucciones ocultas. Revisa los cambios actuales del espacio de trabajo solo para problemas de alta señal.", "settings.magicPrompts.page.group.sessionFeaturePlan.title": "Planificación de funciones", "settings.magicPrompts.page.group.sessionFeaturePlan.description": "Prompts usados por el comando /plan-feature: mensaje visible del usuario + instrucciones ocultas. Ejecuta un diálogo guiado que investiga el código y hace preguntas aclaratorias en lotes pequeños antes de producir un plan de implementación.", diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index 8f4c36d7..f6cce957 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -1420,7 +1420,6 @@ export const dict: Record = { "chat.emptyState.draftTitle": "What are we working on?", "chat.emptyState.draftTitleWithProject": "What are we working on in {project}?", "chat.draftPresets.explore.label": "Explore the codebase", - "chat.draftPresets.explore.prompt": "Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.", "chat.draftPresets.catchup.label": "Catch me up", "chat.draftPresets.weigh.label": "Weigh my options", "chat.draftPresets.plan.label": "Start feature planning", @@ -1490,6 +1489,7 @@ export const dict: Record = { "chat.commandAutocomplete.command.catchUpDescription": "Recupera el contexto: qué estabas haciendo y por dónde continuar.", "chat.commandAutocomplete.command.debugDescription": "Investigación guiada de la causa raíz de un error antes de proponer una solución.", "chat.commandAutocomplete.command.weighDescription": "Compara 2-3 enfoques con sus ventajas y desventajas y una recomendación antes de decidir.", + "chat.commandAutocomplete.command.exploreDescription": "Oriéntate en este código: un recorrido general de la arquitectura y las partes principales.", "chat.commandAutocomplete.badge.skill": "habilidad", "chat.commandAutocomplete.badge.command": "comando", "chat.commandAutocomplete.badge.system": "sistema", @@ -1609,6 +1609,7 @@ export const dict: Record = { "chat.chatInput.toast.catchUpFailed": "No se pudo recuperar el contexto", "chat.chatInput.toast.debugFailed": "No se pudo iniciar la depuración", "chat.chatInput.toast.weighFailed": "No se pudieron comparar las opciones", + "chat.chatInput.toast.exploreFailed": "No se pudo iniciar el recorrido", "chat.chatInput.toast.attachmentsTooLarge": "Los adjuntos son demasiado grandes para enviar. Intenta reducir la cantidad o el tamaño de las imágenes.", "chat.chatInput.toast.sendAttachmentsFailed": "No se pudieron enviar los adjuntos. Intenta con menos archivos o imágenes más pequeñas.", "chat.chatInput.toast.messageSendFailed": "El mensaje no se pudo enviar. Los adjuntos se restauraron.", diff --git a/packages/ui/src/lib/i18n/messages/ko.settings.ts b/packages/ui/src/lib/i18n/messages/ko.settings.ts index 1bb713a2..060d66e6 100644 --- a/packages/ui/src/lib/i18n/messages/ko.settings.ts +++ b/packages/ui/src/lib/i18n/messages/ko.settings.ts @@ -190,6 +190,7 @@ export const settingsDict = { 'settings.magicPrompts.sidebar.item.planImplement': '계획 구현', 'settings.magicPrompts.sidebar.item.sessionSummary': '세션 요약', 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': '워크스페이스 리뷰', + 'settings.magicPrompts.sidebar.item.sessionExplore': '코드베이스 둘러보기', 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': '기능 계획', 'settings.magicPrompts.sidebar.item.sessionCatchUp': '따라잡기', 'settings.magicPrompts.sidebar.item.sessionDebug': '디버깅', @@ -1656,6 +1657,8 @@ export const settingsDict = { 'settings.magicPrompts.page.group.sessionSummary.title': '세션 요약', 'settings.magicPrompts.page.group.sessionSummary.description': '/summary slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 비파괴적이며 세션 기록을 압축하지 않습니다.', 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '워크스페이스 리뷰', + 'settings.magicPrompts.page.group.sessionExplore.title': '코드베이스 둘러보기', + 'settings.magicPrompts.page.group.sessionExplore.description': '/explore slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 저장소를 조사하여 파일별 나열이 아니라 큰 그림, 주요 모듈, 연결 방식, 시작점 등 구조적인 방향을 제시합니다.', 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '/workspace-review slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 현재 workspace 변경 사항에서 중요한 문제만 리뷰합니다.', 'settings.magicPrompts.page.group.sessionFeaturePlan.title': '기능 계획', 'settings.magicPrompts.page.group.sessionFeaturePlan.description': '/plan-feature slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 코드를 조사하고 작은 묶음으로 명확화 질문을 한 뒤 구현 계획을 만드는 가이드 대화를 실행합니다.', diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index 07eefc52..d5c7f43a 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -1456,7 +1456,6 @@ export const dict: Record = { 'chat.emptyState.draftTitle': 'What are we working on?', 'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?', 'chat.draftPresets.explore.label': 'Explore the codebase', - 'chat.draftPresets.explore.prompt': 'Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.', 'chat.draftPresets.catchup.label': 'Catch me up', 'chat.draftPresets.weigh.label': 'Weigh my options', 'chat.draftPresets.plan.label': 'Start feature planning', @@ -1526,6 +1525,7 @@ export const dict: Record = { 'chat.commandAutocomplete.command.catchUpDescription': '맥락을 다시 파악합니다: 무엇을 하고 있었고 어디서 이어서 할지.', 'chat.commandAutocomplete.command.debugDescription': '수정안을 제시하기 전에 버그의 근본 원인을 단계적으로 조사합니다.', 'chat.commandAutocomplete.command.weighDescription': '결정하기 전에 2~3가지 접근 방식을 장단점과 함께 비교하고 추천을 제시합니다.', + 'chat.commandAutocomplete.command.exploreDescription': '코드베이스에 대한 방향을 잡습니다: 아키텍처와 주요 부분을 한눈에 살펴봅니다.', 'chat.commandAutocomplete.badge.skill': '스킬', 'chat.commandAutocomplete.badge.command': '명령', 'chat.commandAutocomplete.badge.system': 'system', @@ -1643,6 +1643,7 @@ export const dict: Record = { 'chat.chatInput.toast.catchUpFailed': '컨텍스트를 불러오지 못했습니다', 'chat.chatInput.toast.debugFailed': '디버깅을 시작하지 못했습니다', 'chat.chatInput.toast.weighFailed': '옵션을 비교하지 못했습니다', + 'chat.chatInput.toast.exploreFailed': '둘러보기를 시작하지 못했습니다', 'chat.chatInput.toast.attachmentsTooLarge': '첨부 파일이 너무 커서 보낼 수 없습니다. 이미지 수나 크기를 줄여 보세요.', 'chat.chatInput.toast.sendAttachmentsFailed': '첨부 파일 전송 실패. 파일 수나 이미지 크기를 줄여 보세요.', 'chat.chatInput.toast.messageSendFailed': '메시지 전송에 실패했습니다. 첨부 파일을 복원했습니다.', diff --git a/packages/ui/src/lib/i18n/messages/pl.settings.ts b/packages/ui/src/lib/i18n/messages/pl.settings.ts index 5d0805e3..4743dee1 100644 --- a/packages/ui/src/lib/i18n/messages/pl.settings.ts +++ b/packages/ui/src/lib/i18n/messages/pl.settings.ts @@ -288,6 +288,8 @@ export const settingsDict = { 'settings.magicPrompts.page.group.sessionWeigh.title': 'Rozważanie opcji', 'settings.magicPrompts.page.group.sessionWeigh.description': 'Prompty używane przez polecenie /weigh: widoczna wiadomość użytkownika + ukryte instrukcje. Bada kod, a następnie przedstawia 2-3 różne podejścia z kompromisami i rekomendacją — bez pisania planu ani kodu.', 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Przegląd obszaru roboczego', + 'settings.magicPrompts.page.group.sessionExplore.title': 'Przegląd bazy kodu', + 'settings.magicPrompts.page.group.sessionExplore.description': 'Prompty używane przez polecenie /explore: widoczna wiadomość użytkownika + ukryte instrukcje. Bada repozytorium i daje uporządkowaną orientację — ogólny obraz, główne moduły, jak się łączą i od czego zacząć — zamiast zrzutu plik po pliku.', 'settings.magicPrompts.page.group.sessionFusion.title': 'Fusion', 'settings.magicPrompts.page.group.sessionFusion.description': 'Prompty używane do łączenia wyników multi-run w jedną końcową odpowiedź: widoczna wiadomość użytkownika + ukryte instrukcje przed wynikami źródłowymi.', 'settings.magicPrompts.page.loading.aria': 'Ładowanie', @@ -324,6 +326,7 @@ export const settingsDict = { 'settings.magicPrompts.sidebar.item.planTodo': 'Planowanie Todo', 'settings.magicPrompts.sidebar.item.sessionSummary': 'Podsumowanie Sesji', 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Przegląd obszaru roboczego', + 'settings.magicPrompts.sidebar.item.sessionExplore': 'Przegląd bazy kodu', 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': 'Planowanie funkcji', 'settings.magicPrompts.sidebar.item.sessionCatchUp': 'Nadrobienie kontekstu', 'settings.magicPrompts.sidebar.item.sessionDebug': 'Debugowanie', diff --git a/packages/ui/src/lib/i18n/messages/pl.ts b/packages/ui/src/lib/i18n/messages/pl.ts index 1e41cd1d..284aacf7 100644 --- a/packages/ui/src/lib/i18n/messages/pl.ts +++ b/packages/ui/src/lib/i18n/messages/pl.ts @@ -446,7 +446,6 @@ export const dict: Record = { 'chat.emptyState.draftTitle': 'What are we working on?', 'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?', 'chat.draftPresets.explore.label': 'Explore the codebase', - 'chat.draftPresets.explore.prompt': 'Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.', 'chat.draftPresets.catchup.label': 'Catch me up', 'chat.draftPresets.weigh.label': 'Weigh my options', 'chat.draftPresets.plan.label': 'Start feature planning', @@ -515,6 +514,7 @@ export const dict: Record = { 'chat.commandAutocomplete.command.catchUpDescription': 'Przywróć kontekst: nad czym pracowałeś i od czego kontynuować.', 'chat.commandAutocomplete.command.debugDescription': 'Prowadzone badanie pierwotnej przyczyny błędu przed zaproponowaniem poprawki.', 'chat.commandAutocomplete.command.weighDescription': 'Rozważ 2-3 podejścia z kompromisami i rekomendacją, zanim się zdecydujesz.', + 'chat.commandAutocomplete.command.exploreDescription': 'Zorientuj się w bazie kodu: ogólny przegląd architektury i głównych części.', 'chat.commandAutocomplete.badge.skill': 'skill', 'chat.commandAutocomplete.badge.command': 'polecenie', 'chat.commandAutocomplete.badge.system': 'system', @@ -924,6 +924,7 @@ export const dict: Record = { 'chat.chatInput.toast.catchUpFailed': 'Nie udało się przywrócić kontekstu', 'chat.chatInput.toast.debugFailed': 'Nie udało się rozpocząć debugowania', 'chat.chatInput.toast.weighFailed': 'Nie udało się rozważyć opcji', + 'chat.chatInput.toast.exploreFailed': 'Nie udało się rozpocząć przeglądu', 'chat.chatInput.toast.sendAttachmentsFailed': 'Nie udało się wysłać załączników. Spróbuj użyć mniejszej liczby plików lub mniejszych obrazów.', 'chat.chatInput.toast.someFilesSkipped': 'Pominięto niektóre pliki:\n{summary}', 'chat.chatInput.toast.summaryFailed': 'Nie udało się wygenerować podsumowania', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts b/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts index ebb7f486..eefbcfa6 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts @@ -190,6 +190,7 @@ export const settingsDict = { "settings.magicPrompts.sidebar.item.planImplement": "Implementar plano", "settings.magicPrompts.sidebar.item.sessionSummary": "Resumo de sessão", "settings.magicPrompts.sidebar.item.sessionWorkspaceReview": "Revisão do workspace", + "settings.magicPrompts.sidebar.item.sessionExplore": "Tour do código", "settings.magicPrompts.sidebar.item.sessionFeaturePlan": "Planejamento de funcionalidade", "settings.magicPrompts.sidebar.item.sessionCatchUp": "Retomada de contexto", "settings.magicPrompts.sidebar.item.sessionDebug": "Depuração", @@ -1656,6 +1657,8 @@ export const settingsDict = { "settings.magicPrompts.page.group.sessionSummary.title": "Resumo de sessão", "settings.magicPrompts.page.group.sessionSummary.description": "Prompts usados pelo comando /summary: mensagem visível do usuário + instruções ocultas. Não destrutivo: não compacta o histórico da sessão.", "settings.magicPrompts.page.group.sessionWorkspaceReview.title": "Revisão do workspace", + "settings.magicPrompts.page.group.sessionExplore.title": "Tour do código", + "settings.magicPrompts.page.group.sessionExplore.description": "Prompts usados pelo comando /explore: mensagem visível do usuário + instruções ocultas. Investiga o repositório e dá uma orientação estruturada — o panorama geral, os módulos principais, como se conectam e por onde começar — em vez de uma listagem arquivo por arquivo.", "settings.magicPrompts.page.group.sessionWorkspaceReview.description": "Prompts usados pelo comando /workspace-review: mensagem visível do usuário + instruções ocultas. Revise apenas problemas importantes nas alterações atuais do workspace.", "settings.magicPrompts.page.group.sessionFeaturePlan.title": "Planejamento de funcionalidade", "settings.magicPrompts.page.group.sessionFeaturePlan.description": "Prompts usados pelo comando /plan-feature: mensagem visível do usuário + instruções ocultas. Executa um diálogo guiado que investiga o código e faz perguntas de esclarecimento em pequenos lotes antes de produzir um plano de implementação.", diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index 4fbbc9bd..9571cccc 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -1420,7 +1420,6 @@ export const dict: Record = { "chat.emptyState.draftTitle": "What are we working on?", "chat.emptyState.draftTitleWithProject": "What are we working on in {project}?", "chat.draftPresets.explore.label": "Explore the codebase", - "chat.draftPresets.explore.prompt": "Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.", "chat.draftPresets.catchup.label": "Catch me up", "chat.draftPresets.weigh.label": "Weigh my options", "chat.draftPresets.plan.label": "Start feature planning", @@ -1490,6 +1489,7 @@ export const dict: Record = { "chat.commandAutocomplete.command.catchUpDescription": "Retome o contexto: o que você estava fazendo e por onde continuar.", "chat.commandAutocomplete.command.debugDescription": "Investigação guiada da causa raiz de um bug antes de propor uma correção.", "chat.commandAutocomplete.command.weighDescription": "Compare 2-3 abordagens com seus prós e contras e uma recomendação antes de decidir.", + "chat.commandAutocomplete.command.exploreDescription": "Oriente-se neste código: um tour geral pela arquitetura e pelas partes principais.", "chat.commandAutocomplete.badge.skill": "habilidade", "chat.commandAutocomplete.badge.command": "comando", "chat.commandAutocomplete.badge.system": "sistema", @@ -1609,6 +1609,7 @@ export const dict: Record = { "chat.chatInput.toast.catchUpFailed": "Não foi possível retomar o contexto", "chat.chatInput.toast.debugFailed": "Não foi possível iniciar a depuração", "chat.chatInput.toast.weighFailed": "Não foi possível comparar as opções", + "chat.chatInput.toast.exploreFailed": "Não foi possível iniciar o tour", "chat.chatInput.toast.attachmentsTooLarge": "Os anexos são grandes demais para enviar. Tente reduzir a quantidade ou o tamanho das imagens.", "chat.chatInput.toast.sendAttachmentsFailed": "Não foi possível enviar os anexos. Tente com menos arquivos ou imagens menores.", "chat.chatInput.toast.messageSendFailed": "A mensagem não pôde ser enviada. Os anexos foram restaurados.", diff --git a/packages/ui/src/lib/i18n/messages/uk.settings.ts b/packages/ui/src/lib/i18n/messages/uk.settings.ts index d787b0c8..baa6d0ea 100644 --- a/packages/ui/src/lib/i18n/messages/uk.settings.ts +++ b/packages/ui/src/lib/i18n/messages/uk.settings.ts @@ -190,6 +190,7 @@ export const settingsDict = { "settings.magicPrompts.sidebar.item.planImplement": "Реалізувати план", "settings.magicPrompts.sidebar.item.sessionSummary": "Підсумок сесії", "settings.magicPrompts.sidebar.item.sessionWorkspaceReview": "Огляд робочого простору", + "settings.magicPrompts.sidebar.item.sessionExplore": "Огляд кодової бази", "settings.magicPrompts.sidebar.item.sessionFeaturePlan": "Планування фічі", "settings.magicPrompts.sidebar.item.sessionCatchUp": "Повернення в контекст", "settings.magicPrompts.sidebar.item.sessionDebug": "Дебаг", @@ -1656,6 +1657,8 @@ export const settingsDict = { "settings.magicPrompts.page.group.sessionSummary.title": "Підсумок сесії", "settings.magicPrompts.page.group.sessionSummary.description": "Промпти, які використовуються командою /summary: видиме повідомлення користувача + приховані інструкції. Неруйнівний – не стискає історію сесії.", "settings.magicPrompts.page.group.sessionWorkspaceReview.title": "Огляд робочого простору", + "settings.magicPrompts.page.group.sessionExplore.title": "Огляд кодової бази", + "settings.magicPrompts.page.group.sessionExplore.description": "Промпти, які використовуються командою /explore: видиме повідомлення користувача + приховані інструкції. Досліджує репозиторій і дає структуровану орієнтацію — загальна картина, основні модулі, як вони пов'язані й звідки почати — а не дамп файл за файлом.", "settings.magicPrompts.page.group.sessionWorkspaceReview.description": "Промпти, які використовуються командою /workspace-review: видиме повідомлення користувача + приховані інструкції. Переглядає поточні зміни робочого простору лише для проблем із сильним сигналом.", "settings.magicPrompts.page.group.sessionFeaturePlan.title": "Планування фічі", "settings.magicPrompts.page.group.sessionFeaturePlan.description": "Промпти, які використовуються командою /plan-feature: видиме повідомлення користувача + приховані інструкції. Запускає кероване діалогове планування — досліджує код і ставить уточнюючі запитання невеликими батчами, перш ніж скласти план імплементації.", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index c1821502..7caaaab7 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -1420,7 +1420,6 @@ export const dict: Record = { "chat.emptyState.draftTitle": "Над чим працюємо?", "chat.emptyState.draftTitleWithProject": "Над чим працюємо в {project}?", "chat.draftPresets.explore.label": "Огляд кодової бази", - "chat.draftPresets.explore.prompt": "Зроби високорівневий огляд цієї кодової бази — архітектуру, основні модулі та як вони пов'язані між собою.", "chat.draftPresets.catchup.label": "Повернутись у контекст", "chat.draftPresets.weigh.label": "Зважити варіанти", "chat.draftPresets.plan.label": "Розпочати планування фічі", @@ -1490,6 +1489,7 @@ export const dict: Record = { "chat.commandAutocomplete.command.catchUpDescription": "Повернутись у контекст: над чим працювали і звідки продовжити.", "chat.commandAutocomplete.command.debugDescription": "Кероване дослідження першопричини бага перед тим, як пропонувати фікс.", "chat.commandAutocomplete.command.weighDescription": "Зважити 2-3 підходи з trade-offs і рекомендацією перш ніж братися до роботи.", + "chat.commandAutocomplete.command.exploreDescription": "Зорієнтуватись у кодовій базі: високорівневий тур архітектурою й основними частинами.", "chat.commandAutocomplete.badge.skill": "навичка", "chat.commandAutocomplete.badge.command": "команда", "chat.commandAutocomplete.badge.system": "система", @@ -1609,6 +1609,7 @@ export const dict: Record = { "chat.chatInput.toast.catchUpFailed": "Не вдалося зібрати контекст", "chat.chatInput.toast.debugFailed": "Не вдалося розпочати дебаг", "chat.chatInput.toast.weighFailed": "Не вдалося зважити варіанти", + "chat.chatInput.toast.exploreFailed": "Не вдалося розпочати огляд", "chat.chatInput.toast.attachmentsTooLarge": "Вкладені файли завеликі для надсилання. Спробуйте зменшити кількість або розмір зображень.", "chat.chatInput.toast.sendAttachmentsFailed": "Не вдалося надіслати вкладення. Спробуйте зменшити кількість файлів або зображень.", "chat.chatInput.toast.messageSendFailed": "Не вдалося надіслати повідомлення. Вкладення відновлено.", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts b/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts index e9bb46c1..aa54b0eb 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts @@ -190,6 +190,7 @@ export const settingsDict = { 'settings.magicPrompts.sidebar.item.planImplement': '执行计划', 'settings.magicPrompts.sidebar.item.sessionSummary': '会话总结', 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': '工作区审查', + 'settings.magicPrompts.sidebar.item.sessionExplore': '代码库导览', 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': '功能规划', 'settings.magicPrompts.sidebar.item.sessionCatchUp': '快速回顾', 'settings.magicPrompts.sidebar.item.sessionDebug': '调试', @@ -1656,6 +1657,8 @@ export const settingsDict = { 'settings.magicPrompts.page.group.sessionSummary.title': '会话总结', 'settings.magicPrompts.page.group.sessionSummary.description': '由 /summary 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。非破坏性,不会压缩会话历史。', 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '工作区审查', + 'settings.magicPrompts.page.group.sessionExplore.title': '代码库导览', + 'settings.magicPrompts.page.group.sessionExplore.description': '由 /explore 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。调研仓库并给出结构化的导览——整体概貌、主要模块、它们如何连接以及从哪里入手——而不是逐文件罗列。', 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '由 /workspace-review 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。仅审查当前工作区的高信号问题。', 'settings.magicPrompts.page.group.sessionFeaturePlan.title': '功能规划', 'settings.magicPrompts.page.group.sessionFeaturePlan.description': '由 /plan-feature 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。运行引导式对话,先调研代码并分小批提出澄清问题,然后生成实现计划。', diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 6b71f079..cd108861 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -1420,7 +1420,6 @@ export const dict: Record = { 'chat.emptyState.draftTitle': 'What are we working on?', 'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?', 'chat.draftPresets.explore.label': 'Explore the codebase', - 'chat.draftPresets.explore.prompt': 'Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.', 'chat.draftPresets.catchup.label': 'Catch me up', 'chat.draftPresets.weigh.label': 'Weigh my options', 'chat.draftPresets.plan.label': 'Start feature planning', @@ -1490,6 +1489,7 @@ export const dict: Record = { 'chat.commandAutocomplete.command.catchUpDescription': '重新进入上下文:你之前在做什么、从哪里继续。', 'chat.commandAutocomplete.command.debugDescription': '在提出修复方案前,引导式地排查 bug 的根本原因。', 'chat.commandAutocomplete.command.weighDescription': '在动手前,权衡 2-3 种方案的利弊并给出推荐。', + 'chat.commandAutocomplete.command.exploreDescription': '快速熟悉这个代码库:对架构和主要部分的概览。', 'chat.commandAutocomplete.badge.skill': '技能', 'chat.commandAutocomplete.badge.command': '命令', 'chat.commandAutocomplete.badge.system': '系统', @@ -1609,6 +1609,7 @@ export const dict: Record = { 'chat.chatInput.toast.catchUpFailed': '无法获取上下文', 'chat.chatInput.toast.debugFailed': '无法开始调试', 'chat.chatInput.toast.weighFailed': '无法权衡方案', + 'chat.chatInput.toast.exploreFailed': '无法开始导览', 'chat.chatInput.toast.attachmentsTooLarge': '附件过大,无法发送。请减少图片数量或大小。', 'chat.chatInput.toast.sendAttachmentsFailed': '发送附件失败。请尝试更少文件或更小图片。', 'chat.chatInput.toast.messageSendFailed': '消息发送失败,附件已恢复。', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts b/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts index 8bdd7c7b..efb15244 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts @@ -187,6 +187,7 @@ 'settings.magicPrompts.sidebar.item.planImplement': '執行計畫', 'settings.magicPrompts.sidebar.item.sessionSummary': '工作階段總結', 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': '工作區審查', + 'settings.magicPrompts.sidebar.item.sessionExplore': '程式碼庫導覽', 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': '功能規劃', 'settings.magicPrompts.sidebar.item.sessionCatchUp': '快速回顧', 'settings.magicPrompts.sidebar.item.sessionDebug': '除錯', @@ -1577,6 +1578,8 @@ 'settings.magicPrompts.page.group.sessionSummary.title': '工作階段總結', 'settings.magicPrompts.page.group.sessionSummary.description': '由 /summary 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。非破壞性,不會壓縮工作階段歷史。', 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '工作區審查', + 'settings.magicPrompts.page.group.sessionExplore.title': '程式碼庫導覽', + 'settings.magicPrompts.page.group.sessionExplore.description': '由 /explore 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。調研儲存庫並給出結構化的導覽——整體概貌、主要模組、它們如何連接以及從哪裡入手——而不是逐檔案羅列。', 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '由 /workspace-review 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。僅審查目前工作區中的高訊號問題。', 'settings.magicPrompts.page.group.sessionFeaturePlan.title': '功能規劃', 'settings.magicPrompts.page.group.sessionFeaturePlan.description': '由 /plan-feature 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。執行引導式對話,先調研程式碼並分小批提出釐清問題,然後產生實作計畫。', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.ts b/packages/ui/src/lib/i18n/messages/zh-TW.ts index 904ce2fa..3b63724b 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.ts @@ -1417,7 +1417,6 @@ export const dict: Record = { 'chat.emptyState.draftTitle': 'What are we working on?', 'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?', 'chat.draftPresets.explore.label': 'Explore the codebase', - 'chat.draftPresets.explore.prompt': 'Give me a high-level tour of this codebase — the architecture, the main modules, and how they fit together.', 'chat.draftPresets.catchup.label': 'Catch me up', 'chat.draftPresets.weigh.label': 'Weigh my options', 'chat.draftPresets.plan.label': 'Start feature planning', @@ -1487,6 +1486,7 @@ export const dict: Record = { 'chat.commandAutocomplete.command.catchUpDescription': '重新進入上下文:你之前在做什麼、從哪裡繼續。', 'chat.commandAutocomplete.command.debugDescription': '在提出修復方案前,引導式地排查 bug 的根本原因。', 'chat.commandAutocomplete.command.weighDescription': '在動手前,權衡 2-3 種方案的利弊並給出推薦。', + 'chat.commandAutocomplete.command.exploreDescription': '快速熟悉這個程式碼庫:對架構和主要部分的概覽。', 'chat.commandAutocomplete.badge.skill': 'Skills', 'chat.commandAutocomplete.badge.command': '命令', 'chat.commandAutocomplete.badge.system': '系統', @@ -1606,6 +1606,7 @@ export const dict: Record = { 'chat.chatInput.toast.catchUpFailed': '無法取得上下文', 'chat.chatInput.toast.debugFailed': '無法開始除錯', 'chat.chatInput.toast.weighFailed': '無法權衡方案', + 'chat.chatInput.toast.exploreFailed': '無法開始導覽', 'chat.chatInput.toast.attachmentsTooLarge': '附件過大,無法傳送。請減少圖片數量或大小。', 'chat.chatInput.toast.sendAttachmentsFailed': '傳送附件失敗。請嘗試更少檔案或更小圖片。', 'chat.chatInput.toast.messageSendFailed': '訊息傳送失敗,附件已恢復。', diff --git a/packages/ui/src/lib/magicPrompts.ts b/packages/ui/src/lib/magicPrompts.ts index fef8a8bc..c106b6e4 100644 --- a/packages/ui/src/lib/magicPrompts.ts +++ b/packages/ui/src/lib/magicPrompts.ts @@ -35,6 +35,8 @@ export type MagicPromptId = | 'session.debug.instructions' | 'session.weigh.visible' | 'session.weigh.instructions' + | 'session.explore.visible' + | 'session.explore.instructions' | 'session.fusion.visible' | 'session.fusion.instructions'; @@ -697,6 +699,33 @@ Then give a clear recommendation. Anchor it on what best serves the user's actua Keep it concrete and scannable. Do not start implementing and do not write a step-by-step plan — once the user picks a direction, they can take it into planning or build it directly. +Respond in the same language the user uses.`, + }, + { + id: 'session.explore.visible', + title: 'Codebase Tour Visible Prompt', + group: 'Session', + description: 'Visible user message sent by the /explore command.', + template: 'Give me a high-level tour of this codebase.', + }, + { + id: 'session.explore.instructions', + title: 'Codebase Tour Instructions', + group: 'Session', + description: 'Hidden instructions attached to the /explore command. Investigates the repository and gives a structured orientation rather than a file-by-file dump.', + template: `The user wants to get oriented in this codebase — a high-level tour, as if you were onboarding a new contributor. Investigate first, then explain; do not guess from file or symbol names alone. + +Explore the actual repository: entry points, the top-level structure, how it is built and run, and the main modules and how they connect. Read enough real code to be accurate. + +Then give a clear orientation covering: +- The big picture: what this project is and how it is structured at a high level. +- Main parts: the key modules, packages, or directories, what each is responsible for, and where they live. +- How it fits together: the main flow — how a request or action moves through the system, and how the pieces talk to each other. +- Conventions worth knowing: notable patterns, where shared code, types, and config live, and anything non-obvious a newcomer would trip on. +- Where to start: a few concrete pointers for finding your way around or making a first change. + +Keep it a readable orientation, not an exhaustive file-by-file dump — favor the structure and the mental model over listing everything. Lead with the big picture, then drill down. If the user named a specific area, focus the tour there. + Respond in the same language the user uses.`, }, {