mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-14 03:30:19 +00:00
🔨 chore: integrate Gateway connection management into chat store (#13636)
* ✨ feat: integrate Gateway connection management into chat store Add GatewayActionImpl to aiChat slice for managing Agent Gateway WebSocket connections per operationId. Includes connect, disconnect, interrupt, and status tracking. Also type the execAgentTask return value. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ✨ feat: add Gateway mode branch in sendMessage for server-side agent execution When agentGatewayUrl is set in server config (enableQueueAgentRuntime), sendMessage now triggers server-side agent execution via execAgentTask and receives events through the Agent Gateway WebSocket, instead of running the agent loop client-side. Includes: - Expose agentGatewayUrl in GlobalServerConfig when queue mode is enabled - Gateway event handler mapping stream events to UI message updates - Fallback to client-side agent loop when Gateway is not configured Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: emit disconnected event on intentional disconnect disconnect() was only calling setStatus('disconnected') but not emitting the 'disconnected' event. This caused the store's cleanup listener to never fire after terminal events (agent_runtime_end), leaving stale connections in gatewayConnections. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ✨ feat: enhance Gateway event handler for multi-step agent streaming Support multi-step agent execution display (LLM → tool calls → next LLM) using hybrid approach: real-time streaming for current step, DB refresh at step transitions. Fixes LOBE-6874 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ✨ feat: wire up Gateway JWT token from execAgent to connectToGateway Pass the RS256 JWT token returned by execAgentTask to connectToGateway for WebSocket authentication. Also use ExecAgentResult from @lobechat/types instead of local duplicate definition. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: handle wss:// protocol in AgentStreamClient buildWsUrl When gatewayUrl already uses ws:// or wss:// protocol, use it directly instead of stripping and re-adding the protocol prefix. Previously, wss://host would become ws://wss://host (double protocol). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: queue gateway events to ensure stream_chunk waits for refreshMessages Use a sequential Promise chain to process gateway events, so that stream_chunk dispatches only run after stream_start's refreshMessages resolves. Previously, chunks arrived before the new assistant message existed in dbMessagesMap, causing updates to be silently dropped. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: pass operationId context to internal_dispatchMessage in gateway handler Without operationId, internal_dispatchMessage falls back to global state to compute the messageMapKey, which may differ from the key where refreshMessages stored the server-created messages. Passing operationId ensures the correct conversation context is resolved. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: resolve gateway streaming display issues - Use fetchAndReplaceMessages (direct DB fetch + replaceMessages) instead of refreshMessages which mutates an orphaned SWR key - Create dedicated execServerAgentRuntime operation with correct topicId context for internal_dispatchMessage to resolve the right messageMapKey - Complete operation on agent_runtime_end instead of relying on onSessionComplete callback - Keep loading state active between steps (only clear on agent_runtime_end) so users don't think the session ended during tool execution gaps Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: maintain loading state across gateway step transitions - Create dedicated execServerAgentRuntime operation with correct topicId - Use fetchAndReplaceMessages instead of orphaned refreshMessages SWR key - Re-apply loading after tool_end refresh so UI stays active between steps - Complete operation on agent_runtime_end - Add record-app-screen.sh for automated screen recording - Output recordings to .records/ (gitignored) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: show loading on assistant message immediately in stream_start Set loading on the current assistant message BEFORE awaiting fetchAndReplaceMessages, so the UI shows a loading indicator while waiting for the DB response instead of appearing frozen. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: drive gateway loading state via operation system instead of messageLoadingIds Associate the assistant message with the gateway operation via associateMessageWithOperation so the Conversation store's operation-based loading detection (isGenerating) works correctly. This shows the proper loading skeleton on the assistant message while waiting for gateway events. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ♻️ refactor: remove unused internal_toggleMessageLoading from gateway handler Loading state is now fully driven by the operation system via associateMessageWithOperation + completeOperation. The old messageLoadingIds-based approach is no longer needed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: rewrite record-app-screen.sh to use CDP screenshot assembly Replace broken ffmpeg avfoundation live recording (corrupts on kill) with agent-browser CDP screenshot capture + ffmpeg assembly on stop. This works reliably on any screen including external monitors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ✨ feat: add Gateway Mode lab toggle and fix CI type error - Add enableGatewayMode to UserLabSchema as experimental feature - Add lab selector and settings UI toggle in Advanced > Labs - Gateway mode now requires both server config (agentGatewayUrl) AND user opt-in via Labs toggle - Fix TS2322: result.token (string | undefined) → fallback to '' - Add i18n keys for gateway mode feature Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ✨ feat: hide Gateway Mode toggle when agentGatewayUrl is not configured Only show the lab toggle when the server has AGENT_GATEWAY_URL set, so users without gateway infrastructure don't see the option. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 💄 style: move Gateway Mode toggle below Input Markdown in labs section Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: remove default AGENT_GATEWAY_URL value and make schema optional Without an explicit env var, the gateway URL should be undefined so the lab toggle and gateway mode are not available. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 📝 docs: update SKILL.md to reference record-app-screen.sh Replace outdated record-gateway-demo.sh references with the renamed record-app-screen.sh and its start/stop lifecycle documentation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 📝 docs: add record-app-screen reference doc and slim down SKILL.md Move detailed recording documentation to references/record-app-screen.md and keep SKILL.md concise with a link to the full reference. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 🐛 fix: guard GatewayStreamNotifier with AGENT_GATEWAY_URL check AGENT_GATEWAY_URL is now optional, so check both URL and service token before wrapping with GatewayStreamNotifier to avoid TS2345. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ♻️ refactor: extract gateway execution logic to GatewayActionImpl Move server-side gateway execution logic from conversationLifecycle.ts into GatewayActionImpl.startGatewayExecution(). The sendMessage flow now does a simple early return when gateway mode is active, keeping the existing client-mode code path untouched. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ♻️ refactor: split gateway into isGatewayModeEnabled check + executeGatewayAgent Replace fire-and-forget startGatewayExecution with explicit check/execute pattern. Caller does: if (check) { await execute(); return; } — giving proper error handling and clearer control flow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,9 @@ Desktop.ini
|
||||
*.code-workspace
|
||||
.vscode/sessions.json
|
||||
prd
|
||||
# Recordings
|
||||
.records/
|
||||
|
||||
# Temporary files
|
||||
.temp/
|
||||
temp/
|
||||
|
||||
Reference in New Issue
Block a user