{"type":"system","subtype":"init","cwd":"./bench/results/mcp-with-toolsearch/find_fix_for_bug/run4/workspace","session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","tools":["Task","TaskOutput","Bash","Glob","Grep","ExitPlanMode","Read","Edit","Write","NotebookEdit","WebFetch","TodoWrite","WebSearch","TaskStop","AskUserQuestion","Skill","EnterPlanMode","EnterWorktree","ExitWorktree","CronCreate","CronDelete","CronList","ToolSearch","mcp__chrome-devtools__click","mcp__chrome-devtools__close_page","mcp__chrome-devtools__drag","mcp__chrome-devtools__emulate","mcp__chrome-devtools__evaluate_script","mcp__chrome-devtools__fill","mcp__chrome-devtools__fill_form","mcp__chrome-devtools__get_console_message","mcp__chrome-devtools__get_network_request","mcp__chrome-devtools__handle_dialog","mcp__chrome-devtools__hover","mcp__chrome-devtools__lighthouse_audit","mcp__chrome-devtools__list_console_messages","mcp__chrome-devtools__list_network_requests","mcp__chrome-devtools__list_pages","mcp__chrome-devtools__navigate_page","mcp__chrome-devtools__new_page","mcp__chrome-devtools__performance_analyze_insight","mcp__chrome-devtools__performance_start_trace","mcp__chrome-devtools__performance_stop_trace","mcp__chrome-devtools__press_key","mcp__chrome-devtools__resize_page","mcp__chrome-devtools__select_page","mcp__chrome-devtools__take_memory_snapshot","mcp__chrome-devtools__take_screenshot","mcp__chrome-devtools__take_snapshot","mcp__chrome-devtools__type_text","mcp__chrome-devtools__upload_file","mcp__chrome-devtools__wait_for","mcp__github__add_comment_to_pending_review","mcp__github__add_issue_comment","mcp__github__add_reply_to_pull_request_comment","mcp__github__assign_copilot_to_issue","mcp__github__create_branch","mcp__github__create_or_update_file","mcp__github__create_pull_request","mcp__github__create_pull_request_with_copilot","mcp__github__create_repository","mcp__github__delete_file","mcp__github__fork_repository","mcp__github__get_commit","mcp__github__get_copilot_job_status","mcp__github__get_file_contents","mcp__github__get_label","mcp__github__get_latest_release","mcp__github__get_me","mcp__github__get_release_by_tag","mcp__github__get_tag","mcp__github__get_team_members","mcp__github__get_teams","mcp__github__issue_read","mcp__github__issue_write","mcp__github__list_branches","mcp__github__list_commits","mcp__github__list_issue_types","mcp__github__list_issues","mcp__github__list_pull_requests","mcp__github__list_releases","mcp__github__list_tags","mcp__github__merge_pull_request","mcp__github__pull_request_read","mcp__github__pull_request_review_write","mcp__github__push_files","mcp__github__request_copilot_review","mcp__github__run_secret_scanning","mcp__github__search_code","mcp__github__search_issues","mcp__github__search_pull_requests","mcp__github__search_repositories","mcp__github__search_users","mcp__github__sub_issue_write","mcp__github__update_pull_request","mcp__github__update_pull_request_branch","ListMcpResourcesTool","ReadMcpResourceTool","LSP"],"mcp_servers":[{"name":"chrome-devtools","status":"connected"},{"name":"github","status":"connected"},{"name":"claude.ai Google Calendar","status":"needs-auth"},{"name":"claude.ai Gmail","status":"needs-auth"}],"model":"claude-sonnet-4-6","permissionMode":"bypassPermissions","slash_commands":["update-config","debug","simplify","batch","loop","claude-api","test-driven-development","app-installer","release-notify-issues","cli-demo-recorder","readme-generator","compact","context","cost","heapdump","init","pr-comments","release-notes","review","security-review","extra-usage","insights","mcp__github__AssignCodingAgent","mcp__github__issue_to_fix_workflow"],"apiKeySource":"none","claude_code_version":"2.1.77","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan","claude-code-guide"],"skills":["update-config","debug","simplify","batch","loop","claude-api","test-driven-development","app-installer","release-notify-issues","cli-demo-recorder","readme-generator"],"plugins":[{"name":"rust-analyzer-lsp","path":"~/.claude/plugins/rust-analyzer-lsp/1.0.0"}],"uuid":"3f627491-323e-4496-8dae-dc94ddfb11f9","fast_mode_state":"off"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NZpKnyxjxLSfNt4m2PBxyA","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me find the most recent open issue in openclaw/openclaw labeled 'bug', then check if any open PRs reference that issue number.","signature":"EqsCCkYICxgCKkCz2rWOs2/e+QkHzZomaDYfetUtnfQnQU+XeZ8jyoXLXDaORtVzbKGfApW67qGLjjUe9HnpMOpXtOmhjsAWrz1aEgw/rYGmjXfJ/NkAzX0aDO144VxAFMYvSQLALyIwHmkA4KqpIXzhvWAP/AWFjQU5fCQhr+Lt8Q77xBsI7IJ6MjftLr94OEia0MuAS8jOKpIB+GSUb+19jtaAHMgm7i660pmBuhbEQtF3yx0Q4qXYKHxM0EzT4hRXa1UAes/20akCU9GEqfv68B1BGs0fIsTSU/3YpD5uZqdDozBg+GmOxKuIudxGX1j/wPC+NbG6UO/yh4qnwTZGBV/vR6a4Lrz11uO2DdJFKv0/+SM17lD0CdpFgch83C5UWlfVYxOg2fdnKnUYAQ=="}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":7851,"cache_read_input_tokens":8598,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":7851},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"629ac981-4fcc-4578-83f7-648bfb0716c3"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NZpKnyxjxLSfNt4m2PBxyA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01D8EHra4noDowrp1D1RRFhq","name":"ToolSearch","input":{"query":"select:mcp__github__list_issues,mcp__github__list_pull_requests","max_results":2},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":7851,"cache_read_input_tokens":8598,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":7851},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"a7728282-b312-4e7b-9a17-c026f152ca89"}
{"type":"user","message":{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01D8EHra4noDowrp1D1RRFhq","content":[{"type":"tool_reference","tool_name":"mcp__github__list_issues"},{"type":"tool_reference","tool_name":"mcp__github__list_pull_requests"}]}]},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"98081b2b-3311-4313-8345-fb5f87619500","timestamp":"2026-03-21T19:29:54.565Z","tool_use_result":{"matches":["mcp__github__list_issues","mcp__github__list_pull_requests"],"query":"select:mcp__github__list_issues,mcp__github__list_pull_requests","total_deferred_tools":90}}
{"type":"rate_limit_event","rate_limit_info":{"status":"allowed","resetsAt":1774126800,"rateLimitType":"five_hour","overageStatus":"rejected","overageDisabledReason":"org_level_disabled","isUsingOverage":false},"uuid":"6843d2d1-efed-425a-b2d1-55adeebbb9a4","session_id":"1939cb92-4311-4071-bcf1-89397a2748f2"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0155agHfZiySWGEX9wwfsui3","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Now let me fetch the most recent open bug issue and open PRs in parallel.","signature":"EvEBCkYICxgCKkCDyT3UZYsUyJS5SVc5BFAlJK4XD9HbApexg8uFUw4ieywJz/SFkS0xBQ6nlWy89hw4rSlQeEyND4cYvKrDMNRSEgzXwl4piaYpn8hle+saDERT/DYOMh3L14UC7CIw2/BWz9a2afq3rxrX+YRtms2aXljvL8/JPDThGGNaqRfuLdN0ycsgL2bnIev9KCSOKlmWo+k+ixi5w1uAaxA1xFWQusjwjoFnR1/YLWm13cJzgYg/wgrS9Tp5MVbp1zJeDvfnQkXHSwPrthv3DSwnTx67a9uSSgufnhUrwPdbH5il8djOBxZnwFsUOxgB"}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":866,"cache_read_input_tokens":16449,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":866},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"900a9e02-ae0c-4981-b8e3-d1a30a064d7d"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0155agHfZiySWGEX9wwfsui3","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0185C6jvrjTai7gMy3UWYKwC","name":"mcp__github__list_issues","input":{"owner":"openclaw","repo":"openclaw","state":"OPEN","labels":["bug"],"orderBy":"CREATED_AT","direction":"DESC","perPage":1},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":866,"cache_read_input_tokens":16449,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":866},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"e0853b79-40e8-47c3-95fa-11f00aaa2384"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0155agHfZiySWGEX9wwfsui3","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01X4UjxrZkAfiRubX4PcyVz6","name":"mcp__github__list_pull_requests","input":{"owner":"openclaw","repo":"openclaw","state":"open","perPage":100},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":866,"cache_read_input_tokens":16449,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":866},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"1a22733f-159c-4829-93aa-172df381c754"}
{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_0185C6jvrjTai7gMy3UWYKwC","type":"tool_result","content":[{"type":"text","text":"{\"issues\":[{\"number\":51824,\"title\":\"[Bug]: Control UI: Model selector incorrectly maps bailian models to qwen-portal provider\",\"body\":\"### Bug type\\n\\nRegression (worked before, now fails)\\n\\n### Summary\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Steps to reproduce\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Expected behavior\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Actual behavior\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### OpenClaw version\\n\\nv2026.3.13\\n\\n### Operating system\\n\\nwin11\\n\\n### Install method\\n\\n_No response_\\n\\n### Model\\n\\n1\\n\\n### Provider / routing chain\\n\\n1\\n\\n### Additional provider/model setup details\\n\\n_No response_\\n\\n### Logs, screenshots, and evidence\\n\\n```shell\\n\\n```\\n\\n### Impact and severity\\n\\n_No response_\\n\\n### Additional information\\n\\n_No response_\",\"state\":\"OPEN\",\"user\":{\"login\":\"jiahaijiang\"},\"labels\":[\"bug\",\"regression\"],\"comments\":1,\"created_at\":\"2026-03-21T19:00:24Z\",\"updated_at\":\"2026-03-21T19:18:41Z\"}],\"totalCount\":1957,\"pageInfo\":{\"hasNextPage\":true,\"hasPreviousPage\":false,\"startCursor\":\"Y3Vyc29yOnYyOpK5MjAyNi0wMy0yMVQxMjowMDoyNC0wNzowMM71Lebr\",\"endCursor\":\"Y3Vyc29yOnYyOpK5MjAyNi0wMy0yMVQxMjowMDoyNC0wNzowMM71Lebr\"}}"}]}]},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"803ae091-12e6-4eda-8641-54972223ca88","timestamp":"2026-03-21T19:30:00.966Z","tool_use_result":[{"type":"text","text":"{\"issues\":[{\"number\":51824,\"title\":\"[Bug]: Control UI: Model selector incorrectly maps bailian models to qwen-portal provider\",\"body\":\"### Bug type\\n\\nRegression (worked before, now fails)\\n\\n### Summary\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Steps to reproduce\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Expected behavior\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### Actual behavior\\n\\n## Bug Description\\n\\nWhen selecting a bailian provider model (e.g., `bailian/qwen3.5-plus`) from the Control UI model dropdown, the UI incorrectly sends the model ID to the backend as `qwen-portal/qwen3.5-plus` instead of `bailian/qwen3.5-plus`.\\n\\nThis causes the error: `Failed to set model: GatewayRequestError: model not allowed: qwen-portal/qwen3.5-plus`\\n\\n## Steps to Reproduce\\n\\n1. Configure OpenClaw with multiple providers (e.g., qwen-portal and bailian)\\n2. Open Control UI\\n3. Select a bailian model from the dropdown (e.g., \\u0026#34;qwen3.5-plus · bailian\\u0026#34;)\\n4. Observe the error message\\n\\n## Expected Behavior\\n\\nThe UI should send the correct full model ID (`bailian/qwen3.5-plus`) to the backend when a bailian model is selected.\\n\\n## Actual Behavior\\n\\nThe UI sends `qwen-portal/qwen3.5-plus` (wrong provider) to the backend.\\n\\n## Workaround\\n\\nAfter selecting the bailian model, click \\u0026#34;Refresh Chat Data\\u0026#34; to reset the UI state. The model then works correctly.\\n\\n## Environment\\n\\n- OpenClaw Version: 2026.3.13\\n- OS: Linux (WSL2)\\n- Browser: Control UI (web-based)\\n- Configuration: Multiple providers (qwen-portal with OAuth, bailian with API key)\\n\\n## Additional Context\\n\\n- The bug only affects non-primary provider models\\n- Models from the first provider (qwen-portal) work correctly\\n- The UI displays the correct provider name in the dropdown, but the internal mapping is incorrect\\n- This appears to be a frontend JavaScript bug in the model selector component\\n\\n### OpenClaw version\\n\\nv2026.3.13\\n\\n### Operating system\\n\\nwin11\\n\\n### Install method\\n\\n_No response_\\n\\n### Model\\n\\n1\\n\\n### Provider / routing chain\\n\\n1\\n\\n### Additional provider/model setup details\\n\\n_No response_\\n\\n### Logs, screenshots, and evidence\\n\\n```shell\\n\\n```\\n\\n### Impact and severity\\n\\n_No response_\\n\\n### Additional information\\n\\n_No response_\",\"state\":\"OPEN\",\"user\":{\"login\":\"jiahaijiang\"},\"labels\":[\"bug\",\"regression\"],\"comments\":1,\"created_at\":\"2026-03-21T19:00:24Z\",\"updated_at\":\"2026-03-21T19:18:41Z\"}],\"totalCount\":1957,\"pageInfo\":{\"hasNextPage\":true,\"hasPreviousPage\":false,\"startCursor\":\"Y3Vyc29yOnYyOpK5MjAyNi0wMy0yMVQxMjowMDoyNC0wNzowMM71Lebr\",\"endCursor\":\"Y3Vyc29yOnYyOpK5MjAyNi0wMy0yMVQxMjowMDoyNC0wNzowMM71Lebr\"}}"}]}
{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01X4UjxrZkAfiRubX4PcyVz6","type":"tool_result","content":"Error: result (291,374 characters) exceeds maximum allowed tokens. Output has been saved to ~/.claude/projects/..."}]},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"58040fc1-738b-434e-aacd-9e1d61f171b9","timestamp":"2026-03-21T19:30:02.691Z","tool_use_result":"Error: result (291,374 characters) exceeds maximum allowed tokens. Output has been saved to ~/.claude/projects/..."}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SJY3R4HApJExdWeMmqNmKd","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The issue is #51824. Now I need to search through the PRs for any that reference \"#51824\" or \"51824\". The PR list is too large, so let me search within the file for \"51824\".","signature":"EtYCCkYICxgCKkBiCPPofDua2UtbeeuCPGYSgLNPwVUQ0zhaMq5/CyrHTfjkTXmxsK+N1uUZ1lTCqJ0a5vtCEoT44Vd/Ir5MMGH6Egyb4EWyUaIj848ySbMaDOqobg4AC3RfsyTI3yIwUw7uVGdb3oF8htyJm6qQl2k5XB24eiZhbFnm+kiodQHpivUdJNqZICpgv3AciY8PKr0B0FvPAAcNoxrVgUgoRHfVD+zZzEiZHlBvVn6sHmLT3jsB5StxLkf9GroPvnAHBEbIVlNjiLiWA0//5QObxGzWEvIgVIl2k7xEa2Jlr5RoP5LEaiopA2J/0A/p+vbFtCm7V6SOjLgojxYaZkSHWREJRv9xllwhY1QsYLOfiTYXCVNPjAC/38hyS4cd6wVnO+5DzJUZZBquOvY1vKXEfxCWSOhFnIVOrPm+Mw0tf37X68Uj9V8twH3hIPJLiNH0GAE="}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3099,"cache_read_input_tokens":17315,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":3099},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"c1d79da9-5101-4fc4-9c3e-483b62d5e2d0"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SJY3R4HApJExdWeMmqNmKd","type":"message","role":"assistant","content":[{"type":"text","text":"The bug issue is #51824. Now let me search the PR list for any references to it."}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3099,"cache_read_input_tokens":17315,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":3099},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"53677dc9-b29a-4ad1-ba39-840a3073e02b"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SJY3R4HApJExdWeMmqNmKd","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013pC5ifPeaiYohPQWz9UoWg","name":"Bash","input":{"command":"grep -i \"51824\" ~/.claude/projects/...","description":"Search PR list for issue #51824 references"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3099,"cache_read_input_tokens":17315,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":3099},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"14a7bfb9-d1c0-47ac-8935-bbef5d696a20"}
{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013pC5ifPeaiYohPQWz9UoWg","type":"tool_result","content":"<persisted-output>\nOutput too large (287KB). Full output saved to: ~/.claude/projects/..."text\": \"[{\\\"number\\\":51840,\\\"title\\\":\\\"docs: Add Lia Memory Engine to community plugins\\\",\\\"body\\\":\\\"## Summary\\\\n- Adds Lia Memory Engine to the community plugins listing\\\\n- Published on npm as `@kavinbmittal/lia-memory-engine`\\\\n- Source at [github.com/kavinbmittal/lia-memory-engine](https://github.com/kavinbmittal/lia-memory-engine)\\\\n\\\\nContext engine plugin with structured compaction via Haiku, auto-flush to daily transcripts, and hybrid BM25 + vector auto-retrieval powered by QMD.\\\\n\\\\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51840\\\",\\\"user\\\":{\\\"login\\\":\\\"kavinbmittal\\\",\\\"id\\\":260225775,\\\"profile_url\\\":\\\"https://github.com/kavinbmittal\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/260225775?v=4\\\"},\\\"labels\\\":[\\\"docs\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"add-lia-memory-engine\\\",\\\"sha\\\":\\\"0347e374b90400734837cd1f8456ac4a297c9110\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"kavinbmittal/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:26:54Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:29:40Z\\\"},{\\\"number\\\":51839,\\\"title\\\":\\\"docs(i18n): 添加中文 README 和快速开始指南翻译\\\",\\\"body\\\":\\\"## 变更概述\\\\n本 PR 添加了 OpenClaw 项目的中文文档翻译，包括：\\\\n\\\\n1. **README.md 完整翻译** (`docs/zh-CN/README.md`)\\\\n   - 项目介绍和核心功能\\\\n   - 安装和配置指南\\\\n   - 所有渠道和平台说明\\\\n   - 安全模型和配置示例\\\\n   - 完整的文档链接索引\\\\n\\\\n2. **翻译报告** (`docs/zh-CN/TRANSLATION_REPORT.md`)\\\\n   - 记录翻译原则和术语处理\\\\n   - 翻译质量说明\\\\n   - 后续改进建议\\\\n\\\\n3. **快速开始指南** (`docs/zh-CN/start/quickstart.md`)\\\\n   - 已存在，质量良好\\\\n\\\\n## 翻译原则\\\\n\\\\n### 术语处理\\\\n- **保留英文**: API、PR、Issue、CLI、Gateway、Canvas、Skills、WebChat、Node、DM、OAuth 等技术术语\\\\n- **翻译为中文**: Age\n...\n</persisted-output>","is_error":false}]},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"07c35cd1-14a2-486c-b47b-c9ef9b87a97d","timestamp":"2026-03-21T19:30:11.032Z","tool_use_result":{"stdout":"    \"text\": \"[{\\\"number\\\":51840,\\\"title\\\":\\\"docs: Add Lia Memory Engine to community plugins\\\",\\\"body\\\":\\\"## Summary\\\\n- Adds Lia Memory Engine to the community plugins listing\\\\n- Published on npm as `@kavinbmittal/lia-memory-engine`\\\\n- Source at [github.com/kavinbmittal/lia-memory-engine](https://github.com/kavinbmittal/lia-memory-engine)\\\\n\\\\nContext engine plugin with structured compaction via Haiku, auto-flush to daily transcripts, and hybrid BM25 + vector auto-retrieval powered by QMD.\\\\n\\\\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51840\\\",\\\"user\\\":{\\\"login\\\":\\\"kavinbmittal\\\",\\\"id\\\":260225775,\\\"profile_url\\\":\\\"https://github.com/kavinbmittal\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/260225775?v=4\\\"},\\\"labels\\\":[\\\"docs\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"add-lia-memory-engine\\\",\\\"sha\\\":\\\"0347e374b90400734837cd1f8456ac4a297c9110\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"kavinbmittal/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:26:54Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:29:40Z\\\"},{\\\"number\\\":51839,\\\"title\\\":\\\"docs(i18n): 添加中文 README 和快速开始指南翻译\\\",\\\"body\\\":\\\"## 变更概述\\\\n本 PR 添加了 OpenClaw 项目的中文文档翻译，包括：\\\\n\\\\n1. **README.md 完整翻译** (`docs/zh-CN/README.md`)\\\\n   - 项目介绍和核心功能\\\\n   - 安装和配置指南\\\\n   - 所有渠道和平台说明\\\\n   - 安全模型和配置示例\\\\n   - 完整的文档链接索引\\\\n\\\\n2. **翻译报告** (`docs/zh-CN/TRANSLATION_REPORT.md`)\\\\n   - 记录翻译原则和术语处理\\\\n   - 翻译质量说明\\\\n   - 后续改进建议\\\\n\\\\n3. **快速开始指南** (`docs/zh-CN/start/quickstart.md`)\\\\n   - 已存在，质量良好\\\\n\\\\n## 翻译原则\\\\n\\\\n### 术语处理\\\\n- **保留英文**: API、PR、Issue、CLI、Gateway、Canvas、Skills、WebChat、Node、DM、OAuth 等技术术语\\\\n- **翻译为中文**: Agent→智能体、Channel→渠道、Session→会话、Workspace→工作区、Onboarding→新手引导等\\\\n\\\\n### 品牌名称\\\\n所有品牌和产品名称保持原文，如：OpenClaw、Discord、WhatsApp、Telegram、macOS、iOS、Android 等\\\\n\\\\n### 格式保持\\\\n- ✅ 保持 Markdown 格式\\\\n- ✅ 保持所有链接（指向英文原文档）\\\\n- ✅ 保持代码块和示例\\\\n- ✅ 保持表格和徽章\\\\n\\\\n## 动机\\\\n随着 OpenClaw 在中文用户中的普及，提供中文文档可以：\\\\n1. 降低中文用户的使用门槛\\\\n2. 提高文档的可读性和理解度\\\\n3. 促进中文社区的建设和贡献\\\\n4. 展示项目的国际化支持\\\\n\\\\n## 测试\\\\n- [x] 检查所有链接有效性\\\\n- [x] 验证 Markdown 格式正确性\\\\n- [x] 确认代码示例保持原样\\\\n- [x] 核对术语翻译一致性\\\\n\\\\n## 后续工作\\\\n1. 根据社区反馈优化翻译质量\\\\n2. 逐步翻译其他核心文档\\\\n3. 建立中文文档术语表\\\\n\\\\n---\\\\n*AI-assisted translation.*\\\\n*Co-authored-by: JARVIS *\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51839\\\",\\\"user\\\":{\\\"login\\\":\\\"MarsResearcher\\\",\\\"id\\\":223070258,\\\"profile_url\\\":\\\"https://github.com/MarsResearcher\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/223070258?v=4\\\"},\\\"labels\\\":[\\\"docs\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"docs/zh-cn-readme\\\",\\\"sha\\\":\\\"dfd6d539a0f3be2ceb9705ac60d8f3592c1b2a2f\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"MarsResearcher/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:24:56Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:28:30Z\\\"},{\\\"number\\\":51838,\\\"title\\\":\\\"fix: three memory leak fixes (seqByRun, session-manager-cache, orphaned chat buffers)\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\nThree memory leak fixes identified from community issue reports:\\\\n\\\\n### 1. fix(agent-events): delete seqByRun entry in clearAgentRunContext\\\\n**Issue:** #51819 - `seqByRun` Map in `src/infra/agent-events.ts` stores one entry per `runId` but was never cleaned up, causing unbounded Map growth.\\\\n\\\\n**Fix:** Added `state.seqByRun.delete(runId)` in `clearAgentRunContext()` alongside the existing `runContextById` cleanup.\\\\n\\\\n### 2. fix(session-manager-cache): delete expired entries\\\\n**Issue:** #51820 - `SESSION_MANAGER_CACHE` entries were checked for TTL but never deleted when expired, causing the Map to grow indefinitely.\\\\n\\\\n**Fix:** When TTL check fails in `isSessionManagerCached()`, the expired entry is now deleted inline.\\\\n\\\\n### 3. fix(server): sweep orphaned chat buffers and deltaLastBroadcastLen\\\\n**Issue:** #51821 - `chatRunState.buffers` entries for stuck runs (where `emitChatFinal` never fired, e.g. LLM timeout) were never cleaned up, contributing to V8 heap exhaustion.\\\\n\\\\n**Fix:** Added orphaned buffer sweep in the maintenance timer: entries in `chatDeltaSentAt` older than `ABORTED_RUN_TTL_MS` that are not tracked in `abortedRuns` are now cleaned up. Also added `deltaLastBroadcastLen` sweep (previously only cleaned in `emitChatFinal`).\\\\n\\\\n## Tests\\\\n- `src/infra/agent-events.test.ts`: 8/8 passed\\\\n- `src/gateway/server-maintenance.test.ts`: 3/3 passed\\\\n\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51838\\\",\\\"user\\\":{\\\"login\\\":\\\"rockcent\\\",\\\"id\\\":128210877,\\\"profile_url\\\":\\\"https://github.com/rockcent\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/128210877?v=4\\\"},\\\"labels\\\":[\\\"gateway\\\",\\\"agents\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"10a82cccdd5655b428d733e2cf8f10d798fb51c1\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"rockcent/openclaw-1\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:24:35Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:27:46Z\\\"},{\\\"number\\\":51836,\\\"title\\\":\\\"fix(slack): resolve cross-boundary imports breaking Docker runtime\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\n- Fix Slack extension failing to load in Docker with `Cannot find module \\\\u0026#39;../../../src/plugin-sdk/slack.js\\\\u0026#39;`\\\\n- Route `extensions/slack/src/runtime-api.ts` imports through `openclaw/plugin-sdk/` and local extension modules instead of removed `../../../src/plugin-sdk/slack.js` paths\\\\n- Expose missing helpers through existing plugin-sdk subpaths (`status-helpers`, `channel-pairing`, `channel-config-schema`)\\\\n- Move `looksLikeSlackTargetId` and `normalizeSlackMessagingTarget` into the extension\\\\u0026#39;s own `targets.ts`\\\\n- Add boundary guard test that catches `../../../src/` imports in extension source files (allowlists 7 pre-existing violations in other extensions)\\\\n\\\\nThe plugin-sdk consolidation (62ddc9d9e0) removed `slack` and `slack-core` from the entrypoints list but did not update `extensions/slack/src/runtime-api.ts`. In Docker, extensions load from source via jiti but `/app/src/` is not in the runtime image, so the relative imports fail.\\\\n\\\\nFixes #47411 (Slack portion)\\\\n\\\\n## Test plan\\\\n\\\\n- [x] `pnpm test -- extensions/slack/` — 463 tests pass\\\\n- [x] `pnpm test -- src/plugin-sdk/runtime-api-guardrails` — 2 tests pass (including new boundary guard)\\\\n- [x] `pnpm build` — succeeds\\\\n- [x] Docker build + deploy — Slack extension loads, connects, delivers replies\\\\n\\\\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51836\\\",\\\"user\\\":{\\\"login\\\":\\\"wonderchook\\\",\\\"id\\\":67992,\\\"profile_url\\\":\\\"https://github.com/wonderchook\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/67992?v=4\\\"},\\\"labels\\\":[\\\"channel: slack\\\",\\\"size: S\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/slack-runtime-api-docker-imports\\\",\\\"sha\\\":\\\"df12d8a47e3569068d98dd3582e524eaa2334997\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"wonderchook/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:21:54Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:25:16Z\\\"},{\\\"number\\\":51835,\\\"title\\\":\\\"fix(discord): graceful degradation when account missing Message Content Intent\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\nWhen a Discord bot account is added to OpenClaw without enabling the \\\\u0026#34;Message Content Intent\\\\u0026#34; in the Discord Developer Portal, the `monitorDiscordProvider` call throws an unhandled error that crashes the **entire Gateway** — taking down all channels (Telegram, WhatsApp, other Discord bots, etc.).\\\\n\\\\n## Details\\\\n\\\\nWrapped `monitorDiscordProvider` in a try/catch in `channel.ts`. When the call fails:\\\\n- A warning is logged identifying the account ID and error reason\\\\n- The account status is set to `running: false` with `lastError`\\\\n- The error is NOT rethrown — preventing crash propagation\\\\n\\\\nOnly the misconfigured account is disabled. All other channels continue running normally.\\\\n\\\\n## Related Issues\\\\n\\\\nFixes #27002\\\\n\\\\n## How to Validate\\\\n\\\\n1. Add a Discord bot token for an account WITHOUT \\\\u0026#34;Message Content Intent\\\\u0026#34; enabled\\\\n2. Start the gateway\\\\n3. Confirm only that Discord account fails — Telegram and other channels stay online\\\\n4. Check `openclaw status` — shows the failed account with `lastError`\\\\n\\\\nRun unit tests: `pnpm test -- --testPathPattern=discord/src/channel`\\\\n\\\\n## Pre-Merge Checklist\\\\n\\\\n- [x] Updated relevant documentation and README (if needed)\\\\n- [x] Added/updated tests (if needed)\\\\n- [ ] Noted breaking changes (if any)\\\\n- [x] Validated on required platforms/methods:\\\\n  - [x] Windows\\\\n    - [x] npm run\\\\n\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51835\\\",\\\"user\\\":{\\\"login\\\":\\\"ernestodeoliveira\\\",\\\"id\\\":26804139,\\\"profile_url\\\":\\\"https://github.com/ernestodeoliveira\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/26804139?v=4\\\"},\\\"labels\\\":[\\\"channel: discord\\\",\\\"size: S\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/discord-intent-graceful-degradation\\\",\\\"sha\\\":\\\"3291d65777e5f62d59a81264d4592f33e7aafa9d\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"ernestodeoliveira/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:19:37Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:24:13Z\\\"},{\\\"number\\\":51834,\\\"title\\\":\\\"fix(ui): resolve ambiguous model IDs using current session provider (#51824)\\\",\\\"body\\\":\\\"Fixes #51824\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51834\\\",\\\"user\\\":{\\\"login\\\":\\\"Yaohua-Leo\\\",\\\"id\\\":243496201,\\\"profile_url\\\":\\\"https://github.com/Yaohua-Leo\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/243496201?v=4\\\"},\\\"labels\\\":[\\\"app: web-ui\\\",\\\"size: S\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/51824-model-selector-provider\\\",\\\"sha\\\":\\\"33bb3b50fa567db7a5380ff636c6caf93c072b66\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"Yaohua-Leo/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:19:27Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:21:55Z\\\"},{\\\"number\\\":51829,\\\"title\\\":\\\"fix(agent-events): delete seqByRun entry in clearAgentRunContext\\\",\\\"body\\\":\\\"## Problem\\\\n\\\\nThe `seqByRun` Map in `src/infra/agent-events.ts` stores one entry per `runId` for monotonic event sequencing, but `clearAgentRunContext()` only cleaned up `runContextById` — the `seqByRun` entry was never deleted. Over time this Map grows by hundreds of entries per day and is never pruned, contributing to heap growth on long-running gateways.\\\\n\\\\n## Fix\\\\n\\\\nAdd `state.seqByRun.delete(runId)` in `clearAgentRunContext()` alongside the existing `runContextById` cleanup.\\\\n\\\\n## Test\\\\n\\\\nAdded a regression test verifying that sequence numbers restart from 1 after `clearAgentRunContext()` is called for a given runId.\\\\n\\\\nAll 9 tests pass:\\\\n```\\\\n✓ agent-events sequencing \\\\u0026gt; stores and clears run context\\\\n✓ agent-events sequencing \\\\u0026gt; clearAgentRunContext also removes seqByRun entry  (new)\\\\n✓ agent-events sequencing \\\\u0026gt; maintains monotonic seq per runId\\\\n...\\\\n```\\\\n\\\\nCloses #51819\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51829\\\",\\\"user\\\":{\\\"login\\\":\\\"reed1898\\\",\\\"id\\\":129141816,\\\"profile_url\\\":\\\"https://github.com/reed1898\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/129141816?v=4\\\"},\\\"labels\\\":[\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/memleak-seqByRun-cleanup\\\",\\\"sha\\\":\\\"738a1605e3dde908d647d4aa5dc4a01bbbccddf0\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"reed1898/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"ef7a5c354611d37267a8309c62d706b2e1a345a3\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:07:39Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:14:36Z\\\"},{\\\"number\\\":51826,\\\"title\\\":\\\"fix(google): strip empty required arrays from tool schemas (#51774)\\\",\\\"body\\\":\\\"Fixes #51774\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51826\\\",\\\"user\\\":{\\\"login\\\":\\\"Yaohua-Leo\\\",\\\"id\\\":243496201,\\\"profile_url\\\":\\\"https://github.com/Yaohua-Leo\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/243496201?v=4\\\"},\\\"labels\\\":[\\\"agents\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/51774-gemini-schema-required\\\",\\\"sha\\\":\\\"39b915c2d74ab1363bbc8cb72d8c748a1bc2d33f\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"Yaohua-Leo/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"fb50c98d672dd622887e1a60c1583e2e677ed324\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T19:05:01Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:08:31Z\\\"},{\\\"number\\\":51823,\\\"title\\\":\\\"feat(infra): session health lifecycle visibility + remediation groundwork\\\",\\\"body\\\":\\\"## What this ships\\\\n\\\\nThis PR preserves the local session-health work on a reviewable branch and proposes it upstream.\\\\n\\\\n### Session health chain\\\\n- classification + collection + lifecycle runner\\\\n- Layer B derived operator-facing health surface\\\\n- Mission Control visibility groundwork\\\\n- remediation planning + `cleanup --dry-run`\\\\n- stale-count honesty fix\\\\n- UX honesty pass\\\\n- manual remediation executor\\\\n- Phase 3C hardening\\\\n\\\\n### Follow-up infra improvement\\\\n- smarter pre-commit gate behavior\\\\n- `OPENCLAW_SKIP_CHECK` escape hatch\\\\n- expanded hook test coverage\\\\n\\\\n## Why it matters\\\\n\\\\nThis is the foundation for making session lifecycle/storage health legible before any cleanup path is trusted. It also preserves the local machine work that was already activated and tested in practice.\\\\n\\\\n## Notes\\\\n- branch pushed from `amzzzzzzz/openclaw:feat/session-health`\\\\n- Mission Control currently bridges the derived session-health cache on the live machine; that local bridge lives outside this repo\\\\n- direct push to upstream was not available, so this follows the normal fork + PR flow\\\\n\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51823\\\",\\\"user\\\":{\\\"login\\\":\\\"amzzzzzzz\\\",\\\"id\\\":154392693,\\\"profile_url\\\":\\\"https://github.com/amzzzzzzz\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/154392693?v=4\\\"},\\\"labels\\\":[\\\"docs\\\",\\\"app: web-ui\\\",\\\"gateway\\\",\\\"cli\\\",\\\"commands\\\",\\\"size: XL\\\"],\\\"head\\\":{\\\"ref\\\":\\\"feat/session-health\\\",\\\"sha\\\":\\\"54500302b8c7a526eb82a11b2802e45e33cd9d55\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"amzzzzzzz/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"fb50c98d672dd622887e1a60c1583e2e677ed324\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T18:59:53Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:14:17Z\\\"},{\\\"number\\\":51822,\\\"title\\\":\\\"cron: reject webhook URLs with embedded credentials\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\nDescribe the problem and fix in 2–5 bullets:\\\\n\\\\n- Problem: Cron webhook URLs could include embedded credentials (e.g. https://user:pass@example.com/hook), which can leak secrets in logs, config, or URLs.\\\\n- Why it matters: URL-embedded credentials are discouraged and can expose secrets; using query params or headers is preferred.\\\\n- What changed: normalizeHttpWebhookUrl now rejects URLs with username or password in the parsed URL.\\\\n- What did NOT change (scope boundary): No changes to auth headers, query params, or other credential handling; only http(s)://user:pass@host URLs are rejected.\\\\n\\\\n## Change Type (select all)\\\\n\\\\n- [ ] Bug fix\\\\n- [ ] Feature\\\\n- [ ] Refactor required for the fix\\\\n- [ ] Docs\\\\n- [x] Security hardening\\\\n- [ ] Chore/infra\\\\n\\\\n## Scope (select all touched areas)\\\\n\\\\n- [x] Gateway / orchestration\\\\n- [ ] Skills / tool execution\\\\n- [ ] Auth / tokens\\\\n- [ ] Memory / storage\\\\n- [ ] Integrations\\\\n- [ ] API / contracts\\\\n- [ ] UI / DX\\\\n- [ ] CI/CD / infra\\\\n\\\\n## Linked Issue/PR\\\\n\\\\n- Closes #\\\\n- Related #\\\\n\\\\n## User-visible / Behavior Changes\\\\n\\\\nCron webhook URLs with embedded credentials (e.g. https://user:secret@host/path) are now rejected as invalid. URLs without credentials continue to work.\\\\n\\\\n## Security Impact (required)\\\\n\\\\n- New permissions/capabilities? (`No`)\\\\n- Secrets/tokens handling changed? (`No`)\\\\n- New/changed network calls? (`No`)\\\\n- Command/tool execution surface changed? (`No`)\\\\n- Data access scope changed? (`No`)\\\\n- If any `Yes`, explain risk + mitigation:\\\\n\\\\n## Repro + Verification\\\\n\\\\n### Environment\\\\n\\\\n- OS: macOS (darwin)\\\\n- Runtime/container: Node 22+\\\\n- Model/provider: N/A\\\\n- Integration/channel (if any): CRON webhook delivery\\\\n- Relevant config (redacted): N/A\\\\n\\\\n### Steps\\\\n\\\\n1. Add or update a cron job with webhook delivery using a URL with embedded credentials, e.g. https://user:pass@example.invalid/webhook.\\\\n2. Observe that the webhook URL is rejected (job will not use it).\\\\n3. Use the same job with https://example.invalid/webhook (no credentials) and confirm it is accepted.\\\\n\\\\n### Expected\\\\n\\\\n- URLs with user:pass@ in the authority are rejected.\\\\n- URLs without embedded credentials continue to work.\\\\n\\\\n### Actual\\\\n\\\\n- Behavior matches above\\\\n\\\\n## Evidence\\\\n\\\\nAttach at least one:\\\\n\\\\n- [ ] Failing test/log before + passing after\\\\n- [x] Trace/log snippets\\\\n- [ ] Screenshot/recording\\\\n- [ ] Perf numbers (if relevant)\\\\n\\\\n\\\\u003cimg width=\\\\\\\"642\\\\\\\" height=\\\\\\\"119\\\\\\\" alt=\\\\\\\"Screenshot 2026-03-21 at 11 55 36 AM\\\\\\\" src=\\\\\\\"https://github.com/user-attachments/assets/7d8342a7-6902-4148-bff4-eb217ed74372\\\\\\\"/\\\\u003e\\\\n\\\\n## Human Verification (required)\\\\n\\\\nWhat you personally verified (not just CI), and how:\\\\n\\\\n- Verified scenarios: normalizeHttpWebhookUrl returns null for URLs like http://user:pass@host/path; returns the URL for http://host/path.\\\\n- Edge cases checked: URLs with only username (user@host), only password (not typical in URLs), and no credentials.\\\\n- What you did **not** verify: End-to-end cron job creation via CLI or UI with credential URLs; live webhook delivery.\\\\n\\\\n## Review Conversations\\\\n\\\\n- [ ] I replied to or resolved every bot review conversation I addressed in this PR.\\\\n- [ ] I left unresolved only the conversations that still need reviewer or maintainer judgment.\\\\n\\\\nIf a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.\\\\n\\\\n## Compatibility / Migration\\\\n\\\\n- Backward compatible? (`No`)\\\\n- Config/env changes? (`No`)\\\\n- Migration needed? (`Yes`)\\\\n- If yes, exact upgrade steps:\\\\nUpdate any cron job webhook URLs that include user:pass@ in the URL. Remove embedded credentials and use headers or query params for auth instead.\\\\n\\\\n## Failure Recovery (if this breaks)\\\\n\\\\n- How to disable/revert this change quickly: Revert this commit.\\\\n- Files/config to restore: src/cron/webhook-url.ts\\\\n- Known bad symptoms reviewers should watch for: Jobs with credential URLs will fail validation or treat the webhook as invalid.\\\\n\\\\n## Risks and Mitigations\\\\n\\\\nList only real risks for this PR. Add/remove entries as needed. If none, write `None`.\\\\n\\\\n- Risk: Existing jobs using credential URLs will break.\\\\n  - Mitigation: Document in release notes; credential URLs are discouraged; alternative auth methods should be used.\\\\n\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":false,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51822\\\",\\\"user\\\":{\\\"login\\\":\\\"RogueL90\\\",\\\"id\\\":158786909,\\\"profile_url\\\":\\\"https://github.com/RogueL90\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/158786909?v=4\\\"},\\\"labels\\\":[\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"cron-webhook-reject-credentials\\\",\\\"sha\\\":\\\"1329a47f5ac71e59da9df06a96cc2207e70bcc6a\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"RogueL90/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"fb50c98d672dd622887e1a60c1583e2e677ed324\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T18:57:34Z\\\",\\\"updated_at\\\":\\\"2026-03-21T19:00:48Z\\\"},{\\\"number\\\":51817,\\\"title\\\":\\\"fix: mark googlechat appPrincipal as required in schema and type\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\n- Problem: `appPrincipal` in Google Chat config is marked optional in Zod schema and TS type, but required at runtime — causes silent 401 auth failures instead of clear validation errors.\\\\n- Why it matters: Users get confusing runtime errors instead of upfront config validation failures.\\\\n- What changed: Made `appPrincipal` required in Zod schema (`zod-schema.providers-core.ts`), TS type (`types.googlechat.ts`), and regenerated config baseline docs. Added `appPrincipal` to test fixtures that were missing it.\\\\n- What did NOT change (scope boundary): No logic changes, no new features, no refactoring beyond the fix.\\\\n\\\\n## Change Type (select all)\\\\n\\\\n- [x] Bug fix\\\\n- [ ] Feature\\\\n- [ ] Refactor required for the fix\\\\n- [x] Docs\\\\n- [ ] Security hardening\\\\n- [ ] Chore/infra\\\\n\\\\n## Scope (select all touched areas)\\\\n\\\\n- [ ] Gateway / orchestration\\\\n- [ ] Skills / tool execution\\\\n- [ ] Auth / tokens\\\\n- [ ] Memory / storage\\\\n- [x] Integrations\\\\n- [x] API / contracts\\\\n- [ ] UI / DX\\\\n- [ ] CI/CD / infra\\\\n\\\\n## Linked Issue/PR\\\\n\\\\n- Closes #51694\\\\n\\\\n## User-visible / Behavior Changes\\\\n\\\\nConfig validation now rejects Google Chat configurations missing `appPrincipal` at parse time with a clear Zod error, instead of accepting the config and failing later with a 401.\\\\n\\\\n## Security Impact (required)\\\\n\\\\n- New permissions/capabilities? No\\\\n- Secrets/tokens handling changed? No\\\\n- New/changed network calls? No\\\\n- Command/tool execution surface changed? No\\\\n- Data access scope changed? No\\\\n\\\\n## Repro + Verification\\\\n\\\\n### Environment\\\\n\\\\n- OS: macOS\\\\n- Runtime/container: Node 22+ / Bun\\\\n\\\\n### Steps\\\\n\\\\n1. Configure Google Chat channel without `appPrincipal`\\\\n2. Before fix: config parses OK, fails at runtime with 401\\\\n3. After fix: config validation rejects with clear \\\\u0026#34;Required\\\\u0026#34; error\\\\n\\\\n### Expected\\\\n\\\\nConfig validation fails upfront when `appPrincipal` is missing.\\\\n\\\\n### Actual\\\\n\\\\nAfter this fix, Zod schema correctly requires `appPrincipal`.\\\\n\\\\n## Evidence\\\\n\\\\n- [x] Failing test/log before + passing after\\\\n\\\\nScoped tests all pass:\\\\n- `extensions/googlechat/src/accounts.test.ts` — 5 passed\\\\n- `src/config/config.secrets-schema.test.ts` — 10 passed\\\\n- `src/config/doc-baseline.integration.test.ts` — 7 passed\\\\n\\\\n## Human Verification (required)\\\\n\\\\n- Verified scenarios: Zod schema rejects missing appPrincipal, TS type enforces required field, baseline docs regenerated correctly\\\\n- Edge cases checked: GoogleChatAccountSchema and GoogleChatConfigSchema both updated (appPrincipal appears at account level and top level)\\\\n- What you did **not** verify: Live Google Chat integration (no credentials available)\\\\n\\\\n## Review Conversations\\\\n\\\\n- [x] I replied to or resolved every bot review conversation I addressed in this PR.\\\\n- [x] I left unresolved only the conversations that still need reviewer or maintainer judgment.\\\\n\\\\n## Compatibility / Migration\\\\n\\\\n- Backward compatible? No — configs missing `appPrincipal` will now fail validation (this is the intended fix)\\\\n- Config/env changes? Yes — `appPrincipal` is now required in Google Chat config\\\\n- Migration needed? No — users who had a working Google Chat setup already have this field set\\\\n- If yes, exact upgrade steps: N/A\\\\n\\\\n## Failure Recovery (if this breaks)\\\\n\\\\n- How to disable/revert this change quickly: Revert commit `93772d7`\\\\n- Files/config to restore: `src/config/zod-schema.providers-core.ts`, `src/config/types.googlechat.ts`, baseline docs\\\\n- Known bad symptoms reviewers should watch for: Google Chat configs that previously worked but were missing `appPrincipal` (unlikely — those would have failed at auth)\\\\n\\\\n## Risks and Mitigations\\\\n\\\\n- Risk: Existing configs missing `appPrincipal` will fail validation on upgrade\\\\n  - Mitigation: Such configs were already broken at runtime (401 errors); this just surfaces the error earlier with a clear message\\\",\\\"state\\\":\\\"open\\\",\\\"draft\\\":true,\\\"merged\\\":false,\\\"html_url\\\":\\\"https://github.com/openclaw/openclaw/pull/51817\\\",\\\"user\\\":{\\\"login\\\":\\\"majiayu000\\\",\\\"id\\\":19658300,\\\"profile_url\\\":\\\"https://github.com/majiayu000\\\",\\\"avatar_url\\\":\\\"https://avatars.githubusercontent.com/u/19658300?v=4\\\"},\\\"labels\\\":[\\\"docs\\\",\\\"channel: googlechat\\\",\\\"commands\\\",\\\"size: XS\\\"],\\\"head\\\":{\\\"ref\\\":\\\"fix/issue-51694-googlechat-appprincipal-required\\\",\\\"sha\\\":\\\"93772d71a799c7d0d7c8026ae7c400c1bd264046\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"majiayu000/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"base\\\":{\\\"ref\\\":\\\"main\\\",\\\"sha\\\":\\\"fb50c98d672dd622887e1a60c1583e2e677ed324\\\",\\\"repo\\\":{\\\"full_name\\\":\\\"openclaw/openclaw\\\",\\\"description\\\":\\\"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 \\\"}},\\\"created_at\\\":\\\"2026-03-21T18:52:13Z\\\",\\\"updated_at\\\":\\\"2026-03-21T18:52:26Z\\\"},{\\\"number\\\":51816,\\\"title\\\":\\\"ACP: recover hung bound turns\\\",\\\"body\\\":\\\"## Summary\\\\n\\\\n- Problem: a bound ACP session could stop replying indefinitely if one `runtime.runTurn()` never completed, because later turns on that session stayed queued behind the stuck turn.\\\\n- Why it matters: Discord ACP bindings like `#codex-1` could look dead until the gateway or session was manually reset.\\\\n- What changed: `AcpSessionManager.runTurn()` now applies a manager-side watchdog, aborts/cancels/closes timed-out turns, drops the stale cached runtime handle, and lets queued turns proceed.\\\\n- What did NOT change (scope boundary): this PR does not change ACP projection or Discord readback behavior beyond unsticking the bound session turn queue.\\\\n\\\\n## Change Type (select all)\\\\n\\\\n- [x] Bug fix\\\\n- [ ] Feature\\\\n- [ ] Refactor required for the fix\\\\n- [ ] Docs\\\\n- [ ] Security hardening\\\\n- [ ] Chore/infra\\\\n\\\\n## Scope (select all touched areas)\\\\n\\\\n- [x] Gateway / orchestration\\\\n- [ ] Skills / tool execution\\\\n- [ ] Auth / tokens\\\\n- [ ] Memory / storage\\\\n- [ ] Integrations\\\\n- [ ] API / contracts\\\\n- [ ] UI / DX\\\\n- [ ] CI/CD / infra\\\\n\\\\n## Linked Issue/PR\\\\n\\\\n- Related #51816\\\\n\\\\n## User-visible / Behavior Changes\\\\n\\\\n- Bound ACP sessions no longer stay wedged behind a single hung turn forever.\\\\n- When a turn exceeds its watchdog timeout, the session now returns an ACP turn failure instead of starving all later turns on that binding.\\\\n\\\\n## Security Impact (required)\\\\n\\\\n- New permissions/capabilities? (`No`)\\\\n- Secrets/tokens handling changed? (`No`)\\\\n- New/changed network calls? (`No`)\\\\n- Command/tool execution surface changed? (`No`)\\\\n- Data access scope changed? (`No`)\\\\n- If any `Yes`, explain risk + mitigation:\\\\n\\\\n## Repro + Verification\\\\n\\\\n### Environment\\\\n\\\\n- OS: Linux\\\\n- Runtime/container:","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false,"persistedOutputPath":"~/.claude/projects/...","persistedOutputSize":293932}}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_017io3Z52tPUPwr73rhUbN5n","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The grep found matches (the output was saved). Let me search more specifically in the saved file to look for \"51824\".","signature":"Ep4CCkYICxgCKkCcfXcIdWt96heEnZL8I33nNufRmqYv3lxKsM8PPDV9gYa4/7r5MJ8GKzUVE5Y4ZIgGu7O5fCp772QSUZf79/wdEgwJLHNTXNBX67oxzPwaDPGv5JRzOcNtc+BTSCIw0Bsg12jcm0CX0ZDiz2fn2fAljiNUytSsKzrOQlcRRFTiOXZntilASsc7y9ehEny/KoUBC0NZ3TrcceOis7VAvljHgWKSU+fov+1iiNBv4byoK41TjKAfKDXbpw4WAZbzGB+X23SFscM741bNmlK/yFa/fDKXoWcxMGrMMXIg/zuFga9W8xjpk7tdqgMG2RoX9TeLOYzTeEEy9ujvnITUz4Uv2Dcw6fVodFXoOrgYzbFd8Pt2OWz0lhgB"}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1283,"cache_read_input_tokens":20414,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1283},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"d422cdf1-ebb1-4ff9-9e12-72216b671fa4"}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_017io3Z52tPUPwr73rhUbN5n","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RAsVvMQykRUgPhLPMhRDpP","name":"Bash","input":{"command":"grep -o '\"number\":[0-9]*,\"title\":\"[^\"]*51824[^\"]*\"' ~/.claude/projects/..."\nimport json, re, sys\n\nwith open('~/.claude/projects/..."\n","description":"Parse PR JSON and find references to issue 51824"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1283,"cache_read_input_tokens":20414,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1283},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"37e50640-dd4d-4b6c-b357-525607c57148"}
{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01RAsVvMQykRUgPhLPMhRDpP","type":"tool_result","content":"[\n  {\n    \"number\": 51834,\n    \"title\": \"fix(ui): resolve ambiguous model IDs using current session provider (#51824)\",\n    \"state\": \"open\"\n  }\n]","is_error":false}]},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"7ca3c50d-6edf-4e49-8dc0-c2a061538ea3","timestamp":"2026-03-21T19:30:20.267Z","tool_use_result":{"stdout":"[\n  {\n    \"number\": 51834,\n    \"title\": \"fix(ui): resolve ambiguous model IDs using current session provider (#51824)\",\n    \"state\": \"open\"\n  }\n]","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}}
{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01N6HKFuX9rKdDnCqZoW7FNo","type":"message","role":"assistant","content":[{"type":"text","text":"Here's the report:\n\n---\n\n**Most recent open bug issue:** [#51824](https://github.com/openclaw/openclaw/issues/51824)\n> **[Bug]: Control UI: Model selector incorrectly maps bailian models to qwen-portal provider**\n\nWhen selecting a non-primary provider model (e.g., `bailian/qwen3.5-plus`) from the model dropdown, the Control UI incorrectly sends the wrong provider prefix (`qwen-portal/qwen3.5-plus`) to the backend, causing a `GatewayRequestError`.\n\n---\n\n**Fix in progress: Yes.**\n\nOpen PR [#51834](https://github.com/openclaw/openclaw/pull/51834) directly references this issue:\n> **`fix(ui): resolve ambiguous model IDs using current session provider (#51824)`**\n\nA fix is actively being worked on."}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":549,"cache_read_input_tokens":21697,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":549},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","uuid":"97502949-c9b4-47d2-859d-eb5a8e70ec48"}
{"type":"result","subtype":"success","is_error":false,"duration_ms":36782,"duration_api_ms":32956,"num_turns":6,"result":"Here's the report:\n\n---\n\n**Most recent open bug issue:** [#51824](https://github.com/openclaw/openclaw/issues/51824)\n> **[Bug]: Control UI: Model selector incorrectly maps bailian models to qwen-portal provider**\n\nWhen selecting a non-primary provider model (e.g., `bailian/qwen3.5-plus`) from the model dropdown, the Control UI incorrectly sends the wrong provider prefix (`qwen-portal/qwen3.5-plus`) to the backend, causing a `GatewayRequestError`.\n\n---\n\n**Fix in progress: Yes.**\n\nOpen PR [#51834](https://github.com/openclaw/openclaw/pull/51834) directly references this issue:\n> **`fix(ui): resolve ambiguous model IDs using current session provider (#51824)`**\n\nA fix is actively being worked on.","stop_reason":"end_turn","session_id":"1939cb92-4311-4071-bcf1-89397a2748f2","total_cost_usd":0.09750390000000002,"usage":{"input_tokens":9,"cache_creation_input_tokens":13648,"cache_read_input_tokens":84473,"output_tokens":1397,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":13648,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":9,"outputTokens":1397,"cacheReadInputTokens":84473,"cacheCreationInputTokens":13648,"webSearchRequests":0,"costUSD":0.09750390000000002,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"0e5c2f44-6470-4ebb-ad85-bc53e972ba5d"}
