feat: Plan-Modus – Toggle im Chat zum Umschalten zwischen Plan/Ausführung
- Toggle-Button (🗺️) im Chat-Input-Bereich neben Explorer - Plan-Modus wird per ChatRequest.planMode an Backend gesendet - Backend: Write-Tools gefiltert (nur read_file, list_files, glob, grep, todo_write, memory_*, ask_user_choice bleiben), System-Prompt-Block ergänzt der Änderungen verbietet, tool_choice nie 'any' erzwungen - ChainRecord.PlanMode: pro Chain gespeichert (informativ für History) - Chain-Meta-Badge '📋 Plan-Modus' bei Plan-Chains - Choice-Response erbt planMode vom vorherigen Chain - CSS: .plan-mode-active Styling (Primary-Color Highlight) - Placeholder wechselt zu 'Plannen...' wenn aktiv - Plan-Modus wird bei Session-Wechsel zurückgesetzt
This commit is contained in:
1 parent
1c11ffa3cd
commit
6d95f9aec2
13 files changed
+123
-13
No files matched your search
+19
-1
@@ -2,6 +2,7 @@
|
||||
|
||||
function buildMetaBadges(d) {
|
||||
const badges = [];
|
||||
if (d.planMode) badges.push('📋 Plan-Modus');
|
||||
badges.push(prettyModelName(d.model));
|
||||
badges.push('Tokens: ' + (d.inputTokens || 0) + ' / ' + (d.outputTokens || 0));
|
||||
if (d.cacheCreationTokens > 0 || d.cacheReadTokens > 0) {
|
||||
@@ -137,6 +138,23 @@ function handleStreamEvent(eventType, data) {
|
||||
}
|
||||
}
|
||||
|
||||
// ── Plan Mode ──
|
||||
|
||||
let _planModeActive = false;
|
||||
|
||||
function togglePlanMode() {
|
||||
_planModeActive = !_planModeActive;
|
||||
var btn = $('#planModeBtn');
|
||||
if (btn) {
|
||||
btn.classList.toggle('plan-mode-active', _planModeActive);
|
||||
btn.title = _planModeActive ? 'Plan-Modus deaktivieren' : 'Plan-Modus aktivieren';
|
||||
}
|
||||
var input = $('#input');
|
||||
if (input) {
|
||||
input.placeholder = _planModeActive ? 'Plannen...' : 'Nachricht...';
|
||||
}
|
||||
}
|
||||
|
||||
// ── Chat State ──
|
||||
|
||||
let isStreaming = false;
|
||||
@@ -254,7 +272,7 @@ async function sendMessage() {
|
||||
_chatAbandoned = false;
|
||||
|
||||
try {
|
||||
const resp = await apiChat(content, getCurrentSessionId(), _abortController.signal);
|
||||
const resp = await apiChat(content, getCurrentSessionId(), _abortController.signal, _planModeActive);
|
||||
const reader = resp.body.getReader();
|
||||
const decoder = new TextDecoder();
|
||||
let buffer = '';
|
||||
|
||||
Reference in new issue
Block a user