Skip to content

✨ feat: devtools gallery rebuild, Review polish, queue-tray images#14423

Merged
arvinxx merged 8 commits into
canaryfrom
feat/devtools-render-gallery
May 4, 2026
Merged

✨ feat: devtools gallery rebuild, Review polish, queue-tray images#14423
arvinxx merged 8 commits into
canaryfrom
feat/devtools-render-gallery

Conversation

@arvinxx

@arvinxx arvinxx commented May 4, 2026

Copy link
Copy Markdown
Member

πŸ’» Change Type

  • ✨ feat
  • ♻️ refactor
  • πŸ› fix
  • πŸ’„ style
  • πŸ‘· build
  • ⚑️ perf
  • βœ… test
  • πŸ“ docs
  • πŸ”¨ chore

πŸ”— Related Issue

N/A β€” three small, semi-independent pieces. The branch grew while it was open; the three groups landed together rather than being split because they're individually small and share no merge conflicts.

πŸ”€ Description of Change

This PR bundles three loosely-related improvements:

  1. /devtools render gallery rebuild β€” the original purpose of the branch
  2. Agent Working-Sidebar Review panel polish β€” diff badge routing, path truncation, copy button, toolbar
  3. Chat Message Queue tray β€” preserve images when queueing during an agent run

Plus two small inherited cleanups from feat/notebook-render-cleanup (already merged via #14422 + a CC subagent streaming scroll-cap removal).


1. /devtools render gallery rebuild

Make src/features/DevPanel/RenderGallery actually useful for designing/iterating on builtin-tool renders, not just spot-checking a single component.

a. Lifecycle mode switcher (top of page)

Replace the per-card body-kind segmented with a global Lifecycle Segmented:

Mode Effect
Streaming renders Streaming slot (or Render with isArgumentsStreaming=true); auto-truncates strings/arrays for partialArgs
Loading renders Render slot with isLoading=true, no pluginState
Success renders Render slot with the variant's full pluginState
Error injects success: false + simulated error onto pluginState; sets pluginError
Placeholder renders Placeholder slot
Intervention renders Intervention slot

One click flips every API on the page into the same execution stage. Selection is persisted in localStorage.

b. Per-API fixture variants

Fixture schema is now { variants: [{ id, label, args, content, pluginState, ... }] }. Cards with multiple variants get a small per-card Segmented (e.g. Bash β†’ Match found / Non-zero exit / Large output). Authors only write the resolved success state; streaming/loading/error props are auto-derived by deriveFixtureProps. Multi-variant fixtures shipped for: Bash, Grep, TodoWrite (claude-code), runCommand / listLocalFiles / searchLocalFiles (cloud-sandbox + local-system mirrors), Web search, searchUserMemory, GTD createTodos.

c. Split monolithic fixture file into per-toolset modules

toolRenderFixtures.ts (1466 lines mixing helpers + 85 entries across 21 toolsets) is now fixtures/:

fixtures/
β”œβ”€β”€ _helpers.ts              ← single / variants / defineFixtures + schema utils
β”œβ”€β”€ index.ts                 ← aggregator + getToolRenderFixture / getToolRenderMeta
β”œβ”€β”€ claude-code.ts           13 APIs
β”œβ”€β”€ codex.ts                  3
β”œβ”€β”€ lobe-cloud-sandbox.ts     9
β”œβ”€β”€ lobe-local-system.ts      7
└── … (21 modules total)

Adding a new tool = create one file, register one import. No more 1.4k-line scroll.

d. Inspector gaps closed

Add inspector renders for moveLocalFiles (cloud-sandbox + local-system) and exportFile (cloud-sandbox), via a new shared createMoveLocalFilesInspector factory in @lobechat/shared-tool-ui.

e. GitHub inspector polish

The github run_command inspector now reads as [icon] gh [chip:api /repos/...] βœ“ β€” the literal gh and the GitHub icon live outside the chip so the chip carries only the gh subcommand.


2. Agent Working-Sidebar Review panel

  • Diff-badge routing β€” the diff chip in the assistant toolbar now opens the Review panel directly instead of bouncing through an intermediate state; the Review toolbar itself got a clearer header + actions row.
  • File-path truncation that actually works β€” long absolute paths no longer push the close (Γ—) icon off-screen; truncation is head-side (so the trailing filename is always visible) and re-measures on row resize.
  • Hover copy-path button β€” each Review row now gets a small copy-path icon on hover, no extra row height when idle.

Affected files live under src/routes/(main)/agent/features/Conversation/WorkingSidebar/Review/**.


3. Chat Message Queue tray β€” preserve images when queueing

When the user sends a message while the agent is still running, the message lands in the Queue Tray (above the input box) and is replayed once the current run finishes. The previous implementation was text-only:

  • The queue stored files: string[] (just file IDs); preview URLs / names / mime types were thrown away on enqueue.
  • The tray rendered nothing for attachments β€” the user couldn't tell whether their images were still attached.
  • After the queue drained, sendMessage rebuilt the optimistic message from getFileStoreState().chatUploadFileList, but that store was cleared by the input handler the moment the original click fired β€” so the optimistic bubble showed no images. (The server-side persisted message did include the files, so the final render was correct, but the in-flight UX silently dropped them.)
  • Edit (pencil) restored only the markdown text, leaving images on the floor entirely.

This PR snapshots { id, name, mimeType, url } per file at enqueue time, renders them inline in the tray (28Γ—28 thumbnails with click-to-zoom for images, file chips for everything else), and reconstructs UploadFileItem-shaped entries on the three resume paths:

Action Resume path
Auto-drain after current run finishes streamingExecutor rebuilds files from merged.filesPreview and re-fires sendMessage
Send-now (↑ icon) Same reconstruction inside the tray, with the running op cancelled first
Edit (pencil icon) Files dispatched back into chatUploadFileList so the input area shows them again

The optimistic-message preview block in conversationLifecycle.ts was also switched from getFileStoreState().chatUploadFileList to the (already captured) files parameter β€” fixes the same drop-on-clear hazard for the direct-send path too.

πŸ§ͺ How to Test

  • bun run type-check clean
  • Operation queue tests pass (bunx vitest run src/store/chat/slices/operation/__tests__) β€” added a mergeQueuedMessages flatten case for filesPreview
  • conversationLifecycle.test.ts and streamingExecutor.test.ts pass
  • Added/updated UI tests
  • No tests needed for /devtools (dev-only surface, gated by route)

Manual checks:

Devtools

  1. Open /devtools/claude-code, flip Lifecycle through the 6 modes β€” confirm Streaming streams text, Loading shines, Success shows result, Error shows X icon, Placeholder/Intervention swap to those slots when registered.
  2. On a multi-variant API like Bash, switch the in-card variant Segmented and verify the Inspector + Body update.
  3. Navigate between toolsets β€” Lifecycle choice should persist (localStorage).
  4. /devtools/lobe-cloud-sandbox β†’ confirm the previously-crashing moveLocalFiles and previously-empty exportFile cards now show inspectors.

Agent Review panel
5. Trigger an agent run that produces a diff β†’ click the diff chip in the assistant toolbar β†’ Review panel opens with the new toolbar.
6. Resize the Review panel narrow β€” long paths head-truncate; the close icon stays visible.
7. Hover a row β†’ copy-path icon appears; click it β†’ path is on the clipboard.

Queue Tray
8. Start a long agent run, then in the input attach 1–2 images + text and press Enter β†’ the tray shows thumbnails + ellipsised text.
9. Click the image thumbnail β†’ preview overlay zooms.
10. Click the pencil (Edit) β†’ input area re-populates with both text and images.
11. Click ↑ (Send Now) β†’ current run is cancelled, the queued item fires immediately with images attached.
12. Let the agent finish naturally β†’ queued messages drain and re-send with images intact (no flash of an image-less optimistic bubble).

πŸ“Έ Screenshots / Videos

Before After
Per-card body-kind segmented; flat fixtures; many APIs in No inspector registered state Top-level Lifecycle bar; per-card variant chips; full inspector coverage on cloud-sandbox / local-system
Review long paths overflow; no copy button Head-truncated paths; hover copy icon
Queue tray text-only; images silently disappear on send / edit Inline 28Γ—28 thumbnails with click-to-zoom; Edit restores files

πŸ“ Additional Information

@vercel

vercel Bot commented May 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
lobehub Ready Ready Preview, Comment May 4, 2026 2:50pm

Request Review

@dosubot dosubot Bot added the size:XXL This PR changes 1000+ lines, ignoring generated files. label May 4, 2026

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @arvinxx, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@codecov

codecov Bot commented May 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 22.17391% with 179 lines in your changes missing coverage. Please review.
βœ… Project coverage is 68.69%. Comparing base (aa3c7e5) to head (5989e97).
⚠️ Report is 2 commits behind head on canary.

Additional details and impacted files
@@            Coverage Diff             @@
##           canary   #14423      +/-   ##
==========================================
- Coverage   68.73%   68.69%   -0.04%     
==========================================
  Files        2496     2497       +1     
  Lines      213967   214157     +190     
  Branches    22456    26899    +4443     
==========================================
+ Hits       147061   147117      +56     
- Misses      66762    66896     +134     
  Partials      144      144              
Flag Coverage Ξ”
app 62.86% <22.17%> (-0.05%) ⬇️
database 92.37% <ΓΈ> (ΓΈ)
packages/agent-runtime 79.94% <ΓΈ> (ΓΈ)
packages/builtin-tool-lobe-agent 83.41% <ΓΈ> (ΓΈ)
packages/context-engine 83.88% <ΓΈ> (ΓΈ)
packages/conversation-flow 92.43% <ΓΈ> (ΓΈ)
packages/file-loaders 87.60% <ΓΈ> (ΓΈ)
packages/memory-user-memory 74.74% <ΓΈ> (ΓΈ)
packages/model-bank 99.94% <ΓΈ> (ΓΈ)
packages/model-runtime 83.82% <ΓΈ> (ΓΈ)
packages/prompts 69.57% <ΓΈ> (ΓΈ)
packages/python-interpreter 92.90% <ΓΈ> (ΓΈ)
packages/ssrf-safe-fetch 0.00% <ΓΈ> (ΓΈ)
packages/types 5.05% <ΓΈ> (ΓΈ)
packages/utils 88.02% <ΓΈ> (ΓΈ)
packages/web-crawler 88.29% <ΓΈ> (ΓΈ)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Ξ”
Store 66.80% <34.37%> (+0.03%) ⬆️
Services 53.80% <ΓΈ> (ΓΈ)
Server 69.93% <ΓΈ> (-0.01%) ⬇️
Libs 53.36% <ΓΈ> (ΓΈ)
Utils 79.95% <ΓΈ> (ΓΈ)
πŸš€ New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • πŸ“¦ JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dosubot dosubot Bot added the feature:tool Tool calling and function execution label May 4, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cd7285549

ℹ️ 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".

Comment thread src/store/chat/slices/message/selectors/dbMessage.ts
arvinxx and others added 3 commits May 4, 2026 21:35
…ruction

Render the full prompt inline while the subagent is running instead of confining it to a 240px scroll box.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…gallery

Replace the per-card body-kind segmented with a top-level Lifecycle switcher
(Streaming / Loading / Success / Error / Placeholder / Intervention) so every
API on a toolset page renders in the same execution stage with one click.

Each fixture now lives under `{ variants: [...] }`; APIs that need only one
preview state stay terse via `single({...})`, while content-heavy APIs (Bash,
Grep, TodoWrite, listLocalFiles, runCommand, searchLocalFiles, search,
searchUserMemory, createTodos, etc.) carry multiple labelled variants
(success / empty / failure / large output) selectable from a per-card chip.

Streaming/loading/error props are auto-derived from the variant's success
state by `deriveFixtureProps`, so authors only write the resolved data and
get every lifecycle stage for free.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…modules

The 1.4k-line `toolRenderFixtures.ts` mixed schema utilities, helpers, custom
toolset metadata, and 85 fixture entries across 21 toolsets. Adding a tool meant
scrolling that file; merging it with another fixture change was painful.

Replace it with a `fixtures/` folder where each toolset owns one file
(`fixtures/<identifier>.ts`) using a `defineFixtures({ identifier, meta?,
apiList?, fixtures })` helper. `fixtures/index.ts` aggregates them and exposes
the same `getToolRenderFixture` / `getToolRenderMeta` getters consumers already
rely on, so `useDevtoolsEntries` only needed an import path swap.

Shared utilities (`single`, `variants`, `defineFixtures`, schema sample helpers)
live in `fixtures/_helpers.ts`. Adding a tool is now: drop a new
`fixtures/<id>.ts`, register it in the index β€” no need to touch shared data.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@arvinxx arvinxx force-pushed the feat/devtools-render-gallery branch from 9cd7285 to b9e9b19 Compare May 4, 2026 13:36
arvinxx and others added 2 commits May 4, 2026 21:42
- ChatInput diff badge now opens the right-side Review tab instead of a
  popover; tab state lifted to global store so external triggers can
  switch it
- Review header gains expand/collapse-all, "..." dropdown for refresh
  + word-wrap + inline text-diff + view-mode, and a total +/- counter
  beside the Unstaged chip
- Persist word-wrap, text-diff, view-mode via new useLocalStorageState
  hook so prefs survive reloads
- Head-truncate filenames in the Collapse header so the basename stays
  visible when paths are long
- content-visibility: auto on file panels to keep scroll smooth with
  many large diffs

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- antd Collapse's `.ant-collapse-header-text` doesn't propagate
  `min-width: 0`, so our `flex: 1` path couldn't shrink and long
  paths pushed the stats + chevron off-screen instead of
  triggering text-overflow ellipsis. Force min-width:0 on the
  header-text and overflow:hidden on the header so the
  RTL head-truncation actually kicks in.
- Add a hover-revealed copy button between the path and the diff
  stats (GitHub Files-Changed style). Uses @lobehub/ui's
  copyToClipboard + a success toast, and stops propagation so
  clicking it doesn't toggle the panel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Message Queue tray only carried text β€” file ids were stored but their
preview metadata was dropped, so the tray showed no thumbnails and the
optimistic temp message after drain had an empty imageList because
chatUploadFileList was already cleared. Snapshot {id, name, mime, url}
on enqueue, render thumbnails (click-to-zoom) and file chips in the
tray, and reconstruct UploadFileItem-shaped entries on drain / Send Now
/ Edit so images survive both the queued send and the input restore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two bugs in the previous attempt at head-truncation:

1. The CSS targeted .ant-collapse-header-text, which only exists in
   antd v4/v5; antd v6 renames the slot to .ant-collapse-title and
   the @lobehub/ui Collapse default of `collapsible: 'header'` makes
   antd apply a (0,4,0) rule pinning that title to flex: 0 0 auto.
   Our parent-className override was only (0,3,0) so the title kept
   hugging its content width and pushed stats + chevron off-screen
   instead of triggering ellipsis. !important + correct class wins.

2. Putting `direction: rtl` on the whole path span made even short
   paths right-align inside the row, looking visibly off. Split the
   path into a shrinkable dir span (RTL trick scoped here) plus a
   non-shrinking filename span so short paths stay left-aligned and
   only long paths collapse leading dirs into "…".

Also:
- Stats follow the filename instead of being pinned to the right edge
  (pathWrapper is now flex: 0 1 auto rather than flex: 1).
- Move copy button after stats so the row reads
  [path] [stats] [copy] [chevron].

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@arvinxx arvinxx changed the title ♻️ refactor(devtools): rebuild render gallery with lifecycle modes + per-toolset fixtures ✨ feat: devtools gallery rebuild, Review polish, queue-tray images May 4, 2026
@arvinxx arvinxx merged commit 78b3dbe into canary May 4, 2026
34 of 35 checks passed
@arvinxx arvinxx deleted the feat/devtools-render-gallery branch May 4, 2026 15:13
Innei added a commit that referenced this pull request May 9, 2026
# πŸš€ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature:tool Tool calling and function execution size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant