feat: desktop draft welcome presets and /plan-feature command

Add starter preset chips under the composer on the desktop draft welcome
screen (explore, what changed, plan, review). Clicking a chip submits
immediately; prompt chips send a natural-language prompt, command chips
reuse built-in slash commands.

Add a new /plan-feature built-in command, modeled on /workspace-review:
visible + hidden magic prompts that run a guided, batched-question
planning dialogue (investigate the code, ask up to 3 clarifying
questions at a time, surface pitfalls, then produce an implementation
plan). Wired into command autocomplete, the submit handler, the draft
plan chip, and the Magic Prompts settings page, with i18n across all
locales.
This commit is contained in:
Bohdan Triapitsyn
2026-05-30 02:04:32 +03:00
parent 7f90ffb878
commit 2b08a51946
22 changed files with 214 additions and 2 deletions
+76 -1
View File
@@ -52,6 +52,7 @@ import { useThemeSystem } from '@/contexts/useThemeSystem';
import { GitHubIssuePickerDialog } from '@/components/session/GitHubIssuePickerDialog';
import { GitHubPrPickerDialog } from '@/components/session/GitHubPrPickerDialog';
import { Icon } from "@/components/icon/Icon";
import type { IconName } from "@/components/icon/icons";
import { useChatSearchDirectory } from '@/hooks/useChatSearchDirectory';
import { opencodeClient } from '@/lib/opencode/client';
import { useProjectsStore } from '@/stores/useProjectsStore';
@@ -66,6 +67,7 @@ import { buildSessionTargetOptions } from '@/sync/session-worktree-contract';
import { usePermissionStore } from '@/stores/permissionStore';
import { extractGitChangedFiles } from './changedFiles';
import { useI18n } from '@/lib/i18n';
import type { I18nKey } from '@/lib/i18n';
import { fetchResponseStyleInstruction } from '@/lib/responseStyle';
import { wrapSystemReminder } from '@/lib/systemReminder';
import { getSyncMessages } from '@/sync/sync-refs';
@@ -86,6 +88,23 @@ import {
} from './attachmentCitations';
import type { Message, Part } from '@opencode-ai/sdk/v2/client';
// Starter presets shown under the composer on the desktop draft welcome screen.
// `promptKey` presets send a plain natural-language prompt; `command` presets
// send a built-in slash command (e.g. /workspace-review) through the normal submit path.
type DraftPreset = {
id: string;
icon: IconName;
labelKey: I18nKey;
promptKey?: I18nKey;
command?: string;
};
const DRAFT_PRESETS: readonly DraftPreset[] = [
{ id: 'explore', icon: 'compass-3', labelKey: 'chat.draftPresets.explore.label', promptKey: 'chat.draftPresets.explore.prompt' },
{ id: 'changes', icon: 'git-branch', labelKey: 'chat.draftPresets.changes.label', promptKey: 'chat.draftPresets.changes.prompt' },
{ id: 'plan', icon: 'survey', labelKey: 'chat.draftPresets.plan.label', command: '/plan-feature' },
{ id: 'review', icon: 'search-eye', labelKey: 'chat.draftPresets.review.label', command: '/workspace-review' },
];
const MAX_VISIBLE_TEXTAREA_LINES = 8;
const EMPTY_QUEUE: QueuedMessage[] = [];
const EMPTY_MESSAGES: Message[] = [];
@@ -1103,7 +1122,7 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
const availableSkills = useSkillsStore((s) => s.skills);
const knownSlashNames = React.useMemo(() => {
const names = new Set<string>([
'init', 'review', 'undo', 'redo', 'timeline', 'compact', 'summary', 'workspace-review',
'init', 'review', 'undo', 'redo', 'timeline', 'compact', 'summary', 'workspace-review', 'plan-feature',
]);
for (const command of availableCommands) names.add(command.name.toLowerCase());
for (const skill of availableSkills) names.add(skill.name.toLowerCase());
@@ -1931,6 +1950,28 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
}
return;
}
else if (commandName === 'plan-feature' && (currentSessionId || newSessionDraftOpen)) {
try {
await sessionActions.waitForConnectionOrThrow();
const visibleText = await renderMagicPrompt('session.plan.visible');
const instructionsText = await renderMagicPrompt('session.plan.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.planFeatureFailed'));
}
return;
}
}
const currentSessionDirectory = currentSessionId
@@ -2054,6 +2095,18 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
}
}, [inputMode, getCurrentInputSnapshot, currentSessionId, sessionPhase, queueModeEnabled, handleQueueMessage]);
// Draft welcome presets: populate the composer and submit immediately.
// getCurrentInputSnapshot reads textareaRef.current.value first, so setting it
// synchronously lets handleSubmit pick up the preset text in the same tick.
const submitPresetPrompt = React.useCallback((text: string) => {
const textarea = textareaRef.current;
if (textarea) {
textarea.value = text;
}
setMessage(text);
void handleSubmitRef.current();
}, []);
const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
// Early return during IME composition to prevent interference with autocomplete.
// Uses keyCode === 229 fallback for WebKit where compositionend fires before keydown.
@@ -4401,6 +4454,28 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
{isMobile && <MobileSessionStatusBar />}
</div>
</div>
{newSessionDraftOpen && !isDesktopExpanded && !isMobile && !isVSCode && !isMiniChatSurface ? (
<div className="chat-input-column mt-4 flex flex-wrap justify-center gap-2">
{DRAFT_PRESETS.map((preset) => (
<button
key={preset.id}
type="button"
onClick={() => {
const text = preset.command ?? (preset.promptKey ? t(preset.promptKey) : '');
if (text) submitPresetPrompt(text);
}}
className="group inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-[var(--interactive-hover)] hover:text-foreground"
style={{
backgroundColor: currentTheme?.colors?.surface?.elevated,
borderColor: currentTheme?.colors?.interactive?.border,
}}
>
<Icon name={preset.icon} className="h-3.5 w-3.5 shrink-0 opacity-70 transition-opacity group-hover:opacity-100" />
<span>{t(preset.labelKey)}</span>
</button>
))}
</div>
) : null}
</form>
{/* Issue Picker Dialog */}
@@ -152,6 +152,10 @@ export const CommandAutocomplete = React.forwardRef<CommandAutocompleteHandle, C
? [{ id: 'openchamber:workspace-review', name: 'workspace-review', source: 'openchamber' as const, description: t('chat.commandAutocomplete.command.workspaceReviewDescription'), isOpenChamber: true }]
: []
),
...(canStartSessionCommand
? [{ id: 'openchamber:plan-feature', name: 'plan-feature', source: 'openchamber' as const, description: t('chat.commandAutocomplete.command.featurePlanDescription'), isOpenChamber: true }]
: []
),
];
const allCommands = [...builtInCommands, ...customCommands, ...skillCommands];
@@ -197,6 +201,10 @@ export const CommandAutocomplete = React.forwardRef<CommandAutocompleteHandle, C
? [{ id: 'openchamber:workspace-review', name: 'workspace-review', source: 'openchamber' as const, description: t('chat.commandAutocomplete.command.workspaceReviewDescription'), isOpenChamber: true }]
: []
),
...(canStartSessionCommand
? [{ id: 'openchamber:plan-feature', name: 'plan-feature', source: 'openchamber' as const, description: t('chat.commandAutocomplete.command.featurePlanDescription'), isOpenChamber: true }]
: []
),
];
const filtered = (searchQuery
+1 -1
View File
@@ -61,6 +61,7 @@ export const iconSpriteData = {
"code": `<path d="M23 12L15.9289 19.0711L14.5147 17.6569L20.1716 12L14.5147 6.34317L15.9289 4.92896L23 12ZM3.82843 12L9.48528 17.6569L8.07107 19.0711L1 12L8.07107 4.92896L9.48528 6.34317L3.82843 12Z" fill="currentColor"/>`,
"code-sslash": `<path d="M24 12L18.3431 17.6569L16.9289 16.2426L21.1716 12L16.9289 7.75736L18.3431 6.34315L24 12ZM2.82843 12L7.07107 16.2426L5.65685 17.6569L0 12L5.65685 6.34315L7.07107 7.75736L2.82843 12ZM9.78845 21H7.66009L14.2116 3H16.3399L9.78845 21Z" fill="currentColor"/>`,
"command": `<path d="M10 8H14V6.5C14 4.567 15.567 3 17.5 3C19.433 3 21 4.567 21 6.5C21 8.433 19.433 10 17.5 10H16V14H17.5C19.433 14 21 15.567 21 17.5C21 19.433 19.433 21 17.5 21C15.567 21 14 19.433 14 17.5V16H10V17.5C10 19.433 8.433 21 6.5 21C4.567 21 3 19.433 3 17.5C3 15.567 4.567 14 6.5 14H8V10H6.5C4.567 10 3 8.433 3 6.5C3 4.567 4.567 3 6.5 3C8.433 3 10 4.567 10 6.5V8ZM8 8V6.5C8 5.67157 7.32843 5 6.5 5C5.67157 5 5 5.67157 5 6.5C5 7.32843 5.67157 8 6.5 8H8ZM8 16H6.5C5.67157 16 5 16.6716 5 17.5C5 18.3284 5.67157 19 6.5 19C7.32843 19 8 18.3284 8 17.5V16ZM16 8H17.5C18.3284 8 19 7.32843 19 6.5C19 5.67157 18.3284 5 17.5 5C16.6716 5 16 5.67157 16 6.5V8ZM16 16V17.5C16 18.3284 16.6716 19 17.5 19C18.3284 19 19 18.3284 19 17.5C19 16.6716 18.3284 16 17.5 16H16ZM10 10V14H14V10H10Z" fill="currentColor"/>`,
"compass-3": `<path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM16.5 7.5L14 14L7.5 16.5L10 10L16.5 7.5ZM12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z" fill="currentColor"/>`,
"computer": `<path d="M4 16H20V5H4V16ZM13 18V20H17V22H7V20H11V18H2.9918C2.44405 18 2 17.5511 2 16.9925V4.00748C2 3.45107 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44892 22 4.00748V16.9925C22 17.5489 21.5447 18 21.0082 18H13Z" fill="currentColor"/>`,
"contract-up-down": `<path d="M5.79285 5.20718 12 11.4143 18.2071 5.20718 16.7928 3.79297 12 8.58586 7.20706 3.79297 5.79285 5.20718ZM18.2072 18.7928 12.0001 12.5857 5.793 18.7928 7.20721 20.207 12.0001 15.4141 16.793 20.207 18.2072 18.7928Z" fill="currentColor"/>`,
"corner-down-left": `<path d="M19.0001 13.9999L19.0002 5L17.0002 4.99997L17.0001 11.9999L6.8283 12L10.778 8.05024L9.36382 6.63603L2.99986 13L9.36382 19.364L10.778 17.9497L6.82826 14L19.0001 13.9999Z" fill="currentColor"/>`,
@@ -156,7 +157,6 @@ export const iconSpriteData = {
"menu-2": `<path d="M3 4H21V6H3V4ZM3 11H15V13H3V11ZM3 18H21V20H3V18Z" fill="currentColor"/>`,
"menu-fold-2": `<path d="M4.40347 3.90332L2.98926 5.31753L6.17124 8.49951L2.98926 11.6815L4.40347 13.0957L8.99967 8.49951L4.40347 3.90332ZM20.9997 19.9995V17.9995H2.99967V19.9995H20.9997ZM20.9997 12.9995V10.9995H11.9997V12.9995H20.9997ZM20.9997 5.99951V3.99951H11.9997V5.99951H20.9997Z" fill="currentColor"/>`,
"menu-search": `<path d="M15.5 5C13.567 5 12 6.567 12 8.5C12 10.433 13.567 12 15.5 12C17.433 12 19 10.433 19 8.5C19 6.567 17.433 5 15.5 5ZM10 8.5C10 5.46243 12.4624 3 15.5 3C18.5376 3 21 5.46243 21 8.5C21 9.6575 20.6424 10.7315 20.0317 11.6175L22.7071 14.2929L21.2929 15.7071L18.6175 13.0317C17.7315 13.6424 16.6575 14 15.5 14C12.4624 14 10 11.5376 10 8.5ZM3 4H8V6H3V4ZM3 11H8V13H3V11ZM21 18V20H3V18H21Z" fill="currentColor"/>`,
"message-2": `<path d="M6.45455 19L2 22.5V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V18C22 18.5523 21.5523 19 21 19H6.45455ZM5.76282 17H20V5H4V18.3851L5.76282 17ZM11 10H13V12H11V10ZM7 10H9V12H7V10ZM15 10H17V12H15V10Z" fill="currentColor"/>`,
"mic": `<path d="M11.9998 3C10.3429 3 8.99976 4.34315 8.99976 6V10C8.99976 11.6569 10.3429 13 11.9998 13C13.6566 13 14.9998 11.6569 14.9998 10V6C14.9998 4.34315 13.6566 3 11.9998 3ZM11.9998 1C14.7612 1 16.9998 3.23858 16.9998 6V10C16.9998 12.7614 14.7612 15 11.9998 15C9.23833 15 6.99976 12.7614 6.99976 10V6C6.99976 3.23858 9.23833 1 11.9998 1ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11Z" fill="currentColor"/>`,
"mic-off": `<path d="M16.4249 17.839L21.1925 22.6066L22.6068 21.1924L2.80777 1.3934L1.39355 2.80761L7.00016 8.41421V10C7.00016 12.7614 9.23873 15 12.0002 15C12.4825 15 12.9489 14.9317 13.3902 14.8042L14.9404 16.3544C14.0464 16.7688 13.0503 17 12.0002 17C8.47368 17 5.55627 14.3923 5.07105 11H3.05509C3.51623 15.1716 6.82854 18.4839 11.0002 18.9451V23H13.0002V18.9451C14.2341 18.8087 15.3929 18.4228 16.4249 17.839ZM11.5528 12.9669C10.2541 12.7727 9.22745 11.7461 9.03328 10.4473L11.5528 12.9669ZM19.3747 15.1604L17.9323 13.7179C18.4407 12.9084 18.788 11.9874 18.9293 11H20.9452C20.7754 12.5366 20.2187 13.9565 19.3747 15.1604ZM16.4658 12.2514L14.9173 10.703C14.9715 10.4775 15.0002 10.2421 15.0002 10V6C15.0002 4.34315 13.657 3 12.0002 3C10.7059 3 9.6031 3.81956 9.18237 4.96802L7.68575 3.47139C8.55427 1.99268 10.1613 1 12.0002 1C14.7616 1 17.0002 3.23858 17.0002 6V10C17.0002 10.8099 16.8076 11.5748 16.4658 12.2514Z" fill="currentColor"/>`,
"more-2-fill": `<path d="M12 3C10.9 3 10 3.9 10 5C10 6.1 10.9 7 12 7C13.1 7 14 6.1 14 5C14 3.9 13.1 3 12 3ZM12 17C10.9 17 10 17.9 10 19C10 20.1 10.9 21 12 21C13.1 21 14 20.1 14 19C14 17.9 13.1 17 12 17ZM12 10C10.9 10 10 10.9 10 12C10 13.1 10.9 14 12 14C13.1 14 14 13.1 14 12C14 10.9 13.1 10 12 10Z" fill="currentColor"/>`,
@@ -140,6 +140,14 @@ const PROMPT_PAGE_MAP: Record<string, PromptPageConfig> = {
{ id: 'session.review.instructions', titleKey: 'settings.magicPrompts.page.block.instructions' },
],
},
'session.plan': {
titleKey: 'settings.magicPrompts.page.group.sessionFeaturePlan.title',
descriptionKey: 'settings.magicPrompts.page.group.sessionFeaturePlan.description',
blocks: [
{ id: 'session.plan.visible', titleKey: 'settings.magicPrompts.page.block.visiblePrompt' },
{ id: 'session.plan.instructions', titleKey: 'settings.magicPrompts.page.block.instructions' },
],
},
'session.fusion': {
titleKey: 'settings.magicPrompts.page.group.sessionFusion.title',
descriptionKey: 'settings.magicPrompts.page.group.sessionFusion.description',
@@ -47,6 +47,7 @@ export const MagicPromptsSidebar: React.FC<MagicPromptsSidebarProps> = ({ onItem
items: [
{ 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' },
{ id: 'session.fusion', titleKey: 'settings.magicPrompts.sidebar.item.sessionFusion' },
],
},
@@ -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.sessionFeaturePlan': 'Feature Planning',
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
'settings.remoteInstances.sidebar.title': 'Remote Instances',
'settings.remoteInstances.sidebar.total': 'Total {count}',
@@ -1686,6 +1687,8 @@ export const settingsDict = {
'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.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.',
'settings.magicPrompts.page.group.sessionFusion.title': 'Fusion',
'settings.magicPrompts.page.group.sessionFusion.description': 'Prompts used when combining multi-run outputs into one final answer: visible user message + hidden instructions before source results.',
'settings.magicPrompts.page.actions.resetting': 'Resetting...',
+8
View File
@@ -1453,6 +1453,12 @@ export const dict = {
'chat.emptyState.startNewChat': 'Start a new chat',
'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.changes.label': 'What changed recently',
'chat.draftPresets.changes.prompt': 'Summarize what changed recently — the latest commits and the current state of this branch.',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.review.label': 'Review my changes',
'chat.scrollToBottom.aria': 'Scroll to bottom',
'chat.timeline.relative.justNow': 'just now',
'chat.timeline.relative.minutesAgo': '{count}m ago',
@@ -1513,6 +1519,7 @@ export const dict = {
'chat.commandAutocomplete.command.compactDescription': 'Compress session history using AI to reduce context size',
'chat.commandAutocomplete.command.summaryDescription': 'Non-destructive session summary. Optional topic hint after the command.',
'chat.commandAutocomplete.command.workspaceReviewDescription': 'Review current workspace changes for high-signal issues only.',
'chat.commandAutocomplete.command.featurePlanDescription': 'Start a guided, back-and-forth planning session for a new feature.',
'chat.commandAutocomplete.badge.skill': 'skill',
'chat.commandAutocomplete.badge.command': 'command',
'chat.commandAutocomplete.badge.system': 'system',
@@ -1628,6 +1635,7 @@ export const dict = {
'chat.chatInput.toast.compactFailed': 'Failed to compact session',
'chat.chatInput.toast.summaryFailed': 'Failed to generate summary',
'chat.chatInput.toast.reviewFailed': 'Failed to review changes',
'chat.chatInput.toast.planFeatureFailed': 'Failed to start feature planning',
'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.',
@@ -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.sessionFeaturePlan": "Planificación de funciones",
"settings.magicPrompts.sidebar.item.sessionFusion": "Fusion",
"settings.remoteInstances.sidebar.title": "Instancias remotas",
"settings.remoteInstances.sidebar.total": "Total {count}",
@@ -1653,6 +1654,8 @@ export const settingsDict = {
"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.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.",
"settings.magicPrompts.page.group.sessionFusion.title": "Fusion",
"settings.magicPrompts.page.group.sessionFusion.description": "Prompts usados para combinar salidas de multi-run en una respuesta final: mensaje visible del usuario + instrucciones ocultas antes de los resultados fuente.",
"settings.magicPrompts.page.actions.resetting": "Restableciendo...",
+8
View File
@@ -1419,6 +1419,12 @@ export const dict: Record<I18nKey, string> = {
"chat.emptyState.startNewChat": "Iniciar una nueva conversación",
"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.changes.label": "What changed recently",
"chat.draftPresets.changes.prompt": "Summarize what changed recently — the latest commits and the current state of this branch.",
"chat.draftPresets.plan.label": "Start feature planning",
"chat.draftPresets.review.label": "Review my changes",
"chat.scrollToBottom.aria": "Ir al final",
"chat.timeline.relative.justNow": "ahora mismo",
"chat.timeline.relative.minutesAgo": "hace {count}m",
@@ -1479,6 +1485,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.compactDescription": "Comprimir el historial de la sesión usando IA para reducir el tamaño del contexto",
"chat.commandAutocomplete.command.summaryDescription": "Resumen no destructivo de la sesión. Pista opcional del tema después del comando.",
"chat.commandAutocomplete.command.workspaceReviewDescription": "Revisar los cambios actuales del espacio de trabajo solo para problemas de alto impacto.",
"chat.commandAutocomplete.command.featurePlanDescription": "Inicia una sesión de planificación guiada e interactiva para una nueva función.",
"chat.commandAutocomplete.badge.skill": "habilidad",
"chat.commandAutocomplete.badge.command": "comando",
"chat.commandAutocomplete.badge.system": "sistema",
@@ -1594,6 +1601,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.compactFailed": "No se pudo comprimir la sesión",
"chat.chatInput.toast.summaryFailed": "No se pudo generar el resumen",
"chat.chatInput.toast.reviewFailed": "No se pudieron revisar los cambios",
"chat.chatInput.toast.planFeatureFailed": "No se pudo iniciar la planificación de la función",
"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.",
@@ -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.sessionFeaturePlan': '기능 계획',
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
'settings.remoteInstances.sidebar.title': '원격 인스턴스',
'settings.remoteInstances.sidebar.total': '총 {count}개',
@@ -1653,6 +1654,8 @@ export const settingsDict = {
'settings.magicPrompts.page.group.sessionSummary.description': '/summary slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 비파괴적이며 세션 기록을 압축하지 않습니다.',
'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '워크스페이스 리뷰',
'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에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 코드를 조사하고 작은 묶음으로 명확화 질문을 한 뒤 구현 계획을 만드는 가이드 대화를 실행합니다.',
'settings.magicPrompts.page.group.sessionFusion.title': 'Fusion',
'settings.magicPrompts.page.group.sessionFusion.description': 'multi-run 출력을 하나의 최종 답변으로 결합할 때 사용하는 프롬프트입니다: 보이는 사용자 메시지 + 소스 결과 앞의 숨겨진 지침.',
'settings.magicPrompts.page.actions.resetting': '초기화 중...',
+8
View File
@@ -1455,6 +1455,12 @@ export const dict: Record<I18nKey, string> = {
'chat.emptyState.startNewChat': '새 채팅 시작',
'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.changes.label': 'What changed recently',
'chat.draftPresets.changes.prompt': 'Summarize what changed recently — the latest commits and the current state of this branch.',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.review.label': 'Review my changes',
'chat.scrollToBottom.aria': '맨 아래로 스크롤',
'chat.timeline.relative.justNow': '방금 전',
'chat.timeline.relative.minutesAgo': '{count}분 전',
@@ -1515,6 +1521,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.compactDescription': 'AI로 세션 기록을 압축해 컨텍스트 크기를 줄입니다',
'chat.commandAutocomplete.command.summaryDescription': '세션 기록을 안전하게 요약합니다. 명령 뒤에 선택적으로 주제 힌트를 넣을 수 있습니다.',
'chat.commandAutocomplete.command.workspaceReviewDescription': '현재 워크스페이스 변경 사항에서 중요한 이슈만 리뷰합니다.',
'chat.commandAutocomplete.command.featurePlanDescription': '새 기능을 위한 대화형 가이드 계획 세션을 시작합니다.',
'chat.commandAutocomplete.badge.skill': '스킬',
'chat.commandAutocomplete.badge.command': '명령',
'chat.commandAutocomplete.badge.system': 'system',
@@ -1628,6 +1635,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.compactFailed': '세션 압축 실패',
'chat.chatInput.toast.summaryFailed': '요약 생성 실패',
'chat.chatInput.toast.reviewFailed': '변경사항 검토 실패',
'chat.chatInput.toast.planFeatureFailed': '기능 계획을 시작하지 못했습니다',
'chat.chatInput.toast.attachmentsTooLarge': '첨부 파일이 너무 커서 보낼 수 없습니다. 이미지 수나 크기를 줄여 보세요.',
'chat.chatInput.toast.sendAttachmentsFailed': '첨부 파일 전송 실패. 파일 수나 이미지 크기를 줄여 보세요.',
'chat.chatInput.toast.messageSendFailed': '메시지 전송에 실패했습니다. 첨부 파일을 복원했습니다.',
@@ -279,6 +279,8 @@ export const settingsDict = {
'settings.magicPrompts.page.group.sessionSummary.description': 'Prompty używane przez polecenie /summary: widoczna wiadomość użytkownika + ukryte instrukcje. Niedestrukcyjne nie kompaktuje historii sesji.',
'settings.magicPrompts.page.group.sessionSummary.title': 'Podsumowanie Sesji',
'settings.magicPrompts.page.group.sessionWorkspaceReview.description': 'Prompty używane przez polecenie /workspace-review: widoczna wiadomość użytkownika + ukryte instrukcje. Przegląda zmiany w bieżącym obszarze roboczym tylko pod kątem istotnych problemów.',
'settings.magicPrompts.page.group.sessionFeaturePlan.title': 'Planowanie funkcji',
'settings.magicPrompts.page.group.sessionFeaturePlan.description': 'Prompty używane przez polecenie /plan-feature: widoczna wiadomość użytkownika + ukryte instrukcje. Uruchamia prowadzony dialog, który bada kod i zadaje pytania doprecyzowujące w małych partiach przed utworzeniem planu implementacji.',
'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Przegląd obszaru roboczego',
'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.',
@@ -316,6 +318,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.sessionFeaturePlan': 'Planowanie funkcji',
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
'settings.magicPrompts.sidebar.title': 'Magiczne Prompty',
'settings.mcp.page.actions.authorize': 'Autoryzuj',
+8
View File
@@ -445,6 +445,12 @@ export const dict: Record<I18nKey, string> = {
'chat.emptyState.startNewChat': 'Rozpocznij nowy czat',
'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.changes.label': 'What changed recently',
'chat.draftPresets.changes.prompt': 'Summarize what changed recently — the latest commits and the current state of this branch.',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.review.label': 'Review my changes',
'chat.scrollToBottom.aria': 'Przewiń na dół',
'chat.timeline.relative.justNow': 'przed chwilą',
'chat.timeline.relative.minutesAgo': '{count}m temu',
@@ -504,6 +510,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.compactDescription': 'Skompresuj historię sesji używając AI aby zredukować rozmiar kontekstu',
'chat.commandAutocomplete.command.summaryDescription': 'Niedestrukcyjne podsumowanie sesji. Opcjonalna wskazówka tematu po poleceniu.',
'chat.commandAutocomplete.command.workspaceReviewDescription': 'Recenzja obecnych zmian w przestrzeni roboczej tylko dla problemów o wysokim sygnale.',
'chat.commandAutocomplete.command.featurePlanDescription': 'Rozpocznij prowadzoną, interaktywną sesję planowania nowej funkcji.',
'chat.commandAutocomplete.badge.skill': 'skill',
'chat.commandAutocomplete.badge.command': 'polecenie',
'chat.commandAutocomplete.badge.system': 'system',
@@ -909,6 +916,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.messageSendFailed': 'Nie udało się wysłać wiadomości. Załączniki zostały przywrócone.',
'chat.chatInput.toast.openSessionFirst': 'Najpierw otwórz sesję',
'chat.chatInput.toast.reviewFailed': 'Nie udało się przejrzeć zmian',
'chat.chatInput.toast.planFeatureFailed': 'Nie udało się rozpocząć planowania funkcji',
'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',
@@ -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.sessionFeaturePlan": "Planejamento de funcionalidade",
"settings.magicPrompts.sidebar.item.sessionFusion": "Fusion",
"settings.remoteInstances.sidebar.title": "Instâncias remotas",
"settings.remoteInstances.sidebar.total": "Total {count}",
@@ -1653,6 +1654,8 @@ export const settingsDict = {
"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.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.",
"settings.magicPrompts.page.group.sessionFusion.title": "Fusion",
"settings.magicPrompts.page.group.sessionFusion.description": "Prompts usados para combinar saídas de multi-run em uma resposta final: mensagem visível do usuário + instruções ocultas antes dos resultados de origem.",
"settings.magicPrompts.page.actions.resetting": "Redefinindo...",
@@ -1419,6 +1419,12 @@ export const dict: Record<I18nKey, string> = {
"chat.emptyState.startNewChat": "Iniciar uma nova conversa",
"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.changes.label": "What changed recently",
"chat.draftPresets.changes.prompt": "Summarize what changed recently — the latest commits and the current state of this branch.",
"chat.draftPresets.plan.label": "Start feature planning",
"chat.draftPresets.review.label": "Review my changes",
"chat.scrollToBottom.aria": "Ir ao final",
"chat.timeline.relative.justNow": "agora mesmo",
"chat.timeline.relative.minutesAgo": "há {count}m",
@@ -1479,6 +1485,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.compactDescription": "Comprimir o histórico da sessão usando IA para reduzir o tamanho do contexto",
"chat.commandAutocomplete.command.summaryDescription": "Resumo não destrutivo da sessão. Dica opcional do tema após o comando.",
"chat.commandAutocomplete.command.workspaceReviewDescription": "Revisar as alterações atuais do workspace apenas para problemas de alto impacto.",
"chat.commandAutocomplete.command.featurePlanDescription": "Inicie uma sessão de planejamento guiada e interativa para uma nova funcionalidade.",
"chat.commandAutocomplete.badge.skill": "habilidade",
"chat.commandAutocomplete.badge.command": "comando",
"chat.commandAutocomplete.badge.system": "sistema",
@@ -1594,6 +1601,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.compactFailed": "Não foi possível comprimir a sessão",
"chat.chatInput.toast.summaryFailed": "Não foi possível gerar o resumo",
"chat.chatInput.toast.reviewFailed": "Não foi possível revisar as alterações",
"chat.chatInput.toast.planFeatureFailed": "Não foi possível iniciar o planejamento da funcionalidade",
"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.",
@@ -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.sessionFeaturePlan": "Планування фічі",
"settings.magicPrompts.sidebar.item.sessionFusion": "Fusion",
"settings.remoteInstances.sidebar.title": "Віддалені інстанси",
"settings.remoteInstances.sidebar.total": "Усього {count}",
@@ -1653,6 +1654,8 @@ export const settingsDict = {
"settings.magicPrompts.page.group.sessionSummary.description": "Промпти, які використовуються командою /summary: видиме повідомлення користувача + приховані інструкції. Неруйнівний – не стискає історію сесії.",
"settings.magicPrompts.page.group.sessionWorkspaceReview.title": "Огляд робочого простору",
"settings.magicPrompts.page.group.sessionWorkspaceReview.description": "Промпти, які використовуються командою /workspace-review: видиме повідомлення користувача + приховані інструкції. Переглядає поточні зміни робочого простору лише для проблем із сильним сигналом.",
"settings.magicPrompts.page.group.sessionFeaturePlan.title": "Планування фічі",
"settings.magicPrompts.page.group.sessionFeaturePlan.description": "Промпти, які використовуються командою /plan-feature: видиме повідомлення користувача + приховані інструкції. Запускає кероване діалогове планування — досліджує код і ставить уточнюючі запитання невеликими батчами, перш ніж скласти план імплементації.",
"settings.magicPrompts.page.group.sessionFusion.title": "Fusion",
"settings.magicPrompts.page.group.sessionFusion.description": "Промпти для обʼєднання результатів multi-run в одну фінальну відповідь: видиме повідомлення користувача + приховані інструкції перед результатами джерел.",
"settings.magicPrompts.page.actions.resetting": "Скидання...",
+8
View File
@@ -1419,6 +1419,12 @@ export const dict: Record<I18nKey, string> = {
"chat.emptyState.startNewChat": "Почніть новий чат",
"chat.emptyState.draftTitle": "Над чим працюємо?",
"chat.emptyState.draftTitleWithProject": "Над чим працюємо в {project}?",
"chat.draftPresets.explore.label": "Огляд кодової бази",
"chat.draftPresets.explore.prompt": "Зроби високорівневий огляд цієї кодової бази — архітектуру, основні модулі та як вони пов'язані між собою.",
"chat.draftPresets.changes.label": "Що нещодавно змінилось",
"chat.draftPresets.changes.prompt": "Підсумуй, що нещодавно змінилось — останні коміти та поточний стан цієї гілки.",
"chat.draftPresets.plan.label": "Розпочати планування фічі",
"chat.draftPresets.review.label": "Переглянути мої зміни",
"chat.scrollToBottom.aria": "Прокрутити вниз",
"chat.timeline.relative.justNow": "щойно",
"chat.timeline.relative.minutesAgo": "{count} хв тому",
@@ -1479,6 +1485,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.compactDescription": "Стиснути історію сесії за допомогою ШІ, щоб зменшити розмір контексту",
"chat.commandAutocomplete.command.summaryDescription": "Неруйнівний підсумок сесії. Після команди можна додати тему.",
"chat.commandAutocomplete.command.workspaceReviewDescription": "Перегляньте поточні зміни в робочому середовищі лише для проблем із сильним сигналом.",
"chat.commandAutocomplete.command.featurePlanDescription": "Розпочати покрокову діалогову сесію планування нової фічі.",
"chat.commandAutocomplete.badge.skill": "навичка",
"chat.commandAutocomplete.badge.command": "команда",
"chat.commandAutocomplete.badge.system": "система",
@@ -1594,6 +1601,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.compactFailed": "Не вдалося стиснути сесію",
"chat.chatInput.toast.summaryFailed": "Не вдалося створити підсумок",
"chat.chatInput.toast.reviewFailed": "Не вдалося переглянути зміни",
"chat.chatInput.toast.planFeatureFailed": "Не вдалося розпочати планування фічі",
"chat.chatInput.toast.attachmentsTooLarge": "Вкладені файли завеликі для надсилання. Спробуйте зменшити кількість або розмір зображень.",
"chat.chatInput.toast.sendAttachmentsFailed": "Не вдалося надіслати вкладення. Спробуйте зменшити кількість файлів або зображень.",
"chat.chatInput.toast.messageSendFailed": "Не вдалося надіслати повідомлення. Вкладення відновлено.",
@@ -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.sessionFeaturePlan': '功能规划',
'settings.magicPrompts.sidebar.item.sessionFusion': '融合',
'settings.remoteInstances.sidebar.title': '远程实例',
'settings.remoteInstances.sidebar.total': '总计 {count}',
@@ -1653,6 +1654,8 @@ export const settingsDict = {
'settings.magicPrompts.page.group.sessionSummary.description': '由 /summary 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。非破坏性,不会压缩会话历史。',
'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '工作区审查',
'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '由 /workspace-review 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。仅审查当前工作区的高信号问题。',
'settings.magicPrompts.page.group.sessionFeaturePlan.title': '功能规划',
'settings.magicPrompts.page.group.sessionFeaturePlan.description': '由 /plan-feature 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。运行引导式对话,先调研代码并分小批提出澄清问题,然后生成实现计划。',
'settings.magicPrompts.page.group.sessionFusion.title': '融合',
'settings.magicPrompts.page.group.sessionFusion.description': '用于将多运行输出融合为一个最终答案的提示词:可见用户消息 + 源结果前的隐藏说明。',
'settings.magicPrompts.page.actions.resetting': '重置中...',
@@ -1419,6 +1419,12 @@ export const dict: Record<I18nKey, string> = {
'chat.emptyState.startNewChat': '开始新的聊天',
'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.changes.label': 'What changed recently',
'chat.draftPresets.changes.prompt': 'Summarize what changed recently — the latest commits and the current state of this branch.',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.review.label': 'Review my changes',
'chat.scrollToBottom.aria': '滚动到底部',
'chat.timeline.relative.justNow': '刚刚',
'chat.timeline.relative.minutesAgo': '{count} 分钟前',
@@ -1479,6 +1485,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.compactDescription': '使用 AI 压缩会话历史以减少上下文大小',
'chat.commandAutocomplete.command.summaryDescription': '非破坏性会话总结。命令后可选填主题提示。',
'chat.commandAutocomplete.command.workspaceReviewDescription': '仅审查当前工作区中高价值的问题。',
'chat.commandAutocomplete.command.featurePlanDescription': '为新功能开始一次引导式的来回规划会话。',
'chat.commandAutocomplete.badge.skill': '技能',
'chat.commandAutocomplete.badge.command': '命令',
'chat.commandAutocomplete.badge.system': '系统',
@@ -1594,6 +1601,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.compactFailed': '压缩会话失败',
'chat.chatInput.toast.summaryFailed': '生成总结失败',
'chat.chatInput.toast.reviewFailed': '审查变更失败',
'chat.chatInput.toast.planFeatureFailed': '无法开始功能规划',
'chat.chatInput.toast.attachmentsTooLarge': '附件过大,无法发送。请减少图片数量或大小。',
'chat.chatInput.toast.sendAttachmentsFailed': '发送附件失败。请尝试更少文件或更小图片。',
'chat.chatInput.toast.messageSendFailed': '消息发送失败,附件已恢复。',
@@ -187,6 +187,7 @@
'settings.magicPrompts.sidebar.item.planImplement': '執行計畫',
'settings.magicPrompts.sidebar.item.sessionSummary': '工作階段總結',
'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': '工作區審查',
'settings.magicPrompts.sidebar.item.sessionFeaturePlan': '功能規劃',
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
'settings.remoteInstances.sidebar.title': '遠端執行個體',
'settings.remoteInstances.sidebar.total': '總計 {count}',
@@ -1574,6 +1575,8 @@
'settings.magicPrompts.page.group.sessionSummary.description': '由 /summary 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。非破壞性,不會壓縮工作階段歷史。',
'settings.magicPrompts.page.group.sessionWorkspaceReview.title': '工作區審查',
'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '由 /workspace-review 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。僅審查目前工作區中的高訊號問題。',
'settings.magicPrompts.page.group.sessionFeaturePlan.title': '功能規劃',
'settings.magicPrompts.page.group.sessionFeaturePlan.description': '由 /plan-feature 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。執行引導式對話,先調研程式碼並分小批提出釐清問題,然後產生實作計畫。',
'settings.magicPrompts.page.group.sessionFusion.title': 'Fusion',
'settings.magicPrompts.page.group.sessionFusion.description': '用於將 multi-run 輸出合併為一個最終答案的提示詞:可見使用者訊息 + 結果前的隱藏說明。',
'settings.magicPrompts.page.actions.resetting': '重設中...',
@@ -1416,6 +1416,12 @@ export const dict: Record<I18nKey, string> = {
'chat.emptyState.startNewChat': '開始新的聊天',
'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.changes.label': 'What changed recently',
'chat.draftPresets.changes.prompt': 'Summarize what changed recently — the latest commits and the current state of this branch.',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.review.label': 'Review my changes',
'chat.scrollToBottom.aria': '捲動到底部',
'chat.timeline.relative.justNow': '剛剛',
'chat.timeline.relative.minutesAgo': '{count} 分鐘前',
@@ -1476,6 +1482,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.compactDescription': '使用 AI 壓縮會話歷史以減少上下文大小',
'chat.commandAutocomplete.command.summaryDescription': '非破壞性會話總結。命令後可選填主題提示。',
'chat.commandAutocomplete.command.workspaceReviewDescription': '僅審查目前工作區中高價值的問題。',
'chat.commandAutocomplete.command.featurePlanDescription': '為新功能開始一次引導式的來回規劃工作階段。',
'chat.commandAutocomplete.badge.skill': 'Skills',
'chat.commandAutocomplete.badge.command': '命令',
'chat.commandAutocomplete.badge.system': '系統',
@@ -1591,6 +1598,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.compactFailed': '壓縮會話失敗',
'chat.chatInput.toast.summaryFailed': '生成總結失敗',
'chat.chatInput.toast.reviewFailed': '審查變更失敗',
'chat.chatInput.toast.planFeatureFailed': '無法開始功能規劃',
'chat.chatInput.toast.attachmentsTooLarge': '附件過大,無法傳送。請減少圖片數量或大小。',
'chat.chatInput.toast.sendAttachmentsFailed': '傳送附件失敗。請嘗試更少檔案或更小圖片。',
'chat.chatInput.toast.messageSendFailed': '訊息傳送失敗,附件已恢復。',
+32
View File
@@ -27,6 +27,8 @@ export type MagicPromptId =
| 'session.summary.instructions'
| 'session.review.visible'
| 'session.review.instructions'
| 'session.plan.visible'
| 'session.plan.instructions'
| 'session.fusion.visible'
| 'session.fusion.instructions';
@@ -571,6 +573,36 @@ Output:
- category: bug or rule violation
Keep the review concise and practical.`,
},
{
id: 'session.plan.visible',
title: 'Feature Planning Visible Prompt',
group: 'Session',
description: 'Visible user message sent by the /plan-feature command.',
template: 'I want to start planning a feature.',
},
{
id: 'session.plan.instructions',
title: 'Feature Planning Instructions',
group: 'Session',
description: 'Hidden instructions attached to the /plan-feature command. Runs a guided, batched-question dialogue that researches the code before producing an implementation plan.',
template: `The user wants to plan a feature through a guided, back-and-forth conversation. They will describe an idea — often briefly and informally. Your job is to turn that idea into a concrete, validated implementation plan, without guessing.
Run this as a dialogue, not a one-shot answer.
1. Understand before asking. Once the user describes the idea, first investigate the codebase yourself read the relevant files, existing patterns, data flow, and constraints. Ground every question in what the code actually shows, not in assumptions.
2. Ask in small batches. Ask at most 3 clarifying questions at a time a number a person can comfortably answer in one reply. Prefer concrete, decision-oriented questions (option A/B/C, edge cases, scope boundaries) over vague open-ended ones. Number them.
3. Keep going until it is resolved. After each batch of answers, integrate them, do any further code investigation the answers require, then ask the next batch. Continue until there are no unresolved decisions or implementation details left. Do not stop early or start summarizing prematurely.
4. Surface what the user has not considered. Proactively raise edge cases, pitfalls, affected modules, migration/backward-compatibility concerns, and trade-offs the user likely did not think about. Fold these into your questions so the user decides never silently decide for them.
5. Do not write code or begin implementing during this phase. Planning is for understanding and deciding only.
6. When everything is settled, produce the final implementation plan: a clear, ordered breakdown of the work, the files and areas affected, the decisions that were made (and why), known risks, and any remaining assumptions flagged explicitly. The plan must reflect the user's actual answers never fill gaps with guesses.
Respond in the same language the user uses.`,
},
{
id: 'session.fusion.visible',