Resolve Windows 8.3 short filename (RUNNER~1 vs runneradmin) mismatches
by applying fs.realpath on both sides of assertions. Fix backslash path
separator in logger browser-import test expectations.
Made-with: Cursor
- bundle-mcp.test.ts: cast args to string[] to fix TS7053, use
fs.realpath for Windows 8.3 short-name path resolution
- vitest.config.ts: raise testTimeout to 240s on Windows (hookTimeout
was already raised; several provider-usage and auth-choice tests
exceed 120s on the single-worker Windows runner)
Made-with: Cursor
- Use raw messages.length (before NO_REPLY filter) for chatHistoryTruncated
so a full 25-message page with filtered entries still shows truncation notice.
- Raise sessions.list limit for chat refresh from 40 to 60 so the active
session is more likely included in the list for metadata (reasoning level, etc.).
Made-with: Cursor
- Add chatHistoryTruncated state; set when response length >= request limit.
- Show 'Showing last 25 messages (older messages not loaded).' in chat view
when history was truncated, so users see that context may be missing.
Made-with: Cursor
- Move CHAT_HISTORY_REQUEST_LIMIT to module scope (align with views/chat.ts).
- Apply chatMessages synchronously; drop requestAnimationFrame to avoid
overwriting later mutations (e.g. user message or second load).
Made-with: Cursor
- Request at most 25 messages from chat.history (was 200) to reduce payload
size and JSON parse cost in the browser.
- Cap rendered chat history at 25 messages to avoid main-thread freeze
from rendering many markdown messages (fixes 'tab unresponsive').
- Defer applying messages with requestAnimationFrame so the UI can paint
'Loading chat...' before the heavy render.
- Cap sessions.list to 40 when loading the chat tab to avoid large
session dropdown response.
Helps address #10622 (Webchat UI freezes when loading sessions with
many messages). Gateway already caps payload size (#18505); this adds
client-side limits so the Control UI stays responsive with long
sessions.
Made-with: Cursor
Add JAVA_TOOL_OPTIONS, _JAVA_OPTIONS, JDK_JAVA_OPTIONS, PYTHONBREAKPOINT, and
DOTNET_STARTUP_HOOKS to blockedKeys in the host exec security policy.
Closes#22681
The "treats bundle MCP as a supported bundle surface" test was missing
the useNoBundledPlugins() call present in all surrounding bundle plugin
tests. Without it, loadOpenClawPlugins() scanned and loaded the full
real bundled plugins directory on every call (with cache:false), causing
excessive memory pressure and an OOM crash on Linux CI, which manifested
as the test timing out at 120s.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>