Skip to content

✨ feat(task-template): add home recommendation system with skill connect#14214

Merged
tjx666 merged 22 commits into
canaryfrom
feat/task-templates-recommend
Apr 28, 2026
Merged

✨ feat(task-template): add home recommendation system with skill connect#14214
tjx666 merged 22 commits into
canaryfrom
feat/task-templates-recommend

Conversation

@tjx666

@tjx666 tjx666 commented Apr 27, 2026

Copy link
Copy Markdown
Member

πŸ’» Change Type

  • ✨ feat
  • ♻️ refactor
  • πŸ’„ style

πŸ”— Related Issue

  • Related to LOBE-7422 (recommendation entry point on home)
  • Related to LOBE-8187 (dismiss not-interested cards)
  • Related to LOBE-8188 (OAuth/Klavis skill connect for recommended templates)
  • Related to LOBE-8191 (show schedule time on cards)

πŸ”€ Description of Change

Introduces a "Try these tasks" recommendation section on the home page that suggests scheduled task templates tailored to the user's onboarding interests, then routes the one-click "create" action through agentCronJobService so the resulting cron job is identical to manually-authored ones.

Highlights:

  • Catalog: 19 templates across 8 categories (content-creation, engineering, design, learning-research, business, marketing, product, personal-life) with per-template icon override (icon?: LucideIcon) and category-level fallback. Three templates declare requiresSkills for OAuth (github, notion via Klavis) and chained connections.
  • Service: TaskTemplateService.listDailyRecommend(interestKeys, { enabledSkillSources, excludeIds }) β€” interest intersection match β†’ seeded shuffle (stable per userId Γ— UTC date) β†’ fallback to personal-life/learning-research β†’ fallback to remaining catalog. Skill-gated templates only enter the candidate pool when their source is enabled server-side.
  • Persistence: New table user_task_template_interactions (migration 0100) tracks created and dismissed interactions per (user, templateId) so already-created or dismissed templates are excluded from future picks.
  • Skill connect UX: useSkillConnection consolidates connect-state across LobeHub OAuth (popup + LOBEHUB_SKILL_AUTH_SUCCESS postMessage) and Klavis MCP servers. Cards render a "Connect " CTA when any required skill is missing; once all dependencies resolve, the card flips to "Create". Skill stores are pre-fetched only when the recommendation actually contains an OAuth/Klavis-dependent template.
  • Cron utilities: Promotes parseCronPattern / formatScheduleTime / WEEKDAY_I18N_KEYS from the cron-config feature into @lobechat/utils/cron so both the cron editor and recommendation cards share the same parsing logic.
  • Locales: New taskTemplate namespace (en-US, zh-CN) with title / description / prompt / schedule strings for all 19 templates plus action copy.

πŸ§ͺ How to Test

  • Tested locally
  • Added/updated tests
  • No tests needed

Coverage:

  • packages/const/src/taskTemplate.test.ts β€” catalog shape invariants
  • packages/database/src/models/__tests__/userTaskTemplateInteraction.test.ts β€” interaction persistence
  • packages/utils/src/cron.test.ts β€” promoted cron parsing helpers
  • src/server/services/taskTemplate/index.test.ts β€” recommendation pipeline (interest match, skill gating, fallbacks, exclusion, daily seed stability)
  • src/hooks/useSkillConnection.test.ts β€” connect-state aggregation across providers

Manual:

  1. Onboarding β†’ pick coding interest β†’ go to home β†’ see GitHub-flavored templates.
  2. Click a template that requires GitHub β†’ popup OAuth β†’ success closes popup and CTA flips to "Create".
  3. Click "Create" β†’ cron job appears under the inbox agent.
  4. Click "Dismiss" (X) β†’ card disappears; refresh confirms persistence.

πŸ“Έ Screenshots / Videos

Before After
No recommendation entry on home "Try these tasks" section with per-interest cards, schedule time, dismiss action, and OAuth/Klavis connect CTAs

πŸ“ Additional Information

  • Cross-locale resolution of users.interests (e.g. Chinese label vs canonical key) is currently handled best-effort on the client via the active onboarding locale; deeper normalization is tracked as a follow-up (LOBE-8261) and does not block this PR.
  • TASK_TEMPLATE_FALLBACK_CATEGORIES is intentionally narrow (personal-life, learning-research) so users without matched interests still see useful generic picks instead of an empty section.

@vercel

vercel Bot commented Apr 27, 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 Apr 28, 2026 10:01am

Request Review

@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 @tjx666, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. feature:agent Assistant/Agent configuration and behavior feature:schedule-task Schedule task labels Apr 27, 2026
@codecov

codecov Bot commented Apr 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 51.48515% with 196 lines in your changes missing coverage. Please review.
βœ… Project coverage is 68.09%. Comparing base (2835b99) to head (8b3ea20).
⚠️ Report is 4 commits behind head on canary.

Additional details and impacted files
@@            Coverage Diff             @@
##           canary   #14214      +/-   ##
==========================================
- Coverage   68.13%   68.09%   -0.04%     
==========================================
  Files        2271     2275       +4     
  Lines      194844   195247     +403     
  Branches    23587    19678    -3909     
==========================================
+ Hits       132749   132956     +207     
- Misses      61964    62159     +195     
- Partials      131      132       +1     
Flag Coverage Ξ”
app 61.61% <39.37%> (-0.06%) ⬇️
database 92.09% <ΓΈ> (ΓΈ)
packages/agent-runtime 79.93% <ΓΈ> (ΓΈ)
packages/context-engine 83.25% <ΓΈ> (ΓΈ)
packages/conversation-flow 92.40% <ΓΈ> (ΓΈ)
packages/file-loaders 87.02% <ΓΈ> (ΓΈ)
packages/memory-user-memory 74.74% <ΓΈ> (ΓΈ)
packages/model-bank 99.89% <ΓΈ> (ΓΈ)
packages/model-runtime 84.10% <ΓΈ> (ΓΈ)
packages/prompts 68.17% <ΓΈ> (ΓΈ)
packages/python-interpreter 92.90% <ΓΈ> (ΓΈ)
packages/ssrf-safe-fetch 0.00% <ΓΈ> (ΓΈ)
packages/utils 88.93% <97.61%> (+0.52%) ⬆️
packages/web-crawler 88.66% <ΓΈ> (ΓΈ)

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

Components Coverage Ξ”
Store 67.16% <ΓΈ> (ΓΈ)
Services 53.33% <100.00%> (ΓΈ)
Server 68.56% <100.00%> (+0.03%) ⬆️
Libs 53.30% <ΓΈ> (ΓΈ)
Utils 80.04% <ΓΈ> (ΓΈ)
πŸš€ 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.

@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: 3087f26ad1

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

const taskTemplateProcedure = authedProcedure.use(serverDatabase);

