💄 style(tasks): detail polish round + heartbeat webhook fix + notif deep-link#14228
Conversation
… input Switch the right-side ProgressSection to selectCurrentTurnTodosFromMessages so it appears and disappears in lockstep with the TodoProgress bar above ChatInput, instead of lingering on stale historical todos. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
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: 5df507ad32
ℹ️ 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".
Place the Tasks entry directly under Home in the sidebar header alongside Search/Home, instead of letting it float inside the customizable body list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## canary #14228 +/- ##
==========================================
+ Coverage 68.07% 68.09% +0.01%
==========================================
Files 2266 2266
Lines 194267 194349 +82
Branches 19558 23506 +3948
==========================================
+ Hits 132243 132336 +93
+ Misses 61895 61884 -11
Partials 129 129
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
…ment input Switch the task detail comment input from a bordered card on `colorBgElevated` (which read as outline-only in light mode) to a `colorFillTertiary` filled card so it looks consistently filled in both light and dark themes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Address two regressions introduced when ProgressSection moved off Accordion: - Re-add keyboard/ARIA semantics on the toggle (role=button, tabIndex, aria-expanded, aria-controls, Enter/Space handler) so keyboard and screen-reader users can collapse/expand the panel. Toggle now lives on the header row only, so clicking todos no longer collapses the panel. - Replace the `max-height: 600px` cap with the `grid-template-rows: 0fr → 1fr` pattern, letting the list grow to its natural height. Long todo plans are no longer clipped; the parent sidebar (already `overflow-y: auto`) handles scrolling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…task Why: taskDocuments table and TaskModel.pinDocument exist with pinnedBy='agent', but the agent-documents runtime never called pinDocument, so documents written during a task were never linked to that task's workspace. How: In agentDocumentsRuntime factory, read context.taskId and pin the new documentId after createDocument / createTopicDocument / copyDocument / upsertDocumentByFilename. Idempotent via the existing (taskId, documentId) unique constraint. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Why: The taskDocuments table now auto-populates when an agent writes a doc, and the backend already serves the workspace tree (own task + descendants) via getTaskDetail. The detail page just wasn't rendering it yet. How: New TaskArtifacts component reads activeTaskWorkspace and shows a collapsible tree (file/folder + size + source-task tag). Selectable is off for now — click-through interaction will land in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The hook was registered without `delivery: 'qstash'`, defaulting to plain fetch. The target route `/api/workflows/task/on-topic-complete` is mounted under `qstashAuth()`, which rejects unsigned requests with 401 in production. `HookDispatcher.fetchDeliver` only logs failures, so the webhook silently failed — leaving topic.status stuck at 'running' forever for every heartbeat (and regular) task in production. Same fix applied to all four agentEvalRun webhook registrations for consistency, even though those routes are currently unauthenticated. LOBE-8303 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…chat Resolve the SPA path (group / 1:1 topic / agent root) from the conversation context when posting a desktop notification, and forward it through the existing main-broadcast `navigate` pipeline so clicking the notification brings the user back to the originating chat instead of just focusing the window. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Removes 'tasks' from the fixed header nav and re-adds it as a default, user-reorderable item under the body sidebar (alongside pages / recents). Reverts the header-promotion from 287a3ac in favor of letting users place / hide the tab themselves. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Split a dedicated TaskBriefCard for the detail timeline so brief styling there can diverge from the daily-brief card without conditionals. - Promote the agent avatar (with profile popup) to the TopicCard header, drop the redundant author chip and calendar icon next to the timestamp. - Move the dashed divider from BriefCardSummary into BriefCard so any consumer of the summary block doesn't get an unexpected leading rule. - Tighten card padding (CommentCard / TopicCard) to align with the timeline rhythm. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eep-link (lobehub#14228) * ✨ feat(tasks/progress): align workspace progress visibility with chat input Switch the right-side ProgressSection to selectCurrentTurnTodosFromMessages so it appears and disappears in lockstep with the TodoProgress bar above ChatInput, instead of lingering on stale historical todos. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks): promote tasks entry into top-level header nav Place the Tasks entry directly under Home in the sidebar header alongside Search/Home, instead of letting it float inside the customizable body list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks/comment): use filled background for the task detail comment input Switch the task detail comment input from a bordered card on `colorBgElevated` (which read as outline-only in light mode) to a `colorFillTertiary` filled card so it looks consistently filled in both light and dark themes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ♿ fix(tasks/progress): restore keyboard toggle & uncap expanded list Address two regressions introduced when ProgressSection moved off Accordion: - Re-add keyboard/ARIA semantics on the toggle (role=button, tabIndex, aria-expanded, aria-controls, Enter/Space handler) so keyboard and screen-reader users can collapse/expand the panel. Toggle now lives on the header row only, so clicking todos no longer collapses the panel. - Replace the `max-height: 600px` cap with the `grid-template-rows: 0fr → 1fr` pattern, letting the list grow to its natural height. Long todo plans are no longer clipped; the parent sidebar (already `overflow-y: auto`) handles scrolling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(tasks/documents): auto-pin agent-created documents to current task Why: taskDocuments table and TaskModel.pinDocument exist with pinnedBy='agent', but the agent-documents runtime never called pinDocument, so documents written during a task were never linked to that task's workspace. How: In agentDocumentsRuntime factory, read context.taskId and pin the new documentId after createDocument / createTopicDocument / copyDocument / upsertDocumentByFilename. Idempotent via the existing (taskId, documentId) unique constraint. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(tasks/artifacts): render task-level artifacts on the detail page Why: The taskDocuments table now auto-populates when an agent writes a doc, and the backend already serves the workspace tree (own task + descendants) via getTaskDetail. The detail page just wasn't rendering it yet. How: New TaskArtifacts component reads activeTaskWorkspace and shows a collapsible tree (file/folder + size + source-task tag). Selectable is off for now — click-through interaction will land in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 🐛 fix(tasks/lifecycle): deliver onTopicComplete webhook via QStash The hook was registered without `delivery: 'qstash'`, defaulting to plain fetch. The target route `/api/workflows/task/on-topic-complete` is mounted under `qstashAuth()`, which rejects unsigned requests with 401 in production. `HookDispatcher.fetchDeliver` only logs failures, so the webhook silently failed — leaving topic.status stuck at 'running' forever for every heartbeat (and regular) task in production. Same fix applied to all four agentEvalRun webhook registrations for consistency, even though those routes are currently unauthenticated. LOBE-8303 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(desktop/notification): deep-link notification click to source chat Resolve the SPA path (group / 1:1 topic / agent root) from the conversation context when posting a desktop notification, and forward it through the existing main-broadcast `navigate` pipeline so clicking the notification brings the user back to the originating chat instead of just focusing the window. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks): move tasks tab back into the customizable sidebar Removes 'tasks' from the fixed header nav and re-adds it as a default, user-reorderable item under the body sidebar (alongside pages / recents). Reverts the header-promotion from 287a3ac in favor of letting users place / hide the tab themselves. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks/detail): introduce TaskBriefCard, polish topic row layout - Split a dedicated TaskBriefCard for the detail timeline so brief styling there can diverge from the daily-brief card without conditionals. - Promote the agent avatar (with profile popup) to the TopicCard header, drop the redundant author chip and calendar icon next to the timestamp. - Move the dashed divider from BriefCardSummary into BriefCard so any consumer of the summary block doesn't get an unexpected leading rule. - Tighten card padding (CommentCard / TopicCard) to align with the timeline rhythm. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(agent/header): round segmented control items in ViewSwitcher Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eep-link (lobehub#14228) * ✨ feat(tasks/progress): align workspace progress visibility with chat input Switch the right-side ProgressSection to selectCurrentTurnTodosFromMessages so it appears and disappears in lockstep with the TodoProgress bar above ChatInput, instead of lingering on stale historical todos. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks): promote tasks entry into top-level header nav Place the Tasks entry directly under Home in the sidebar header alongside Search/Home, instead of letting it float inside the customizable body list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks/comment): use filled background for the task detail comment input Switch the task detail comment input from a bordered card on `colorBgElevated` (which read as outline-only in light mode) to a `colorFillTertiary` filled card so it looks consistently filled in both light and dark themes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ♿ fix(tasks/progress): restore keyboard toggle & uncap expanded list Address two regressions introduced when ProgressSection moved off Accordion: - Re-add keyboard/ARIA semantics on the toggle (role=button, tabIndex, aria-expanded, aria-controls, Enter/Space handler) so keyboard and screen-reader users can collapse/expand the panel. Toggle now lives on the header row only, so clicking todos no longer collapses the panel. - Replace the `max-height: 600px` cap with the `grid-template-rows: 0fr → 1fr` pattern, letting the list grow to its natural height. Long todo plans are no longer clipped; the parent sidebar (already `overflow-y: auto`) handles scrolling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(tasks/documents): auto-pin agent-created documents to current task Why: taskDocuments table and TaskModel.pinDocument exist with pinnedBy='agent', but the agent-documents runtime never called pinDocument, so documents written during a task were never linked to that task's workspace. How: In agentDocumentsRuntime factory, read context.taskId and pin the new documentId after createDocument / createTopicDocument / copyDocument / upsertDocumentByFilename. Idempotent via the existing (taskId, documentId) unique constraint. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(tasks/artifacts): render task-level artifacts on the detail page Why: The taskDocuments table now auto-populates when an agent writes a doc, and the backend already serves the workspace tree (own task + descendants) via getTaskDetail. The detail page just wasn't rendering it yet. How: New TaskArtifacts component reads activeTaskWorkspace and shows a collapsible tree (file/folder + size + source-task tag). Selectable is off for now — click-through interaction will land in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 🐛 fix(tasks/lifecycle): deliver onTopicComplete webhook via QStash The hook was registered without `delivery: 'qstash'`, defaulting to plain fetch. The target route `/api/workflows/task/on-topic-complete` is mounted under `qstashAuth()`, which rejects unsigned requests with 401 in production. `HookDispatcher.fetchDeliver` only logs failures, so the webhook silently failed — leaving topic.status stuck at 'running' forever for every heartbeat (and regular) task in production. Same fix applied to all four agentEvalRun webhook registrations for consistency, even though those routes are currently unauthenticated. LOBE-8303 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(desktop/notification): deep-link notification click to source chat Resolve the SPA path (group / 1:1 topic / agent root) from the conversation context when posting a desktop notification, and forward it through the existing main-broadcast `navigate` pipeline so clicking the notification brings the user back to the originating chat instead of just focusing the window. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks): move tasks tab back into the customizable sidebar Removes 'tasks' from the fixed header nav and re-adds it as a default, user-reorderable item under the body sidebar (alongside pages / recents). Reverts the header-promotion from 287a3ac in favor of letting users place / hide the tab themselves. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(tasks/detail): introduce TaskBriefCard, polish topic row layout - Split a dedicated TaskBriefCard for the detail timeline so brief styling there can diverge from the daily-brief card without conditionals. - Promote the agent avatar (with profile popup) to the TopicCard header, drop the redundant author chip and calendar icon next to the timestamp. - Move the dashed divider from BriefCardSummary into BriefCard so any consumer of the summary block doesn't get an unexpected leading rule. - Tighten card padding (CommentCard / TopicCard) to align with the timeline rhythm. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 style(agent/header): round segmented control items in ViewSwitcher Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# 🚀 LobeHub Release (20260509) **Release Date:** May 9, 2026 **Since v2.1.56:** 236 merged PRs · 19 contributors > Agent Task System reaches general availability, the Agent Signal pipeline runs nightly self-review with skill-aware policies, the heterogeneous-agent runtime crosses replica boundaries, inline documents become a first-class context source, and bot platforms expand across Messager, Line, and Telegram. --- ## ✨ Highlights - **Agent Task System (GA)** — End-to-end task execution platform: templates, tracking, comment tools, parent reassignment, scheduled cron, and dependency-ordered batch runs. (#14540, #14515, #14517, #14272, #14246, #14418, #14403, #14488) - **Agent Signal nightly self-review** — Wired self-review loop with prompt + DB support, exponential-backoff retry on receipt listing, skill-aware policy, and improved skill-intent detection. (#14543, #14542, #14281, #14409, #14526, #14437) - **Inline documents in KB tool** — BM25 search and `docs_*` read for inline document grounding; agent documents usable as VFS. (#14494, #14222) - **Inline agent cards in chat** — `lobeAgents` markdown tag renders agent profile cards inline; clickable card after `createAgent`. (#14495, #14493) - **Heterogeneous agent runtime** — Cloud hetero exec pipeline steps 3+4 land, persistence recovers across Vercel replicas, server-side ingest/finish handler, and `lh hetero exec` CLI. (#14486, #14539, #14444, #14431) - **Bot platforms expand** — Messager, Line, DM pair policy, and messenger DB tables; Telegram API path restored. (#14442, #14207, #14211, #14496, #14519) - **Visual analysis tool** — New visual understanding tool, with trigger tracking and flattened schema. (#14378, #14399, #14550) - **DeepSeek V4 Pro as OSS default** — OSS deployments ship with DeepSeek V4 Pro by default; DeepSeek Anthropic runtime supported. (#14555, #14312) --- ## 🏗️ Core Agent & Architecture ### Agent Task System - **Task System GA** — End-to-end execution platform now available. (#14540) - **Templates, comments, reparenting** — Template tracking, comment tools, and parent reassignment. (#14515, #14517, #14488) - **Cron + dependency-ordered runs** — Scheduled status with cron editor and dependency-ordered subtask batches. (#14246, #14418, #14272) - **Inspector + chip UI + batch tasks** — Task Inspector/Render registry, batch `createTasks`/`runTasks`, and chip-based agent-documents inspector. (#14403, #14404) - **Recommend templates regardless of brief count** — Recommendations no longer suppressed when briefs are sparse. (#14508) - **Scheduling resilience** — Manual run no longer eats next scheduled tick; recurring tasks survive brief resolution. (#14304, #14348) - **Brief synthesis** — Auto-synthesize topic briefs; brief actions revamp; mute resolved-brief icon on home. (#14324, #14228, #14452) - **Task list & detail polish** — Topic operation ID exposed; task drawer Gateway reconnect. (#14282) ### Agent Signal pipeline - **Nightly self-review wired** — Prompt + DB support for the self-review loop. (#14543) - **Self-review activities push to briefs** — Activities during nightly self-reflection now create briefs. (#14437) - **Skill management policy** — New policy for Skill management running inside Agent Signal. (#14281) - **Skill intent detection & routing** — Improved detection plus direct intent handling when `hintIsSkill`. (#14409, #14526) - **Document tool outcome rendering** — Decision view restores missing document tool outcomes. (#14534) - **Exponential backoff retry** — Listing signal receipts retries with jittered backoff. (#14542) - **Easier-to-use signals** — Structural simplification + recent-activities surface for receipts. (#14290, #14326, #14407) ### Heterogeneous agent runtime - **Cloud hetero exec pipeline (steps 3 + 4)** — Refactor lands the next two stages of the cloud hetero agent execution pipeline. (#14486) - **Persistence recovery on Vercel** — Hetero state recovered across replica boundaries. (#14539) - **Server-side ingest/finish + persistence** — `aiAgent.heteroIngest` / `heteroFinish` handlers. (#14444) - **`lh hetero exec` CLI** — Standalone heterogeneous agent runs from CLI. (#14431) - **Gateway round-trip loading** — `execAgentTask` keeps the input box in loading state through the full round-trip. (#14503) - **Provider SDK type routing** — Provider routing now respects SDK type. (#14520) - **DeepSeek reasoning preserved** — `reasoning_content` preserved in OpenAI-compatible runtime for DeepSeek models. (#14546) ### Knowledge & inline docs - **KB tool BM25 + docs read** — BM25 search and `docs_*` read integrated for inline documents. (#14494) - **Agent documents as VFS** — FS-compatible output for agent documents. (#14222) - **`lobeAgents` markdown tag** — Inline agent cards rendered from a markdown tag. (#14495) - **Clickable agent card after `createAgent`** — Mentions and recommendations become clickable. (#14493) - **ExplorerTree** — Generic tree component built on `@pierre/trees` for reusable explorer surfaces. (#14094) - **Local file mention snapshots** — Mentions can now snapshot local files. (#14278) ### Architecture - **Agent Hono routes** — New agent routes added on Hono. (#14535) - **`/api/agent` migrated to Hono** — Remaining `/api/agent` routes finish their migration. (#14478) - **Agent marketplace merged into web-onboarding** — Reduces package fragmentation. (#14514) - **Producer pipeline extracted** — Shared package for the producer pipeline. (#14425) - **`agentDispatcher.selectRuntimeType`** — New runtime selection abstraction. (#14428) - **pnpm v11 migration** — Workspace consolidated. (#14316) - **Browser-compatible frontmatter parser** — Replaces `gray-matter`. (#14435) --- ## 📱 Platforms & Integrations - **Messager support** — New messager package wired into the chat surface. (#14442) - **Messenger DB tables** — IM bot integration gains its persistence layer. (#14496) - **Line bot** — Initial Line support and downstream optimization. (#14207, #14448) - **DM pair policy** — Group/DM pair-based delivery. (#14211) - **Telegram API restored** — Missing Telegram API path reconnected. (#14519) - **xAI Responses tools stabilized** — Plus unsupported parameter handling. (#14462, #14445) - **Volcengine websearch via ResponseAPI** — Built-in websearch for Volcengine. (#14216) --- ## 🤖 Models & Providers - **DeepSeek V4 Pro default for OSS** — OSS distribution defaults to DeepSeek V4 Pro. (#14555) - **DeepSeek Anthropic runtime** — Anthropic-shape runtime support for DeepSeek. (#14312) - **GPT-5.5 / GPT-5.5 Pro** — New OpenAI tier. (#14142) - **Grok 4.20 / Grok 4.3 / LobeHub-hosted Grok 4.3** — (#14253, #14382, #14446) - **Gemma 4 + provider settings normalization** — (#13313) - **gpt-image-2 + step-image-edit-2** — (#14253, #14329) - **Model bank refresh + original-pricing display** — Batch model updates and pricing surfaces. (#14070, #14391) - **Hunyuan migrated to TokenHub for Hy3 Preview** — (#14108) - **Reject lobehub model ids no longer in the bank** — (#14261) - **Hide runtime-only aliases** — Runtime-only model aliases no longer leak into the model picker. (#14552) --- ## 🖥️ User Experience ### Onboarding - **Shared prefix steps** — Language and privacy extracted as shared prefix steps. (#14538) - **Identity intervention card simplified** — Plus tool result renders cleanup. (#14505, #14506) - **Welcome polish + web-onboarding tool UI** — (#14475) - **Templates fetched from market API** — (#14286) - **Virtual model id for default onboarding model** — (#14311) - **Skip / mode-switch footer behind feature flag** — Footer guarded for desktop and web initialization. (#14560) ### Home & navigation - **Home recents performance** — Recents refresh periodically and inline task status; brief and task-template fetch overhead trimmed. (#14518, #14516) - **Home refactor + skill-connect recommendations** — Restructured home with skill-connect recommendation system. (#14266, #14214) - **Tasks in agent sidebar** — Tasks moved from welcome card into the sidebar list. (#14500) - **Sidebar collapse persists** — Home sidebar collapse state stored. (#14473) - **Agent-specific topic grouping** — Plus improved empty state and agent identity in topic search. (#14225) - **MentionMenu scroll fix** — Mention menu no longer clips inside chat input. (#14533) ### Conversation & chat - **Follow-up chips fill input** — Clicking a follow-up chip now fills the input instead of sending immediately. (#14536) - **Quick-reply chips below assistant messages** — (#14350) - **Inline single-tool assistant group + leading sentence promotion** — (#14244) - **Assistant-group rendering** — Per-segment content overrides flow into MessageContent. (#14504) - **Tool call timer fix** — Timer no longer resets when tool calls collapse or expand. (#14513) - **Streaming re-render reduction** — Reference stabilization and self-subscribing components. (#14470) - **Topic chat drawer feedback input** — (#14392) ### Skills, agents, devtools - **Managed skill folders** — Agent view displays managed skill folders and aligns delete confirmations. (#14553) - **Review tab + bulk git diffs** — New Review tab with bulk diffs; gating uses effective working directory. (#14334, #14512) - **Devtools gallery rebuild** — Plus Review polish, queue-tray images. (#14423) - **Agent mock devtools** — Playback & fixture viewer. (#14436) ### Desktop & CLI - **App tray visibility setting** — (#14463) - **Notification settings in desktop** — (#14491) - **Multimodal input across CLI / shared spawn / desktop** — (#14433) - **CLI bot + userId guide** — (#14258) --- ## 🔧 Tooling - **Visual analysis tool** — New visual understanding tool with flattened schema. (#14378, #14550) - **GitHub marketplace tool UI** — (#14420) - **Drop "Local" prefix and `____builtin` suffix from tool names** — (#14364, #14289) - **Sanitize provider tool names** — Avoids invalid characters from external providers. (#14510) - **Generation moderation context** — Moderation context passed through the generation pipeline. (#14541) - **Visual analysis trigger tracking** — (#14399) - **Claude thinking signature sanitization** — History signatures sanitized when replaying Claude conversations. (#14499) - **Responses input media sanitization** — Assistant media sanitized in Responses input. (#14497) --- ## 🔒 Security & Reliability - **Security:** Removed the `/webapi/proxy` route and dead URL-manifest plugin code to shrink the SSRF surface. (#14549) - **Security:** Sessions revoked after password reset. (#14424) - **Reliability:** Added `prompt_cache_key` to OpenAI chat requests for stable cache hits. (#14349) - **Reliability:** `onFinish` now fires even when the browser tab is backgrounded mid-SSE stream. (#14461) - **Reliability:** Better-auth session refetch preserves user fields rather than overwriting them. (#14531) - **Reliability:** User-memory queries sanitize backticks; user-memory errors now explicitly injected so failures stay visible. (#14524, #14525) - **Reliability:** Auth captcha retries handled; input loading unsticks on `auth_failed` and recoverable `auth_expired`. (#14346, #14419) - **Reliability:** Trace snapshot finalized on error path. (#14440) - **Reliability:** Drop `switchTopic` race under rapid sidebar clicks. (#14115) - **Reliability:** PDF chunking logic fixed to prevent vectorization failure. (#14327) - **Performance:** Marketplace fork uses a batched API for parallel installs. (#14537) - **Performance:** Review tab open latency cut ~9× on large dirty trees. (#14338) --- ## 👥 Contributors Huge thanks to **18 contributors** who shipped **236 merged PRs** this cycle. @hezhijie0327 · @sxjeru · @yueyinqiu · @octo-patch · @hardy-one · @Coooolfan · @CanYuanA · @BillionClaw · @arvinxx · @tjx666 · @Innei · @neko · @AmAzing129 · @rdmclin2 · @lijian · @sudongyuer · @rivertwilight · @cy948 Plus @lobehubbot for i18n and translation maintenance. --- **Full Changelog**: v2.1.56...release/weekly-20260509
💻 Change Type
🔗 Related Issue
🔀 Description of Change
Bundle of 11 commits on the task detail / progress UI plus two adjacent fixes that surfaced along the way. Roughly grouped:
Tasks detail page
TaskArtifacts).agentDocumentsRuntime→taskDocuments. Idempotent via existing unique constraint.TaskBriefCardfor the detail timeline so brief styling there can diverge from the daily-brief card without conditionals.TopicCardheader, drop the redundant author chip and calendar icon next to the timestamp.BriefCardSummaryintoBriefCardso any consumer of the summary block doesn't get an unexpected leading rule.CommentCard/TopicCardpadding to align with the timeline rhythm.colorBgElevated(which read as outline-only in light mode) tocolorFillTertiaryfilled card.Workspace progress alignment
ProgressSectiontoselectCurrentTurnTodosFromMessagesso it appears / disappears in lockstep with theTodoProgressbar aboveChatInput, instead of lingering on stale historical todos.max-height: 600pxcap with thegrid-template-rows: 0fr → 1frpattern so long todo plans aren't clipped.Sidebar placement
taskstab back into the customizable body sidebar (reverts the earlier header-promotion in this same branch — gives users control over placement / visibility).Other surfaces
navigatepipeline so clicking the notification brings the user back to the originating chat instead of just focusing the window.ant-segmented-itemcorners in the agent headerViewSwitcher.🐛 LOBE-8303 fix
The
onTopicCompletehook intaskRunnerwas registered withoutdelivery: 'qstash', defaulting to plain fetch. The target route/api/workflows/task/on-topic-completeis mounted underqstashAuth(), which rejects unsigned requests with 401 in production.HookDispatcher.fetchDeliveronly logs failures, so the webhook silently failed — leavingtask_topic.statusstuck at'running'forever for every heartbeat (and regular) task in production.Verified against production DB via
lobehub-analysis-cli: agent reached the finish executor (clearedrunningOperation) buttasks.last_heartbeat_atwas never updated past startup andtasks.contextremained empty — provingonTopicCompletewas never invoked.Local dev / Electron never reproduced because
QSTASH_CURRENT_SIGNING_KEYis unset →qstashAuthmiddleware skips the check.Same fix mirrored to all four
agentEvalRunwebhook registrations for consistency (those routes are currently unauth, so they were never broken — the change just unifies the pattern).🧪 How to Test
agentEvalRun/__tests__/trajectoryMethods.test.tsupdated for the newdeliveryfield)Steps:
automationMode: 'heartbeat', run a topic. Verifytask_topics.statustransitions to'completed'after the agent finishes andtasks.last_heartbeat_atgets refreshed past the agent completion timestamp.CustomizeSidebarModal.📝 Additional Information
taskRunner/index.ts(+ 4 mirrored lines inagentEvalRun/index.ts); minimal blast radius.HookDispatcher.fetchDelivershould warn / retry on non-2xx instead of silently logging;taskLifecycle.onTopicCompleteshould add reason fallback forinterrupted / waiting_for_human / max_steps / cost_limit.🤖 Generated with Claude Code