mirror of
https://github.com/nearai/ironclaw.git
synced 2026-09-02 23:56:24 +08:00
* feat(web): add debug inspector panel for web gateway chat UI (#1493) Add a debug inspector sidebar with three tabs (Prompt, Activity, Stats) activated via ?debug=true URL parameter. Consolidate theme-init.js into a new init.js for early initialization. The panel shows real-time SSE event timeline, system prompt component breakdown with token estimates, and session-wide statistics including per-model usage. - New files: init.js, debug-panel.js, debug-panel.css - New endpoint: /api/debug/debug/prompt for system prompt inspection - i18n support (en + zh-CN) for all debug panel strings - Responsive layout: sidebar on desktop, overlay on tablet, hidden on mobile * chore: minor * feat(web): add debug inspection endpoints and verbose SSE mode (#1492) Add per-subscriber verbose filtering to SSE, new AppEvent variants (ToolResultFull, TurnMetrics), and enhanced debug prompt endpoint. Debug subscribers (?debug=true) receive full tool output, per-LLM-call metrics with model/duration/cache tokens, and tool parameters on success. Non-debug subscribers see no change (backward compatible). - New AppEvent variants: tool_result_full, turn_metrics with is_verbose_only() - SseManager.subscribe()/subscribe_raw() accept verbose flag - Emit TurnMetrics from dispatcher after each LLM call - Emit ToolResultFull with 50KB cap after tool execution - tool_completed() always includes redacted parameters - /api/debug/prompt returns system_prompt, model, context_limit - Frontend: turn-based activity tracking, turn navigation, message click - Frontend: prompt tab with model name, progress bar, full prompt view - Unit test for verbose SSE filtering * fix(debug-panel): start turn counter at 0 so first message shows turn 1 * chore: minor * chore: minor * chore: fix lint * fix(i18n): add Korean debug panel translations and fix hardcoded string * fix(i18n): add Korean debug panel translations and fix hardcoded string * fix: fix lint * fix(web): propagate call_id to SSE events, gate debug mode on admin role, and skip verbose broadcasts without subscribers - Add call_id field to AppEvent::ToolStarted/ToolCompleted/ToolResult and propagate from StatusUpdate conversion instead of silently dropping it, fixing mismatched tool start/complete pairs during concurrent same-name tool calls in the debug panel - Update debug-panel.js to key pending tools by call_id (flat map) instead of FIFO name-based queues - Skip ToolResultFull/TurnMetrics allocation and broadcast when no SSE/WebSocket subscribers are connected (SseManager::has_receivers) - Require admin role for verbose/debug SSE and WebSocket event streams, matching the existing AdminUser gate on /api/debug/prompt - Add audit log (tracing::debug) on debug prompt endpoint access * fix(gateway): add admin gate to WS debug mode, add call_id to ToolResultFull, fix debug panel i18n - Require admin role for WebSocket debug mode (server.rs), matching the existing SSE handler check — prevents non-admin users from receiving verbose tool output via ?debug=true - Add call_id: Option<String> to StatusUpdate::ToolResultFull and AppEvent::ToolResultFull for correct concurrent same-name tool matching; update dispatcher, web gateway conversion, and debug-panel.js - Remove dead chat_ws_handler from handlers/chat.rs (superseded by server.rs local version) - Fix debug panel overlay blocking page on viewport resize by switching from inline style to CSS class toggle with transparent background - Internationalize hardcoded English strings in debug panel (In/Out/ Cost/Model/Cache labels) with en/ko/zh-CN translations - Fix activity entries not updating on language switch: store labelKey, resolve during render without mutating entry, rebuild activity DOM in refreshDynamicI18n - Fix pre-existing subscribe_raw() test compilation errors (missing verbose parameter) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Illia Polosukhin <ilblackdragon@gmail.com>