✨ feat: promote agent documents as primary workspace panel#13924
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ffdf819713
ℹ️ About Codex in GitHub
Your team has set up Codex to 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 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } catch (error) { | ||
| message.error( | ||
| error instanceof Error | ||
| ? error.message | ||
| : t('workingPanel.resources.deleteError', { ns: 'chat' }), |
There was a problem hiding this comment.
Re-throw delete errors from confirm handler
When removeDocument (or the follow-up mutate) fails, this catch block swallows the error and allows onOk to resolve, so Ant Design closes the confirm modal even though deletion did not succeed. In failure cases, users lose the in-modal retry path and must start the delete flow again; this is a regression from the previous behavior that re-threw on failure.
Useful? React with 👍 / 👎.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## canary #13924 +/- ##
===========================================
- Coverage 86.05% 66.78% -19.28%
===========================================
Files 599 2088 +1489
Lines 49891 177438 +127547
Branches 7755 17475 +9720
===========================================
+ Hits 42934 118500 +75566
- Misses 6833 58814 +51981
Partials 124 124
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
ffdf819 to
c7d89fc
Compare
The agent working sidebar previously used a FileTree directory view and
a hand-rolled Markdown+TextArea editor with manual save. Agent documents
already back onto the canonical `documents` table via an FK, so they can
reuse the exact same rendering surface as Notebook.
- AgentDocumentsGroup: replace FileTree with a flat card list styled
after Portal/Notebook/DocumentItem (icon + title + description + delete).
- AgentDocumentEditorPanel: drop the bespoke draft/save/segmented view
logic; mount the shared <EditorCanvas documentId={doc.documentId}
sourceType="notebook" /> inside an EditorProvider so auto-save and
rich editing are handled by useDocumentStore.
- Replace the agent-document sidebar with a Notebook-style list: pill
filter (All/Docs/Web), per-item createdAt, globe icon for sourceType=web.
- Add a stable panel header "Resources" with a close button (small size,
consistent with other chat header actions); no border divider.
- Wire clicks to the shared Portal Document view via openDocument(),
retiring the inline AgentDocumentEditorPanel.
- Portal/Document/Header now resolves title directly from documentId
via documentService.getDocumentById + a skeleton loading state.
- Portal top-right close icon switched to `X`.
- Layout: move AgentWorkingSidebar to the rightmost position; auto-collapse
the left navigation sidebar while Portal is open (PortalAutoCollapse).
- Header: remove dead NotebookButton, drop the Notebook menu item; add a
WorkingPanelToggle visible only when the working panel is collapsed.
- ProgressSection hides itself when the topic has no GTD todos.
- Builtin tool list removes Notebook; migrate CreateDocument Render and
Streaming renderers to builtin-tool-agent-documents (notebook package
kept for legacy rendering of historical tool calls).
- agent_documents list UI now reads from a separate SWR key
(documentsList) so the agent-store context mapping doesn't strip
documentId/sourceType/createdAt from the UI payload.
- i18n: add workingPanel.resources.filter.{all,documents,web},
viewMode.{list,tree}, and the expanded empty-state copy; zh-CN
translations seeded for preview.
- New local-testing reference: agent-browser-login (inject better-auth
cookie for authenticated agent-browser sessions).
…yId, coerce showLeftPanel
d40c67f to
a340075
Compare
* ✨ feat(onboarding): add preset agent naming suggestions * 🐛 fix(test): align AgentDocumentsGroup test assertions with title-first rendering #13940 changed DocumentItem to prefer title over filename, but the AgentDocumentsGroup tests from #13924 were still asserting on filename strings. Update all text matchers to use titles (Brief / Example).
# 🚀 LobeHub v2.1.53 (20260427) **Release Date:** April 27, 2026 **Since v2.1.52:** 194 merged PRs · 17 contributors > Introduce Heterogeneous Agent — Claude Code and Codex run as first-class desktop runtimes, paired with a new Agent Signal package, sharper desktop UX, and a wave of flagship model additions. --- ## ✨ Highlights - **Introduce Heterogeneous Agent** — Claude Code and Codex run as first-class desktop agents: subagent rendering, partial-message streaming, multi-turn resume, terminal error surfacing, rich tool inspectors, and runtime polish. (#14162, #13754, #14067, #14001, #13970, #13942) - **Screen capture & Quick Chat tray** — New desktop screen capture overlay (macOS permission-gated) with Quick Chat tray and upload pipeline improvements; chat input auto-focuses on overlay mount. (#13818, #14097, #14105) - **Desktop topic & tab UX** — Dedicated topic popup window with cross-window sync, Cmd+W/Cmd+T tab shortcuts, TabBar polish, recent working directories expanded to 20, and human approval notifications. (#13957, #13983, #13972, #14036, #14092) - **Git workflow built-in** — One-click pull/push from the branch chip, ahead/behind badge, and submodule/worktree repo detection. (#14041, #13980, #13978) - **Agent Signal package** — New `@lobechat/agent-signal` runtime for dynamic memory feedback signals, with OTel metrics and self-iteration in Lab. (#14157, #14170, #14159, #14169, #14187) - **New models** — Claude Opus 4.7 with `xhigh` effort tier, GPT-5.5, DeepSeek V4 Flash/Pro with reasoning slider, Kimi K2.6, MiMo-V2.5/Pro, gpt-image-2, Qwen3.6 Flash/Plus, and Pixverse-c1. (#13903, #14147, #14114, #14004, #14089, #14039, #13923) - **New providers** — OpenCode Zen, OpenCode Go, and Azure OpenAI Router runtime. (#13943, #14064, #13823) - **Mobile settings overhaul** — Full settings menu and responsive profile layout for mobile. (#14019) --- ## 🏗️ Heterogeneous Agent - Claude Code runtime, working-directory awareness, and sidebar polish. (#13970) - CC subagent rendering with persistent streamed text; parallel-tool orphan fix. (#14001, #13968, #14024) - Per-step usage persisted to each step assistant message. (#13964) - Per-phase workflow expand defaults; full-expand toggle with three-level expansion. (#14171, #13906) - Hetero-mode actions bar; tool inspector polish. (#13963, #14034, #14030) - Codex desktop integration with rich tool rendering and devtools preview. (#14067, #14100) - Codex terminal error surfacing and CLI output tracing. (#14166) - Tighten `isCanUseVision` default and add aggregator fallback. (#14172) - Persist `ccSessionId` in topic metadata for CC multi-turn resume. (#13902) - CC account card, topic filter, and integration polish. (#13955, #13942, #13950) - Token-level deltas streamed via `--include-partial-messages`. (#13929) --- ## 🧠 Agent Signal & Self-Iteration - New `@lobechat/agent-signal` package with dynamic feedback signals. (#14157) - AgentSignalRuntime wired through agent-tracing and observability-otel metrics. (#14170, #14159) - Self-iteration feature flag added to Lab; front-side flag check. (#14169, #14186) - Signal policy for receiving memory feedback dynamically. (#14187) --- ## 💬 Conversation - Queue follow-up sends during running CC turns. (#14179) - Persist per-topic chat scroll position; pin user message + fold long messages. (#14191, #14056) - Inline resend when editing last user message. (#14080) - Disable first-block markdown streaming to prevent flicker. (#14193, #13904) - Prevent Markdown stream replay when vlist remounts streaming items. (#14086) - Stop repinning after manual scroll; unify scroll-to-user + spacer hooks. (#14099, #14132) --- ## 📱 Platforms & Integrations ### Desktop / Electron - Screen capture overlay, Quick Chat tray, and upload pipeline improvements. (#13818) - macOS permission gate for screen capture; auto-focus chat panel input. (#14097, #14105) - Dedicated topic popup window with cross-window sync. (#13957) - TabBar polish: `+` button for new topic, dark theme blend, close icon by default. (#13972, #14203, #13973) - Recent working directories expanded from 5 to 20; submodule/worktree repo detection. (#14036, #13978) - Cmd+W / Cmd+T tab shortcuts and global shortcut consolidation. (#13983, #13880) - Linux icon configuration; human approval desktop notifications. (#14042, #14092) ### Git Workflow - One-click pull/push from branch chip; ahead/behind badge with refactored GitCtr. (#14041, #13980) ### Mobile - Full settings menu and responsive profile layout. (#14019) - Agent route added to mobile router; mobile agent topic route registered. (#14103, #14158) - Session list skeleton row layout corrected. (#14040) ### Bot / Messaging - DM strategy support; bot emoji and markdown render optimization. (#14201, #14091, #14140) - Slack webhook fix; bot platform setup guide reference. (#14052, #14121) --- ## 🤖 Models & Providers ### New models - **Claude Opus 4.7** with `xhigh` effort tier; strip temperature/top_p. (#13903, #13909) - **GPT-5.5**. (#14147) - **DeepSeek V4** Flash/Pro cards with reasoning slider; cache-hit and Pro discount pricing. (#14114, #14209, #14196, #14131) - **Kimi K2.6** model with LobeHub-hosted card. (#14004, #14006) - **MiMo-V2.5 / V2.5-Pro**. (#14089) - **gpt-image-2**, **Qwen3.6 Flash/Plus**, **Pixverse-c1**. (#14039, #13923) ### New providers - **OpenCode Zen** and **OpenCode Go** with env-var support. (#13943, #14064) - **Azure OpenAI Router** runtime support. (#13823) - Model alias mapping for image and video runtimes. (#13896) - Seedance video models migrated to Dreamina. (#14144) ### Runtime reliability - Sanitize invalid tool_call arguments to unbreak strict providers. (#14033) - Tolerate null `function.name` in streaming tool_call deltas. (#14139) - Preserve Gemini 3 `thoughtSignature` in `call_tools_batch` normalization. (#14032) - Downgrade `image_url` parts when target model lacks vision. (#14029) - Preserve Cloudflare provider error context. (#14136) - Use `safety_identifier` for OpenAI Responses API. (#14148) - Unwrap underlying PG error in `formatErrorEventData`. (#14038) --- ## 🖥️ User Experience - **Onboarding** — Preset agent naming suggestions, structured hunk ops for `updateDocument`, persona analytics snapshot, footer promotion pipeline, wrap-up button. (#13931, #13989, #13930, #13853, #13934) - **Document workflow** — Agent documents promoted as primary workspace panel; history management and compare workflow; web-crawl docs associated with agent documents. (#13924, #13725, #13893) - **cmdk** — Agent identity surfaced on topic search results; topic/message search scoped to current agent. (#14204, #13960) - **Floating chat panel** and workspace improvements. (#13887) - **Topic completion status** with dropdown action and filter. (#14005) --- ## 🔧 Tooling - Redis-backed feature flag provider for runtime config. (#14098) - Vite upgraded to 8.0.0 with Rolldown strict execution order. (#12720, #14058) - `@lobechat/model-bank` automated npm release with provenance. (#14015, #14017, #14018) - Skill activation fallback when `activateTools` cannot find identifier. (#14010) - Cron tool: timezone and existing jobs injected into system prompt; clarified `lobe-gtd` and `lobe-cron` descriptions. (#14012, #14013) --- ## 🔒 Security & Reliability - **Security:** uuid bumped to v14 (advisory). (#14083) - **Security:** validate avatar URL and scope old-avatar deletion to owner. (#13982) - **Security:** clear OIDC sessions on better-auth signout; return 401 (not 500) for expired OIDC JWT. (#13916, #14014) - **Reliability:** scope pending-approval check to current assistant turn. (#14182) - **Reliability:** sanitize heterogeneous-agent attachment cache filenames. (#13937) - **Reliability:** reduce subagent task status error noise. (#14026) --- ## 👥 Contributors Huge thanks to **17 contributors** who shipped **194 merged PRs** this week. @hardy · @shaun0927 · @hezhijie0327 · @sxjeru · @arvinxx · @Innei · @tjx666 · @lijian · @neko · @rdmclin2 · @AmAzing129 · @sudongyuer · @CanisMinor · @rivertwilight Plus @lobehubbot and renovate[bot] for maintenance. --- **Full Changelog**: v2.1.52...v2.1.53
…3924) * ♻️ refactor: adopt Notebook list + EditorCanvas for agent documents The agent working sidebar previously used a FileTree directory view and a hand-rolled Markdown+TextArea editor with manual save. Agent documents already back onto the canonical `documents` table via an FK, so they can reuse the exact same rendering surface as Notebook. - AgentDocumentsGroup: replace FileTree with a flat card list styled after Portal/Notebook/DocumentItem (icon + title + description + delete). - AgentDocumentEditorPanel: drop the bespoke draft/save/segmented view logic; mount the shared <EditorCanvas documentId={doc.documentId} sourceType="notebook" /> inside an EditorProvider so auto-save and rich editing are handled by useDocumentStore. * ✨ feat: promote agent documents as the primary workspace panel - Replace the agent-document sidebar with a Notebook-style list: pill filter (All/Docs/Web), per-item createdAt, globe icon for sourceType=web. - Add a stable panel header "Resources" with a close button (small size, consistent with other chat header actions); no border divider. - Wire clicks to the shared Portal Document view via openDocument(), retiring the inline AgentDocumentEditorPanel. - Portal/Document/Header now resolves title directly from documentId via documentService.getDocumentById + a skeleton loading state. - Portal top-right close icon switched to `X`. - Layout: move AgentWorkingSidebar to the rightmost position; auto-collapse the left navigation sidebar while Portal is open (PortalAutoCollapse). - Header: remove dead NotebookButton, drop the Notebook menu item; add a WorkingPanelToggle visible only when the working panel is collapsed. - ProgressSection hides itself when the topic has no GTD todos. - Builtin tool list removes Notebook; migrate CreateDocument Render and Streaming renderers to builtin-tool-agent-documents (notebook package kept for legacy rendering of historical tool calls). - agent_documents list UI now reads from a separate SWR key (documentsList) so the agent-store context mapping doesn't strip documentId/sourceType/createdAt from the UI payload. - i18n: add workingPanel.resources.filter.{all,documents,web}, viewMode.{list,tree}, and the expanded empty-state copy; zh-CN translations seeded for preview. - New local-testing reference: agent-browser-login (inject better-auth cookie for authenticated agent-browser sessions). * update * 🐛 fix: satisfy tsc strict i18next keys, remove duplicate getDocumentById, coerce showLeftPanel * ♻️ refactor: graduate agent working panel out of labs
* ✨ feat(onboarding): add preset agent naming suggestions * 🐛 fix(test): align AgentDocumentsGroup test assertions with title-first rendering lobehub#13940 changed DocumentItem to prefer title over filename, but the AgentDocumentsGroup tests from lobehub#13924 were still asserting on filename strings. Update all text matchers to use titles (Brief / Example).
💻 Change Type
🔗 Related Issue
N/A
🔀 Description of Change
Agent documents become the primary workspace; Notebook tool retires from the default list.
Sidebar & layout
createdAtvia dayjs, and a globe icon forsourceType = 'web'(file icon otherwise).Resources) withPanelRightCloseIcon; height matchesNavHeader(44px); no bottom divider.AgentWorkingSidebarto the rightmost position inChatPage(Chat | Portal | AgentWorkingSidebar).PortalAutoCollapseauto-collapses the left nav panel while Portal is open; restores on close.NotebookButton, drop the Notebook menu entry inHeaderActions/useMenu, add aWorkingPanelTogglethat shows only while the panel is collapsed (icon size matchesShareButton/...).ProgressSectionhides itself when the current topic has no GTD todos.Click-through editor
chatStore.openDocument(doc.documentId)— the sharedPortal/Documentview opens instead of an inline editor.AgentDocumentEditorPanel.tsx.Portal/Document/Header.tsxresolves title/filename directly viadocumentService.getDocumentById(id)with a SWR skeleton while loading; no longer depends onuseNotebookStore.Portal/components/Header.tsxclose icon →X.DocumentService.getDocumentById(id)(wrapslambdaClient.document.getDocumentById).SWR cache split
agentDocumentSWRKeysaddsdocumentsList— the agent-store already writes the context-mapped payload (stripped ofdocumentId/sourceType/createdAt) underdocuments, which silently broke the click handler. UI now reads from the new key so it keeps the full row.revalidateAgentDocumentsmutates both keys.Database mapping
AgentDocumentgainssourceType+source;toAgentDocumentmaps them from the joineddocumentsrow.Builtin tool retirement
NotebookManifestremoved frombuiltinTools— Notebook is no longer exposed to the LLM.createDocumentRender + Streaming to@lobechat/builtin-tool-agent-documents/client; register underBuiltinToolsRenders/BuiltinToolStreamings.NotebookRenders/NotebookStreamings/NotebookInterventionsstay registered so historicallobe-notebook.createDocumenttool calls still render. That is also whyidentifiers.tskeepsNotebookManifest.identifier.i18n
workingPanel.resources.filter.{all,documents,web},workingPanel.resources.viewMode.{list,tree}, and the expanded empty-state copy.keySeparator: false).Docs / skills
local-testingreference:agent-browser-login.md— how to inject thebetter-authsession cookie copied from DevTools Network into anagent-browsersession. macOS--headedcreates off-screen windows, which makes manual login inside agent-browser unworkable; this is the workaround.🧪 How to Test
Tested locally (agent-browser + Chrome)
Added/updated tests
bunx vitest run 'src/routes/(main)/agent/features/Conversation/WorkingSidebar'→ 7/7 pass (AgentDocumentsGroup.testnow covers pill filter +openDocumentwiring;WorkingSidebar/index.testcovers panel header + empty state).bunx tsc --noEmit→ clean.Manual (agent-browser driven, authenticated via better-auth cookie):
Resourcesheader, filter pills,fromNowlabels, globe icon for web-crawled docs.documentService.getDocumentById.📸 Screenshots / Videos
Resourcespanel; Portal document editor opens on click📝 Additional Information
viewModestate + tree grouping plumbing are in place inAgentDocumentsGroup, but the tree view toggle is intentionally hidden — the tree UX lands in a follow-up PR.agent_documents↔documentsFK; the schema only gets new read-side fields in the TS model (sourceType,source).