const listDailyRecommendSchema = z.object({
interestKeys: z.array(z.string().max(64)).max(32),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Accept longer interest strings in recommendation input

This schema now rejects any interestKeys entry longer than 64 chars, but onboarding currently allows arbitrary custom interest text and useResolvedInterestKeys forwards it unchanged. For users who entered a long custom interest, listDailyRecommend will fail validation and the recommendation section silently disappears instead of falling back to generic templates.

Useful? React with πŸ‘Β / πŸ‘Ž.

tjx666 added 14 commits April 28, 2026 15:52
Render 3 schedule-task template cards in Home Daily briefs section when the
user has ≀1 unresolved brief. Tapping a card creates an agentCronJob via the
inbox agent. Picks are interest-matched against INTEREST_AREAS keys with
fallback to generic categories; seeded shuffle keeps results stable per
(userId, utcDate).

Client resolves localized `user.interests` labels back to canonical keys via
the current-locale onboarding translations before calling the server β€” the
server takes `interestKeys` as tRPC input rather than querying the DB, so it
works cleanly with both old label-form data and freeform custom text (latter
falls through to fallback pool).
…section

Hide DailyBrief GroupBlock when there are no briefs to show, and mount
TemplateRecommendations as an independent section on the home page with
its own Lightbulb + title header, matching the Try these examples layout.
Drop the custom createFromTemplate mutation and call the shared
agentCronJobService.create from the frontend, using builtinAgentSelectors
to resolve the inbox agent id. The server BriefTemplateService now only
handles listDailyRecommend and no longer needs a database handle.
Align code identifiers, file names, locale namespaces and tRPC router
with the product term "Schedule Task Template".

- briefTemplate β†’ taskTemplate (files, types, services, router, i18n ns)
- BriefTemplate β†’ TaskTemplate
- BRIEF_TEMPLATE_FALLBACK_CATEGORIES β†’ TASK_TEMPLATE_FALLBACK_CATEGORIES
Move TemplateRecommendations out of features/DailyBrief into a sibling
features/TaskTemplates folder. Split the shared style.ts so the new
feature owns its own card and iconBadge styles.

- features/TaskTemplates/index.tsx (component renamed to TaskTemplates)
- features/TaskTemplates/style.ts (own card + iconBadge)
- features/DailyBrief/style.ts drops recommendStyles
- routes/(main)/home/features/index.tsx imports the new path
Add user_task_template_interactions table with firstCreatedAt/dismissedAt
nullable timestamps to support sticky exclusion of created templates and
dismissed cards from daily recommendations.

This is the persistence base for LOBE-8186 (exclude created) and
LOBE-8187 (dismiss card); router/UI integration lands in those follow-ups.
…ecommendations

- agentCronJob.create accepts optional templateId and writes interaction
- listDailyRecommend filters out templates the user has interacted with
- TaskTemplateCard passes template.id when creating a cron job
- Rename "tasks" β†’ "scheduled tasks" in section title and CTA
- Point success toast to Lobe AI (where schedule tasks actually live)
  instead of the non-existent /tasks page
- taskTemplate.dismiss tRPC mutation backed by UserTaskTemplateInteractionModel
- TaskTemplateCard hover-fade Γ— button with optimistic SWR removal,
  reverts via revalidate on failure
- Fix agentCronJobService.create signature to include optional templateId
  (was sending it at runtime since db139f4 but not typed)
Move parseCronPattern, buildCronPattern, ScheduleType from the route-local
CronConfig.ts into the shared @lobechat/utils package, alongside new
formatScheduleTime and WEEKDAY_I18N_KEYS helpers. Update existing callers
in cron/[cronId] to import from the new location. Add unit tests covering
daily / weekly / hourly forms, minute normalization, and buildCronPattern
round-trips.
…BE-8191)

Render the cron-derived schedule time (e.g. "Every day at 09:00",
"Every Monday at 09:00") below each template description so users can
see the cadence before adding it as a scheduled task. Reuse the shared
parseCronPattern from @lobechat/utils/cron and the existing
setting:agentCronJobs.weekday.* keys for weekday names.
…d templates (LOBE-8188)

Add `requiresSkills` field to TaskTemplate so recommendation cards can route
unconnected providers through the existing LobeHub Skill / Klavis OAuth flows
before the user creates a cron job. Server filters out templates whose
required skill sources are disabled by env so users never see Connect
buttons that can't complete.

- introduce `useSkillConnection` facade hook unifying both providers (postMessage + window monitor + 1s polling, 15s timeout)
- ship 3 PoC templates: github-pr-review-daily, notion-weekly-digest, weekly-engineering-digest (multi-skill)
tjx666 added 6 commits April 28, 2026 15:52
Add optional `icon` field on TaskTemplate so individual templates can ship a
more recognizable Lucide glyph (Github / Radar / Type / GitPullRequest / etc).
Cards fall back to the category-level default when unset.
- correct taskTemplates count assertion (16 β†’ 19; was failing CI)
- use browser timezone instead of hardcoded UTC for cron creation
- useSkillConnection: useRef sync lock prevents double-open OAuth popups
- useSkillConnection: 5min overall timeout on the popup window monitor
- useSkillConnection: validate event.source on postMessage handler
- useSkillConnection: drop expected-failure log noise from fallback polling
- cron: extract SCHEDULE_MINUTE_STEP / ALL_WEEKDAYS / normalizeMinuteToHalfHour
- separate type imports in 5 files (project typescript skill convention)
- ICON_BY_CATEGORY: drop unnecessary quotes for plain identifiers
- DailyBrief: collapse three conditional returns into one
- TaskTemplates: rename filter param (t) β†’ (tmpl) to avoid shadowing i18n t
- locales: order resources alphabetically + section.title above templates
lucide-react@1.11.0 dropped brand icons. Use SiGithub from
@icons-pack/react-simple-icons (already a dep, used elsewhere) and
widen TaskTemplate.icon to LucideIcon | IconType so future templates
can pick from either set.
…ent slot

- Drop user_task_template_interactions table, model, migration, and lambda router
- Replace src/features/TaskTemplates with an empty client business slot
  (src/business/client/RecommendTaskTemplates.tsx β†’ memo(() => null))
- Stop persisting templateId in agentCronJob.create; cloud handles it via its
  own dedicated trpc namespace
- Keep the catalog (@lobechat/const), TaskTemplateService (pure algorithm),
  and taskTemplate i18n keys β€” all reused by the cloud override
Update brief catalog and onboarding interests per LOBE-8033 product spec.

- TaskTemplateCategory: add 9 new categories (sales-customer, operations,
  hr, finance-legal, creator, investing, parenting, health, hobbies)
- taskTemplates: replace 19 placeholder samples with 80 production briefs
  covering all 17 categories, gated to clean daily/weekly cron schedules
- INTEREST_AREAS: add 9 matching interests with lucide icons
- i18n: rewrite default (en) + zh-CN (preview) for all 80 brief titles,
  descriptions, and prompts; expand onboarding interest labels
- tests: bump length assertion to 80, expand interest whitelist to 17,
  add scheduleType guard so future monthly/event-driven cron entries
  fail loudly instead of silently rendering as daily

Out of scope (follow-up issues):
- monthly/quarterly/event-driven schedule support
- optionalSkills + OR-relation skill data structures
- Mailchimp / Apple Health / Google Fit provider registration
…chment

Introduces `optionalSkills` on `TaskTemplate` so briefs that benefit from
a connected skill but can run without one stop being filtered out of the
catalog. Adds 4 new briefs (content-calendar-weekly, family-task-schedule,
morning-ritual, bedtime-gratitude) covering the LOBE-8033 designs that
were previously dropped because of the OR/optional skill semantics, plus
a new `action.optionalConnect.button` CTA copy for the UI hint.
tjx666 added 2 commits April 28, 2026 17:48
- Tolerate multi-space cron strings via split(/\s+/) and trim
- Add explicit radix=10 to all parseInt calls
- Avoid mutating input weekdays via copy + numeric sort
Move taskTemplate from a dedicated tRPC namespace into the standard
business slot pattern (alongside subscription, topUp, referral, etc.)
so cloud overrides can plug a real router into the lambda router and
reuse the shared client/context infrastructure.
@tjx666 tjx666 merged commit 19643ba into canary Apr 28, 2026
34 of 35 checks passed
@tjx666 tjx666 deleted the feat/task-templates-recommend branch April 28, 2026 10:11
sxueck pushed a commit to sxueck/lobehub that referenced this pull request Apr 28, 2026
mutoe pushed a commit to mutoe/lobehub that referenced this pull request May 1, 2026
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:agent Assistant/Agent configuration and behavior feature:schedule-task Schedule task 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