Conversation
* chore: remove typing interval * chore: optimize wechat media problem * chore: add webhook helpers * chore: update telegram docs * chore: extract wechat credentials to custom render form * feat: support wechat file upload * feat: support concurrency mode and debounceMs * chore: add locales * chore: support visible then * chore: support auto disapear save result info * chore: default debounce mode * chore: optimize doc position * chore: adjust ack message logic * fix: aes throw
#13329) Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
β¦back (#13321) Introduce a unified SafeBoundary component (silent/alert variants) to replace scattered custom ErrorBoundary class components. Automatically wraps Inspector, ContentBlock sub-components, MessageItem, and EditorCanvas to prevent individual component crashes from propagating to the entire app.
β¦c) (#13279) * π fix(github-copilot): switch codex models to responses api * β»οΈ refactor(github-copilot): simplify responses api routing style: update model list style: update model list π fix: align github copilot payload mapping and tests style: update model list style: update model list * chore: add debug stream support * refactor: use anthropic sdk for claude * fix: fix ci error * fix: fix github copilot reasoning_text chunk * style: update Raptor mini base config, same as gpt-5-mini style: update Raptor mini base config, same as gpt-5-mini style: update Raptor mini base config, same as gpt-5-mini * style: update model contextWindowTokens * style: set default reasoning.summary to detailed, default as vscode
β¦e trust client auth (#13344) fix: slove the list connection always use require auth & should have trust client check
* fix: not edit message id * fix: error edit message * chore: merge config & default * chore: remove typing var * fix: agent setting problem * fix: test case error
β¦election (#13134) * β¨ feat(resource): add select all hint and improve resource explorer selection Made-with: Cursor * β»οΈ refactor(resource): flatten store actions and improve type imports Made-with: Cursor * β»οΈ refactor resource explorer list view * refactor: engine Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: checkpoint current workspace updates * β»οΈ refine resource explorer fetch ownership * π fix: resolve resource manager ci regressions * π fix(lambda): delete page-backed knowledge items by document id * π fix(lambda): include knowledge-base files in remove-all * π fix(resource): preserve cross-page select-all exclusions * π fix(resource): retain off-screen optimistic resources * π fix(resource): hide moved root items from current query * π fix(resource): reset explorer selection on query change * π fix(resource): fix select-all batchChunking and optimistic replace visibility - batchChunking: pass through server-resolved IDs not in local resourceMap when selectAllState is 'all', letting server filter unsupported types - replaceLocalResource: keep replacement visible if the optimistic item was already in the list, avoiding slug-vs-UUID mismatch in visibility check * π fix(resource): reset selectAllState after batch operations and preserve off-screen optimistic items - Reset selectAllState to 'none' after delete, removeFromKnowledgeBase, and batchChunking to prevent stale 'all' state causing unintended re-selection of remaining items - Preserve off-screen optimistic resources in clearCurrentQueryResources so background uploads from other folders survive delete-all-by-query * π fix: satisfy import-x/first in resource action test Made-with: Cursor * π¨ lint: sort imports in ResourceExplorer Made-with: Cursor * π fix: widen searchQuery type in useResetSelectionOnQueryChange test Made-with: Cursor --------- Signed-off-by: Innei <tukon479@gmail.com>
β¦yles (#13358) - Replace antd-style createStyles hooks with createStaticStyles and cssVar tokens - Update MentionMenu, reactions, eval bench UI, OAuth device flow, DeviceGateway, GTD plan UI - ModelSelect: use popupMatchSelectWidth for numeric popupWidth; narrow prop to number Made-with: Cursor
* feat: support platform manage * feat: auto connect when import config * fix: lint error
* β¨ feat: add message queue for agent runtime (soft interrupt) Implement per-context message queue that allows users to send messages while the agent is executing. Messages are queued and consumed via two paths: injected at step boundaries during execution (Path A), or triggering a new sendMessage after completion (Path B). - Add QueuedMessage type and queuedMessages state in operation store - Add enqueue/drain/remove/clear actions and selectors - Modify sendMessage to enqueue when execAgentRuntime is running - Add queue checkpoint in step loop (streamingExecutor) - Add Path B: drain remaining queue after completion β new sendMessage - Keep input enabled during agent execution (remove isInputLoading guard) - Add QueueTray component showing "N Queued" above ChatInput - Add electron-testing skill for agent-browser CLI automation Fixes LOBE-6001 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: Path B deferred execution to avoid recursive internal_execAgentRuntime Use setTimeout(0) to break out of the current execution context when triggering a new agent runtime for queued messages after completion. Direct recursive calls caused issues with zustand state batching. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: remove premature Path A drain, fix Path B with fresh store ref Path A (step checkpoint injection) was draining the queue before the last LLM step, leaving nothing for Path B. For agents without tool calls, this meant queued messages were consumed but never acted upon. Fix: remove Path A for now (will be re-added for tool-call scenarios), and use useChatStore.getState() in Path B setTimeout to get a fresh store reference instead of a stale closure capture. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π docs: update electron-testing skill with real-world patterns Based on lessons learned during message queue testing: - Must cd to apps/desktop before npx electron-vite dev - Use polling loop for startup detection - snapshot -i -C required for contenteditable (chat input) - Use sleep + screenshot instead of agent-browser wait for long ops - Access store via window.__LOBE_STORES.chat() - Add error interceptor and store inspection patterns - Document all gotchas (HMR, daemon blocking, fill vs type) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β¨ feat: add Path A - early handoff to Path B at tool completion When tools finish and queue has messages, break the step loop early and let Path B create user message + start new operation. The new LLM call sees full context including tool results + new user message. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: Path B use sendMessage for proper message creation Use sendMessage instead of optimisticCreateMessage + internal_execAgentRuntime. sendMessage handles the full lifecycle correctly: creates user message on server, creates assistant message placeholder, and triggers internal_execAgentRuntime β ensuring both messages are visible in UI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π style: redesign QueueTray to Codex-style card layout Each queued message shows as a card with icon, text preview, and delete button. Uses antd CSS variables for consistent theming. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π style: connect QueueTray with ChatInput as unified container QueueTray and ChatInput now share a connected border: - QueueTray has top-rounded corners, no bottom border - ChatInput gets bottom-only rounded corners when queue has items - Uses cssVar for proper theme token styling - Zero gap between tray and input Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β»οΈ refactor: move queue check logic into GeneralChatAgent Move the "finish early when queue has messages" decision from streamingExecutor into GeneralChatAgent.runner(). The agent now checks stepContext.hasQueuedMessages at tools_batch_result phase and returns finish instruction, which is architecturally cleaner. - Add hasQueuedMessages to RuntimeStepContext and computeStepContext - GeneralChatAgent returns finish when tools complete + queue non-empty - Remove Path A/B labels from comments - streamingExecutor just passes hasQueuedMessages via stepContext Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: forward queued files in sendMessage and drain only on success - Forward merged file attachments when replaying queued messages (sendMessage now receives files from merged queue) - Move drainQueuedMessages inside the status==='done' branch so queued messages are preserved on error/interrupted states - Add queued_message_interrupt to FinishReason enum - Add hasQueuedMessages check to tool_result and tasks_batch_result phases in GeneralChatAgent (not just tools_batch_result) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β»οΈ refactor: use full operationContext for context key indexing - operationsByContext index now uses messageMapKey(context) with full context (including threadId, scope, etc.) instead of stripped key - Fixes key mismatch where thread/scoped contexts couldn't find running operations, causing overlapping generations - Move mergeQueuedMessages from services/messageQueue.ts into operation/types.ts alongside QueuedMessage type - Delete services/messageQueue.ts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
β»οΈ refactor: move Marketplace below Resources in sidebar Move the Marketplace (Community) nav item from topNavItems to bottomMenuItems, positioning it below Resources in the sidebar navigation. Closes LOBE-6320
* β»οΈ normalize tool call messages in context engine * β»οΈ prune tool message normalization implementation * β»οΈ prune tool message normalization diff * β»οΈ simplify tool message normalization diff * β»οΈ restore tool message reorder logging * β»οΈ restore reorder tool message shape * β»οΈ restore tool message reorder comment * β»οΈ prune tool message normalization diff * β»οΈ restore tool message reorder shape * π fix(context-engine): keep empty tool content in reorder
β¦ge (#13382) * β¨ feat: add businessElement and getFetchOptions plumbing to signin page Add extension points to the signin flow so cloud overrides can inject custom UI elements and modify fetch options for social sign-in requests. - Add businessElement slot to SignInEmailStep component - Pass getFetchOptions to signIn.social() and signIn.oauth2() calls - Add businessElement and getFetchOptions defaults to useBusinessSignin * π fix: resolve TS error on signIn.social result type with fetchOptions
π₯ refactor: remove DefaultAgentForm UI from settings pages Remove the user-facing Default Agent configuration form from both the agent settings page and the service-model settings page. The underlying store action and selectors are preserved for programmatic use (e.g. onboarding). Fixes LOBE-1125 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
β¦13373) π fix(docker): replace dev/prod pgsql docker image with paradedb Signed-off-by: WindSpiritSR <simon343riley@gmail.com>
π fix: use Anthropic SDK for Kimi Coding Plan provider - Switch from OpenAI SDK to Anthropic SDK for Kimi Coding Plan - Update baseURL from `/coding/v1` to `/coding` (Anthropic-compatible endpoint) - Update model IDs: `kimi-k2.5` β `k2p5`, remove `kimi-k2` - Fix max_tokens resolution to use KimiCodingPlan model list - Rewrite tests for Anthropic SDK compatibility
fix: add the creds tools into execAgentRuntime
* β¨ feat: show interrupted hint when AI generation is stopped Display "Interrupted Β· What should I do instead?" text below the message when user stops AI generation, replacing the infinite dotting animation. Fixes LOBE-4462 Fixes LOBE-5726 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β¨ feat: add edit button to queued messages tray Allow users to edit queued messages by clicking the pencil icon, which removes the message from the queue and restores its content to the input editor. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π chore: move record-electron-demo.sh to electron-testing skill Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: derive isInterrupted from latest runtime operation only Previously isInterrupted used .some() to check if any cancelled AI runtime operation existed for a message. In stop-then-retry flows, the old cancelled op persisted alongside the new completed one, causing the interrupted hint to reappear after the retry finished. Now only the latest AI runtime operation is checked, so completed retries correctly clear the interrupted state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: read group interruption from active block ID For assistant groups, continuation runs attach cancelled operations to lastBlockId (contentId) rather than the group root. Check isInterrupted on both the group root and the active block so the interrupted hint is shown correctly for stopped group continuations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test: update test to expect cancelled status after user stop The test for resolving aborted tools after cancellation now correctly expects 'cancelled' status, since completeOperation preserves the user's intentional cancellation rather than overwriting it. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
β¦le sync (#13139) * β¨ feat(onboarding): add agent-guided web onboarding flow Made-with: Cursor * Update onboarding prompts Co-authored-by: Codex <noreply@openai.com> * π fix web onboarding builtin tool flow * β¨ feat(onboarding): enhance agent onboarding flow with new dimensions and refined rules - Updated onboarding structure to include new nodes: agentIdentity, userIdentity, workStyle, workContext, and painPoints. - Revised system role instructions to emphasize a conversational approach and concise interactions. - Adjusted manifest and type definitions to reflect the new onboarding schema. - Implemented tests to ensure proper functionality of the onboarding context and flow. This update aims to improve user experience during onboarding by making it more engaging and structured. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): enhance onboarding experience with localized welcome messages and interaction hints - Added localized welcome messages for onboarding in English and Chinese. - Refactored system role handling to support dynamic interaction hints based on user locale. - Updated onboarding context to include interaction hints for improved user engagement. - Implemented tests to validate the new interaction hint functionality. This update aims to create a more personalized and engaging onboarding experience for users across different languages. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): overhaul onboarding flow with new question structure and refined interaction rules - Replaced existing interaction hints with a focused question structure to enhance user engagement. - Updated system role instructions to clarify onboarding protocols and improve conversational flow. - Refactored type definitions and manifest to align with the new onboarding schema. - Removed deprecated interaction hint components and tests to streamline the codebase. This update aims to create a more structured and engaging onboarding experience for users, ensuring clarity and efficiency in interactions. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): introduce builtin agent onboarding package with structured roles and prompts - Added a new package for agent onboarding, including a package.json configuration and initial TypeScript files. - Implemented system role templates and tool prompts to guide the onboarding process. - Established a client interface for rendering questions and handling user interactions. - Updated dependencies in related packages to integrate the new onboarding functionality. This update aims to enhance the onboarding experience by providing a structured approach for agents, ensuring clarity and efficiency in user interactions. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): enhance agent onboarding with new question renderer and refined interaction logic - Introduced a new `QuestionRendererView` component to streamline the rendering of onboarding questions. - Refactored the `QuestionRenderer` to utilize a runtime hook for improved state management and separation of concerns. - Updated the onboarding context to fallback to stored questions when the current question is empty, enhancing user experience. - Simplified the onboarding API by removing unnecessary read token requirements from various endpoints. - Added tests to validate the new question rendering logic and ensure proper functionality. This update aims to create a more efficient and user-friendly onboarding experience by improving the question handling and rendering process. Signed-off-by: Innei <tukon479@gmail.com> * Add dev history view for onboarding * remove: prosetting Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): inline response language step in agent conversation - Add ResponseLanguageInlineStep and wire into Conversation flow - Extend agent onboarding context and update ResponseLanguageStep route - Add tests and onboarding agent document design spec Made-with: Cursor * β¨ feat(onboarding): enhance onboarding flow with inbox integration and schema refactor - Updated onboarding process to migrate conversation topics to the inbox upon completion, ensuring users can revisit their onboarding discussions. - Introduced a new schema-driven normalizer and node handler registry to streamline onboarding data handling, reducing code duplication and improving maintainability. - Added comprehensive tests for new document builders and onboarding service methods to ensure functionality and reliability. - Refactored existing components to support the new onboarding structure and improve user experience. This update aims to create a more cohesive onboarding experience by integrating user identity data into the inbox and simplifying the underlying code structure. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(agent-documents): add listDocuments, readDocumentByFilename, upsertDocumentByFilename APIs * β¨ feat(onboarding): add generic user interaction builtin tool * β¨ feat(onboarding): wire generic tool interaction semantics Register user-interaction tool in builtin-tools registry with manifest, intervention components, client executor, and server runtime. Extend BuiltinInterventionProps with interactionMode and onInteractionAction to support custom (non-approval) interaction UIs. Add submit/skip/cancel actions to conversation store with full operation lifecycle management. * π§ fix: add builtin-tool-user-interaction to root workspace dependencies * β»οΈ refactor(onboarding): remove onboarding-owned question persistence Drop askUserQuestion from the web-onboarding tool and remove questionSurface from persisted state. Question presentation is now delegated to the generic lobe-user-interaction tool. * β»οΈ refactor(onboarding): switch UI to generic interaction tool Enable UserInteraction and AgentDocuments tools in web-onboarding and inbox agent configs. Remove obsolete inline question renderers (QuestionRenderer, QuestionRendererView, questionRendererRuntime, questionRendererSchema, ResponseLanguageInlineStep) and simplify Conversation component to only render summary CTA. * π₯ refactor(onboarding): remove identity doc and rewrite soul sync * π fix(user-interaction): add humanIntervention to manifest and implement form UI * π fix(onboarding): create user message on interaction submit instead of re-executing tool * β»οΈ refactor(onboarding): rebuild generic interaction flow Align agent/tool roles and onboarding UI/runtime around the generic interaction rebuild. Made-with: Cursor * β¨ feat(onboarding): implement onboarding document and persona management Introduce a new onboarding document structure that separates agent identity and user persona data. Replace existing `readSoulDocument` and `updateSoulDocument` APIs with `readDocument` and `updateDocument` to handle both SOUL.md and user persona documents. Update related services, client executors, and localization keys to reflect these changes. Ensure document updates are driven by the agent, allowing for incremental updates and improved content management. Signed-off-by: Innei <tukon479@gmail.com> * refactor Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(workflow): introduce unified tool call collapse UI and supporting components Add a new workflow collapse feature that groups tool calls and reasoning into a single collapsible unit, enhancing the user interface for tool call progress. This includes the creation of several components: `WorkflowCollapse`, `WorkflowSummary`, `WorkflowExpandedList`, `WorkflowToolLine`, and `WorkflowReasoningLine`. Update the design specifications and implementation plans to reflect this new structure, aiming for a more cohesive and user-friendly experience. Signed-off-by: Innei <tukon479@gmail.com> * feat(types): add discovery pacing types and constant * feat(onboarding): add countTopicUserMessages and pacing gate to derivePhase * feat(onboarding): capture discovery baseline and return pacing data in getState * β¨ feat(onboarding): add pacing hints to discovery phase tool result * test(onboarding): add discovery pacing gate tests * β»οΈ refactor(onboarding): soften discovery pacing gate and add early exit exception - MIN_DISCOVERY_USER_MESSAGES lowered from 4 to 2 (hard floor) - RECOMMENDED_DISCOVERY_USER_MESSAGES = 4 (advisory hint) - Tool protocol rule 2 now has explicit early exit exception - Pacing hint text changed from imperative to advisory * β¨ feat(onboarding): update .gitignore and remove outdated onboarding plans - Added `docs/superpowers` to .gitignore to exclude documentation files from version control. - Deleted several outdated onboarding implementation plans, including those for onboarding inbox integration, generic interaction rebuild, and user question simplification, to streamline project documentation. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): refine agent onboarding, streaming, and AskUserQuestion Made-with: Cursor * β¨ feat(store): add pending interventions selector * π fix(store): handle standalone tool messages and structural children traversal in pending interventions selector * β¨ feat(conversation): create InterventionBar component Add InterventionBar UI component with tab bar for multiple pending interventions, reusing the existing Intervention detail component. * π fix(conversation): use stable toolCallId for active tab state and add min-height: 0 Track active intervention by toolCallId instead of array index to prevent stale selection when interventions are resolved. Add min-height: 0 to scrollable content for correct overflow in flex column layout. * feat(chatinput): show InterventionBar when pending interventions exist * feat(tool): collapse inline intervention to one-line summary with scroll-to-bottom * feat(i18n): add intervention bar translation keys * π fix(chatinput): prevent infinite render loop from pendingInterventions selector * π fix(chatinput): use equality function for pendingInterventions to break render loop * refactor(tool): remove CollapsedIntervention, return null for pending inline * feat(i18n): add form.other translation key * feat(tool): add styles for select field with Other option * feat(tool): add SelectFieldInput with Other option row * feat(tool): wire SelectFieldInput and update validation in AskUserQuestion * fix(tool): add keyboard handler to Other row, fix label flex * refactor(tool): restore Select dropdown, add Other toggle row below * refactor(tool): change Other to form-level escape hatch, restore antd Select * refactor(tool): replace checkbox toggle with minimal text link escape hatch * feat(tool): use lucide icons, auto-focus on escape toggle, createStaticStyles * refactor(onboarding): update onboarding model references and improve styling in ModeSwitch component Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): add greeting entry animation keyframes and card styles * β¨ feat(onboarding): add LogoThree and entry animations to greeting card * β¨ feat(onboarding): add View Transition morph from greeting to conversation * refactor(onboarding): simplify ModeSwitch component by removing segmentedGlass styling Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat(onboarding): increase maximum onboarding steps to 5 and add ProSettingsStep component Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: enhance user interaction question handling with validation schema - Introduced Zod validation for askUserQuestion arguments to ensure correct structure. - Updated test to reflect new question format with fields. - Added error handling in AskUserQuestion component to log submission errors. This improves the robustness of user interactions by enforcing schema validation and enhancing error reporting. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: enhance agent metadata handling and onboarding synchronization - Updated `useAgentMeta` to prioritize custom titles from the database, falling back to the default Lobe AI title if none exists. - Integrated `refreshBuiltinAgent` into the onboarding process to ensure the latest agent data is reflected during user interactions. - Adjusted the `InboxItem` component to display the correct agent title and avatar based on the updated metadata. - Refactored optimistic update actions to improve message handling and synchronization across components. This improves the user experience by ensuring that the most relevant agent information is displayed and updated in real-time during onboarding and conversation flows. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: enhance conversation lifecycle and onboarding agent synchronization - Updated `ConversationLifecycleActionImpl` to include additional context parameters (agentId, groupId, threadId, topicId) when updating message plugins for aborted interactions. - Integrated `refreshBuiltinAgent` for the inbox during the onboarding process to ensure the latest agent data is synchronized. These changes improve the handling of conversation lifecycle events and ensure that onboarding reflects the most current agent information, enhancing user experience during interactions. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: implement agent onboarding feature toggle and enhance ModeSwitch component - Introduced `AGENT_ONBOARDING_ENABLED` configuration to control the visibility of the agent onboarding options. - Updated `ModeSwitch` component to conditionally render onboarding options based on the feature toggle. - Enhanced tests for `ModeSwitch` to cover scenarios for both enabled and disabled states of agent onboarding. - Refactored `AgentOnboardingRoute` to navigate to the classic onboarding if the agent onboarding feature is disabled. These changes improve the onboarding experience by allowing dynamic control over the agent onboarding feature, ensuring that users only see relevant options based on the configuration. Signed-off-by: Innei <tukon479@gmail.com> * β¨ feat: update agent onboarding feature toggle to include development mode - Modified `AGENT_ONBOARDING_ENABLED` to also activate in development mode using `isDev`. - This change allows for easier testing and development of the agent onboarding feature without needing to alter production configurations. Signed-off-by: Innei <tukon479@gmail.com> * Prevent welcome message when onboard * π fix: satisfy ToolExecutionContext and updateMessageTools typings Made-with: Cursor * π fix: update tests for custom builtin agent title and discovery phase constants * π fix: use custom inbox agent title and avatar in InboxWelcome * π§Ή chore(onboarding): remove HistoryPanel unit test Made-with: Cursor * π fix: add missing onboarding/agent and onboarding/classic routes to desktop config * β test: fix failing tests for onboarding container, document helpers, and executor * β test: mock LogoThree to prevent Spline runtime fetch errors in CI --------- Signed-off-by: Innei <tukon479@gmail.com> Co-authored-by: Codex <noreply@openai.com>
* feat: create new topic every 4 hours * fix: bot topic try catch * fix: test case
β¦3571) --------- Co-authored-by: Arvin Xu <arvinxx@ArvindeMacBook-Pro.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by-agent: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
#13546) * β»οΈ refactor(bot): migrate Bot service to Agent Runtime Hooks framework Migrate the last consumer (Bot/AgentBridgeService) from legacy completionWebhook/stepWebhook/stepCallbacks dual-track pattern to the unified hooks API. This completes LOBE-6208 Step 4. - Enrich AgentHookEvent with step presentation + tracking data - Enrich afterStep hook dispatch with full step context - Merge executeWithWebhooks + executeWithInMemoryCallbacks into unified hooks - Remove legacy triggerCompletionWebhook, triggerStepWebhook, stepCallbacks - Remove completionWebhook/stepWebhook/webhookDelivery from params LOBE-6675 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix(hooks): dispatch completion hooks on early-terminal return and fix totalToolCalls lag - Add dispatchCompletionHooks in early-terminal branch of executeStep so onComplete hooks fire when operation is already interrupted/done/error between queued steps (e.g., via /stop) - Include current step's toolsCalling in afterStep totalToolCalls so consumers get an accurate cumulative count instead of lagging by one step Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test: update tests to match hooks-based architecture - Rewrite executeStep tests to use hookDispatcher spies instead of removed registerStepCallbacks/getStepCallbacks API - Rewrite completionWebhook tests to use hooks param and _hooks metadata instead of removed completionWebhook param - Delete stepLifecycleCallbacks.test.ts (tests removed API, coverage now provided by HookDispatcher.test.ts + executeStep.test.ts) - Update AgentRuntimeService.test.ts abort test to remove stepCallbacks Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: resolve remaining CI failures from hooks migration - Fix TS18048 errors: guard metadata access with null check in _stepTracking block - Migrate remaining registerStepCallbacks usage in AgentRuntimeService.test.ts to hookDispatcher.dispatch spies: onComplete error tests and onAfterStep tool result extraction tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test(bot): update AgentBridgeService tests for hooks-based execution Old tests expected execAgent to NOT be called (because APP_URL check would throw in queue mode). With hooks migration, the APP_URL check is gone (hooks use relative URLs resolved by HookDispatcher), so execAgent is now called. Update tests to verify hooks are passed correctly instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test(bot): add hook payload compatibility tests for BotCallbackService Add tests verifying that webhook payloads from HookDispatcher (containing hookId/hookType fields) are correctly handled by BotCallbackService. This validates the critical contract between the hooks framework and the bot callback endpoint for step progress, completion, and error paths. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test: add hooks integration tests for e2e payload verification Add integration tests that verify the full executeStep β hookDispatcher chain produces events with all fields bot consumers depend on: - afterStep event includes content, stepType, totalTokens, executionTimeMs - afterStep event includes cross-step tracking (lastLLMContent, totalToolCalls) - afterStep event includes toolsResult for tool_result phases - onComplete fires on early-terminal states (interrupted) with lastAssistantContent - All RenderStepParams-required fields are present and correctly typed These tests catch payload format regressions without needing production infrastructure (Redis, QStash, real bot platforms). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* β¬οΈ chore(desktop): bump agent-browser to v0.24.0 https://claude.ai/code/session_01XnRtpGn54turwVXf4MziLM * π chore: update agent-browser skill to match upstream v0.24.0 Sync the local-testing skill's agent-browser section with the upstream SKILL.md from vercel-labs/agent-browser. Adds new commands: batch, auth vault, semantic locators, annotated screenshots, clipboard, dialog handling, diff, streaming, iOS simulator, dashboard, cloud providers, and engine selection. https://claude.ai/code/session_01XnRtpGn54turwVXf4MziLM --------- Co-authored-by: Claude <noreply@anthropic.com>
β¦13535) * π fix: remove XOR auth header and legacy apiKey bypass (GHSA-5mwj-v5jw-5c97) Completely remove the forgeable X-lobe-chat-auth XOR obfuscation mechanism: - Remove apiKey fallback in checkAuthMethod (auth bypass vector) - Rewrite checkAuth to use session/OIDC userId only, never trust client header - Delete XOR encoding/decoding utilities and tests - Delete dead keyVaults TRPC middleware (no consumers) - Simplify createHeaderWithAuth (no longer sends XOR payload) - Remove SECRET_XOR_KEY constant - Remove authorizationHeader from TRPC lambda context - Clean up CLI to only send Oidc-Auth header - Update all affected tests The LOBE_CHAT_AUTH_HEADER constant is retained for the async caller (server-to-server) path which uses AES encryption via KeyVaultsGateKeeper. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: restore createPayloadWithKeyVaults for fetchOnClient path The client-side model runtime (fetchOnClient) needs getProviderAuthPayload and createPayloadWithKeyVaults to build provider SDK init params directly in the browser. These functions are unrelated to XOR encoding. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: guard against null session before accessing user id Add explicit null check before accessing session.user.id to prevent TypeError when session is null (e.g. unauthenticated requests). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: add missing AgentRuntimeError import Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: remove dead createRuntime code path causing type error The createRuntime property was removed from checkAuth's RequestHandler type but still referenced in the route handler, causing TS2339. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
β¦13603) * β¨ feat: add GatewayStreamNotifier for Agent Gateway WebSocket push Add a decorator that wraps IStreamEventManager to additionally push events to the Agent Gateway via HTTP (fire-and-forget). When AGENT_GATEWAY_SERVICE_TOKEN is configured, the factory automatically wraps the base stream manager with the gateway notifier. Redis SSE remains the primary event channel; the gateway is an additive push layer for WebSocket delivery. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test: add GatewayStreamNotifier and factory gateway wrapping tests Ensure the decorator always delegates to the inner stream event manager first, gateway failure never drops Redis events, and the factory correctly wraps/skips based on AGENT_GATEWAY_SERVICE_TOKEN. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: add timeout, bounded concurrency and url-join to gateway notifier - 5s AbortSignal timeout on every gateway POST to prevent hanging sockets - Max 20 inflight requests; excess silently dropped with a debug log - Use url-join for URL construction instead of string concatenation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: resolve TS18048 possibly undefined in test Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β»οΈ refactor: move gateway env vars to appEnv Read AGENT_GATEWAY_SERVICE_TOKEN and AGENT_GATEWAY_URL from the validated appEnv config instead of raw process.env. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β»οΈ refactor: move gateway URL default into appEnv Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* π§ chore: disable input completion by default The input auto-completion experience is not polished enough yet, so disable it by default. Users can still enable it manually in Settings > Agent. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: update snapshot for disabled input completion default Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* π fix: use main scope messages for thread fork to fix subtopic re-fork failure When inside a subtopic (activeThreadId set), openThreadCreator and portalAIChats used activeDisplayMessages which included activeThreadId in the key, returning thread-scoped messages instead of main conversation messages. This caused genParentMessages to fail finding the target message, resulting in empty parent messages and a broken/loading fork UI. Fix: use messageMapKey with only agentId/topicId to always get main scope messages. Closes LOBE-5023 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: include groupId in main scope key for group session support Address Codex review: pass activeGroupId to messageMapKey so that fork and thread selectors work correctly in group conversations where messages are keyed by group scope instead of main scope. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
β¦#13584) π fix(github-copilot): surface quota exhaustion 429 instead of retrying When the GitHub Copilot API returns a 429 with a Retry-After header exceeding 5 minutes (indicating quota exhaustion rather than transient rate limiting), throw the error immediately instead of retrying up to MAX_RATE_LIMIT_RETRIES times with a silently capped 10s delay. Fixes #13572
β¦#13557) Bumps [electron](https://github.com/electron/electron) from 41.0.3 to 41.1.0. - [Release notes](https://github.com/electron/electron/releases) - [Commits](electron/electron@v41.0.3...v41.1.0) --- updated-dependencies: - dependency-name: electron dependency-version: 41.1.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
β¦ Google tool schemas (#13613) Google Gemini / Vertex AI rejects `additionalProperties` and `$ref` in function declaration schemas. The previous fix (PR #13524) resolved most `$ref` via `resolveRefs()` but missed two cases: 1. `additionalProperties` was never stripped 2. `$ref` survived when `resolveRefs` hit its depth limit (>10) on recursive schemas Add both keys to UNSUPPORTED_SCHEMA_KEYS so `sanitizeSchemaForGoogle()` strips them after ref resolution. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* β¨ feat: add WebSocket gateway support to CLI agent run CLI `agent run` now connects to Agent Gateway via WebSocket by default, falling back to SSE when `--sse` is passed. After auth, sends `resume` to fetch buffered events (covers race between exec and WS connect). - Add `streamAgentEventsViaWebSocket` in agentStream.ts - Add `resolveAgentGatewayUrl` in settings - Add `OFFICIAL_AGENT_GATEWAY_URL` constant - Support `AGENT_GATEWAY_SERVICE_TOKEN` env for gateway auth - Add `--sse` flag for forced SSE fallback Fixes LOBE-6800 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * β test: add WebSocket gateway stream tests for CLI Cover auth flow, resume, event rendering, JSON mode, auth failure, heartbeat_ack, URL construction, and a multi-step tool-call scenario. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: persist agentGatewayUrl in saveSettings/loadSettings saveSettings and loadSettings now handle agentGatewayUrl so custom gateway configuration survives across CLI runs. Default URL is stripped like serverUrl to keep the settings file minimal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * π fix: remove AGENT_GATEWAY_SERVICE_TOKEN and fix JSON double-print in WS stream 1. Remove AGENT_GATEWAY_SERVICE_TOKEN env var β gateway auth should only use Oidc-Auth / X-API-Key from the existing auth flow. 2. Fix --json mode printing duplicate JSON arrays: agent_runtime_end, session_complete, and onclose all called console.log independently. Add jsonPrinted guard so only the first path outputs JSON. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
β¦kflow (#13604) Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
π fix(prompts): enforce user perspective in input completion prompt The autocomplete prompt was generating completions from the AI assistant's perspective (e.g., "How can I help you?") instead of the user's perspective. Added explicit perspective constraints with good/bad examples. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@arvinxx @ONLY-yours @sxjeru - This is the weekly release PR (20260407) covering 336 commits. It includes desktop platform changes, CLI agent/bot/migrate features, new model providers (GPT-5.4 mini/nano, GLM-5, Qwen 3.5 omni, MiMo), CI/CD workflow updates, and security fixes. Please coordinate review. |
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bd8143c464
βΉοΈ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with π.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
π release: 20260407
This release includes 148 commits. Key updates are below.
Models & Providers
glm-5v-turbo, GLM-5.1 updates, and qwen3.5-omni series. #13487 #13405 #13422Response API & Runtime
response.completedoutput correctness. #13506 #13555Desktop App
agent-browser,electron). #13550 #13557CLI
lh agent run. #13277Security
apiKeyfallback behavior in webapi auth path to prevent bypass risk. #13535Bug Fixes
Credits
Huge thanks to these contributors:
@chriszf @hardy-one @Innei @lijian @neko @OctopusNote @rdmclin2 @rivertwilight @RylanCai @suyua9 @sxjeru @Tsuki @wangyk @WindSpiritSR @yizhuo @YuTengjing @hezhijie0327 @arvinxx