slash 입력 계층 1차 모듈화와 Codex/Claude 추격 계획을 반영
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow 내부 대형 slash 사전을 신규 파일 SlashCommandCatalog로 분리하여 결합도를 낮춤 - ChatWindow slash 조회 경로를 카탈로그 API(MatchBuiltinCommands, TryGetEntry)로 전환 - slash 탐색/실행 동작 회귀를 build + ChatWindowSlashPolicyTests(39건)로 검증 - docs/NEXT_ROADMAP.md에 claw-code 기준 Codex/Claude 추격 로드맵(L1~L5)과 완료 기준을 추가 - docs/DEVELOPMENT.md에 연속 실행 26차 이력(2026-04-04 13:24 KST) 기록 - README.md 업데이트 시각 및 변경 이력 항목을 최신 상태로 갱신
This commit is contained in:
@@ -5037,101 +5037,6 @@ public partial class ChatWindow : Window
|
||||
|
||||
// ── 슬래시 명령어 (탭별 분류) ──
|
||||
|
||||
/// <summary>공통 슬래시 명령어 — 모든 탭에서 사용 가능.</summary>
|
||||
private static readonly Dictionary<string, (string Label, string SystemPrompt, string Tab)> SlashCommands = new(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
// 공통
|
||||
["/clear"] = ("Clear", "__CLEAR__", "all"),
|
||||
["/new"] = ("New", "__NEW__", "all"),
|
||||
["/reset"] = ("Reset", "__RESET__", "all"),
|
||||
["/status"] = ("Status", "__STATUS__", "all"),
|
||||
["/model"] = ("Model", "__MODEL__", "all"),
|
||||
["/permissions"] = ("Permissions", "__PERMISSIONS__", "all"),
|
||||
["/allowed-tools"] = ("Allowed Tools", "__ALLOWED_TOOLS__", "all"),
|
||||
["/theme"] = ("Theme", "__THEME__", "all"),
|
||||
["/color"] = ("Color", "현재 테마/색상 구성을 점검하고 가독성 중심 개선안을 제시하세요.", "all"),
|
||||
["/config"] = ("Config", "현재 설정 상태를 점검하고, 목적에 맞는 권장 설정 변경안을 제시하세요.", "all"),
|
||||
["/settings"] = ("Settings", "__SETTINGS__", "all"),
|
||||
["/session"] = ("Session", "현재 세션의 핵심 맥락과 이어서 할 일을 5개 이내로 정리하세요.", "all"),
|
||||
["/usage"] = ("Usage", "현재 사용 흐름을 개선할 수 있는 사용 팁을 간결히 제시하세요.", "all"),
|
||||
["/upgrade"] = ("Upgrade", "현재 작업/구성 기준으로 안전한 업그레이드 체크리스트를 제시하세요.", "all"),
|
||||
["/copy"] = ("Copy", "사용자가 바로 복사해 쓸 수 있는 최종 결과 형태로 간결하게 답변하세요.", "all"),
|
||||
["/rename"] = ("Rename", "__RENAME__", "all"),
|
||||
["/feedback"] = ("Feedback", "__FEEDBACK__", "all"),
|
||||
["/skills"] = ("Skills", "__SKILLS__", "all"),
|
||||
["/sandbox-toggle"] = ("Sandbox Toggle", "__SANDBOX_TOGGLE__", "all"),
|
||||
["/statusline"] = ("Statusline", "__STATUSLINE__", "all"),
|
||||
["/heapdump"] = ("Heap Dump", "__HEAPDUMP__", "all"),
|
||||
["/passes"] = ("Passes", "__PASSES__", "all"),
|
||||
["/chrome"] = ("Chrome", "__CHROME__", "all"),
|
||||
["/stickers"] = ("Stickers", "__STICKERS__", "all"),
|
||||
["/thinkback"] = ("Thinkback", "__THINKBACK__", "all"),
|
||||
["/thinkback-play"] = ("Thinkback Play", "__THINKBACK_PLAY__", "all"),
|
||||
["/exit"] = ("Exit", "현재 대화를 마무리하기 위한 요약과 다음 재개 지점을 3줄 이내로 제시하세요.", "all"),
|
||||
["/login"] = ("Login", "인증/연결 점검 절차를 단계별로 안내하세요.", "all"),
|
||||
["/logout"] = ("Logout", "안전한 로그아웃 및 세션 정리 체크리스트를 안내하세요.", "all"),
|
||||
["/desktop"] = ("Desktop", "데스크톱 실행/연결 환경 점검 체크리스트를 제시하세요.", "all"),
|
||||
["/mobile"] = ("Mobile", "모바일 연동/사용 시 주의사항과 권장 구성을 제시하세요.", "all"),
|
||||
["/ide"] = ("IDE", "IDE 연동 상태를 점검하고 생산성 향상 팁을 제시하세요.", "all"),
|
||||
["/terminal-setup"] = ("Terminal Setup", "터미널 환경 초기 설정 체크리스트를 제시하세요.", "all"),
|
||||
["/add-dir"] = ("Add Dir", "작업 디렉터리 추가 시 권장 구조와 주의사항을 제시하세요.", "all"),
|
||||
["/advisor"] = ("Advisor", "현재 요청에 대한 실행 전략을 조언자 관점으로 간결히 제시하세요.", "all"),
|
||||
["/mcp"] = ("MCP", "__MCP__", "all"),
|
||||
["/agents"] = ("Agents", "현재 작업에 적합한 에이전트 분담 전략을 제시하세요.", "all"),
|
||||
["/plugin"] = ("Plugin", "플러그인 사용/구성 상태를 점검하고 권장 구성을 제시하세요.", "all"),
|
||||
["/reload-plugins"] = ("Reload Plugins", "플러그인 재로드 전후 점검 체크리스트를 제시하세요.", "all"),
|
||||
["/output-style"] = ("Output Style", "현재 작업 목적에 맞는 출력 스타일 가이드를 제시하세요.", "all"),
|
||||
["/remote-env"] = ("Remote Env", "원격 환경 연결 시 필수 점검 항목을 제시하세요.", "all"),
|
||||
["/install-github-app"] = ("Install GitHub App", "GitHub 앱 연동 절차와 점검 항목을 제시하세요.", "all"),
|
||||
["/install-slack-app"] = ("Install Slack App", "Slack 앱 연동 절차와 점검 항목을 제시하세요.", "all"),
|
||||
["/btw"] = ("BTW", "현재 맥락에서 추가로 유용한 보조 팁을 짧게 제시하세요.", "all"),
|
||||
["/keybindings"] = ("Keybindings", "주요 단축키/입력 효율화 팁을 현재 작업 기준으로 정리하세요.", "all"),
|
||||
["/privacy-settings"] = ("Privacy", "보안/개인정보 관점의 권장 설정을 점검표 형태로 제시하세요.", "all"),
|
||||
["/rate-limit-options"] = ("Rate Limit", "요청 한도 이슈를 줄이기 위한 설정/사용 전략을 제시하세요.", "all"),
|
||||
["/release-notes"] = ("Release Notes", "최근 변경사항을 릴리즈 노트 형식으로 정리하세요.", "all"),
|
||||
["/rewind"] = ("Rewind", "직전 변경 이전 상태로 되돌릴 때의 안전 절차를 제시하세요.", "all"),
|
||||
["/tag"] = ("Tag", "현재 작업 결과를 태깅/분류하는 기준을 제안하세요.", "all"),
|
||||
["/vim"] = ("Vim", "Vim 스타일 작업 효율 팁을 현재 작업에 맞춰 제시하세요.", "all"),
|
||||
["/plan"] = ("Plan", "요청을 바로 실행하지 말고 먼저 3~7단계 실행 계획을 간결히 제시한 뒤, 사용자 승인 후 실행하세요.", "all"),
|
||||
["/memory"] = ("Memory", "대화 맥락에서 지속적으로 참고할 핵심 사실을 정리하고, 필요한 경우 memory 도구 저장/갱신 관점으로 답변하세요.", "all"),
|
||||
["/context"] = ("Context", "현재 작업 컨텍스트(목표, 제약, 현재 상태, 다음 액션)를 구조화해 요약하세요.", "all"),
|
||||
["/stats"] = ("Stats", "__STATS__", "all"),
|
||||
["/cost"] = ("Cost", "__COST__", "all"),
|
||||
["/export"] = ("Export", "__EXPORT__", "all"),
|
||||
["/compact"] = ("Compact", "__COMPACT__", "all"),
|
||||
["/summary"] = ("Summary", "사용자가 제공한 내용을 핵심 포인트 위주로 간결하게 요약해 주세요. 불릿 포인트 형식을 사용하세요.", "all"),
|
||||
["/translate"] = ("Translate", "사용자가 제공한 텍스트를 영어로 번역해 주세요. 원문의 톤과 뉘앙스를 유지하세요.", "all"),
|
||||
["/explain"] = ("Explain", "사용자가 제공한 내용을 쉽고 자세하게 설명해 주세요. 필요하면 예시를 포함하세요.", "all"),
|
||||
["/fix"] = ("Fix", "사용자가 제공한 텍스트의 맞춤법, 문법, 자연스러운 표현을 교정해 주세요. 수정 사항을 명확히 표시하세요.", "all"),
|
||||
|
||||
// Cowork/Code 전용
|
||||
["/review"] = ("Code Review", "작업 폴더의 git diff를 분석하여 코드 리뷰를 수행해 주세요. code_review 도구를 사용하세요.", "dev"),
|
||||
["/commit"] = ("Commit", "__COMMIT__", "dev"),
|
||||
["/ultrareview"] = ("Ultra Review", "작업 폴더의 변경을 P0/P1 우선순위 기준으로 강도 높게 리뷰하고, 재현 조건/수정 방향/테스트 누락까지 제시하세요.", "dev"),
|
||||
["/security-review"] = ("Security Review", "작업 폴더 코드를 보안 중심으로 점검하고 취약점/개선안을 제시하세요.", "dev"),
|
||||
["/pr"] = ("PR Summary", "작업 폴더의 변경사항을 PR 설명 형식으로 요약해 주세요. code_review(action: pr_summary) 도구를 사용하세요.", "dev"),
|
||||
["/pr-comments"] = ("PR Comments", "변경사항을 검토하고 PR 코멘트 형태로 개선 의견을 작성하세요.", "dev"),
|
||||
["/test"] = ("Test", "작업 폴더의 코드에 대한 단위 테스트를 생성해 주세요. test_loop 도구를 사용하세요.", "dev"),
|
||||
["/verify"] = ("Verify", "__VERIFY__", "dev"),
|
||||
["/structure"] = ("Structure", "작업 폴더의 프로젝트 구조를 분석하고 설명해 주세요. folder_map 도구를 사용하세요.", "dev"),
|
||||
["/build"] = ("Build", "작업 폴더의 프로젝트를 빌드해 주세요. build_run 도구를 사용하세요.", "dev"),
|
||||
["/search"] = ("Search", "작업 폴더에서 관련 코드를 검색해 주세요. search_codebase 도구를 사용하세요.", "dev"),
|
||||
["/diff"] = ("Diff", "현재 작업 폴더의 변경(diff)을 분석해 핵심 변경점과 리스크를 요약하세요.", "dev"),
|
||||
["/doctor"] = ("Doctor", "현재 프로젝트/환경의 잠재 이슈를 점검하고 우선순위별 개선안을 제시하세요.", "dev"),
|
||||
["/hooks"] = ("Hooks", "현재 훅/자동화 관련 설정을 점검하고 안전한 운영 가이드를 제시하세요.", "dev"),
|
||||
["/tasks"] = ("Tasks", "현재 작업을 태스크 단위로 분해해 우선순위와 다음 실행 항목을 제시하세요.", "dev"),
|
||||
["/branch"] = ("Branch", "현재 변경 기준으로 적절한 브랜치/커밋 전략을 제안하세요.", "dev"),
|
||||
["/files"] = ("Files", "현재 작업에서 핵심 파일과 변경 후보를 우선순위로 정리하세요.", "dev"),
|
||||
["/resume"] = ("Resume", "이전 작업 맥락을 복원한다고 가정하고 현재 상태/남은 작업을 이어서 정리하세요.", "dev"),
|
||||
["/init"] = ("Init", "프로젝트 온보딩 관점에서 초기 점검 체크리스트를 제시하세요.", "dev"),
|
||||
["/init-verifiers"] = ("Init Verifiers", "검증 자동화(빌드/테스트/리뷰) 초기 구성을 위한 체크리스트를 제시하세요.", "dev"),
|
||||
["/effort"] = ("Effort", "현재 요청의 난이도와 권장 추론 강도를 제안하세요.", "dev"),
|
||||
["/fast"] = ("Fast", "속도 우선 모드로 진행할 때의 최소 안전 절차를 제시하세요.", "dev"),
|
||||
|
||||
// 특수
|
||||
["/help"] = ("Help", "__HELP__", "all"),
|
||||
};
|
||||
|
||||
private void InputBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
UpdateWatermarkVisibility();
|
||||
@@ -5147,11 +5052,7 @@ public partial class ChatWindow : Window
|
||||
bool isDev = _activeTab is "Cowork" or "Code";
|
||||
|
||||
// 내장 슬래시 명령어 매칭 (탭 필터)
|
||||
var matches = SlashCommands
|
||||
.Where(kv => kv.Key.StartsWith(text, StringComparison.OrdinalIgnoreCase))
|
||||
.Where(kv => kv.Value.Tab == "all" || (isDev && kv.Value.Tab == "dev"))
|
||||
.Select(kv => (Cmd: kv.Key, Label: kv.Value.Label, IsSkill: false))
|
||||
.ToList();
|
||||
var matches = SlashCommandCatalog.MatchBuiltinCommands(text, isDev);
|
||||
|
||||
// 스킬 슬래시 명령어 매칭 (탭별 필터)
|
||||
if (_settings.Settings.Llm.EnableSkillSystem)
|
||||
@@ -5742,7 +5643,7 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
var firstSpace = trimmed.IndexOf(' ');
|
||||
var commandToken = (firstSpace >= 0 ? trimmed[..firstSpace] : trimmed).Trim();
|
||||
if (SlashCommands.TryGetValue(commandToken, out var entry))
|
||||
if (SlashCommandCatalog.TryGetEntry(commandToken, out var entry))
|
||||
{
|
||||
// __HELP__는 특수 처리 (ParseSlashCommand에서는 무시)
|
||||
if (entry.SystemPrompt == "__HELP__") return (null, input);
|
||||
@@ -16671,3 +16572,4 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user