✨ feat(tools): show app-fixed tools in the chat-input Pinned section#15509
Conversation
Surface always-on, runtime-owned tools (lobe-agent + always-on infra) read-only at the top of the Tools popover "Pinned" group, so users can see what the app keeps active for every conversation. These have no toggle — a Pin indicator with a hint replaces the per-tool policy menu. - builtin-tools: add `fixedDisplayToolIds` ([lobe-agent, ...alwaysOnToolIds]) - builtin selectors: add `fixedDisplayMetaList` (reads hidden tools by id) - useControls: render read-only fixed items, prepend to Pinned, fold into counts - i18n: add `tools.activation.fixed.hint` + `tools.builtins.lobe-agent.*` Co-Authored-By: Claude Opus 4.8 (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: a82a0e7c5c
ℹ️ 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".
| * `lobe-agent` is listed first as the headline capability; the rest are the always-on | ||
| * discovery/activation infra tools (`alwaysOnToolIds`). | ||
| */ | ||
| export const fixedDisplayToolIds = [LobeAgentManifest.identifier, ...alwaysOnToolIds]; |
There was a problem hiding this comment.
Don't mark conditionally enabled tools as fixed
This fixed list includes tools that are not actually enabled for every conversation. I checked the tool-engine paths: lobe-agent is only enabled when injected into plugins/runtime plugin ids (the existing tests assert it is not enabled by default), and manual skill-activate mode passes excludeDefaultToolIds: manualModeExcludeToolIds, which removes lobe-activator and lobe-skill-store. With this array rendered unconditionally in the Pinned section, users in normal/default turns can see Lobe Agent as always-on when it is unavailable, and users in manual mode can see activator/store pinned even though the runtime omits them.
Useful? React with 👍 / 👎.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## canary #15509 +/- ##
==========================================
- Coverage 70.64% 70.63% -0.02%
==========================================
Files 3274 3274
Lines 322959 323032 +73
Branches 29419 34156 +4737
==========================================
+ Hits 228155 228169 +14
- Misses 94621 94680 +59
Partials 183 183
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
…to runtime The Pinned section was rendering tools that aren't enabled every turn: - lobe-agent was only enabled when injected into plugins/runtime ids (it has no rule in the engine, so it defaulted to disabled) — showing it as "always on" was a UI lie. - manual skill-activate mode strips manualModeExcludeToolIds (activator, skill-store) from the defaults, so they're off — but they still showed as fixed. Fixes: - Add lobe-agent to alwaysOnToolIds so its core capabilities (plan/todo, sub-agent dispatch, visual-media fallback) are genuinely on every agent-mode turn. Chat mode still drops alwaysOn entirely. - Derive fixedDisplayToolIds from alwaysOnToolIds (single source of truth, no drift). - Make fixedDisplayMetaList mode-aware: drop manualModeExcludeToolIds in manual mode so the Pinned list matches what the engine actually enables. - Update engine tests that asserted the old "lobe-agent off by default" behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ds directly fixedDisplayToolIds was just `= alwaysOnToolIds`; collapse it. The selector now reads alwaysOnToolIds directly and still applies the manual-mode exclusion. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# 🚀 LobeHub Release (20260610) **Release Date:** June 10, 2026 **Since v2.2.2:** 131 merged PRs · 13 contributors > This weekly release strengthens agent collaboration across cloud, desktop, CLI, and workspace flows, with steadier runtime behavior and a broader foundation for workspace-scoped data. --- ## ✨ Highlights - **Agent execution across devices** — Unifies per-device working directories, project skill discovery, and sub-agent suspend/resume behavior across server, QStash, and device RPC flows. (#15543, #15566, #15481, #15620, #15591) - **Connector and sandbox platform** — Expands connector permissions, custom OAuth MCP connector onboarding, sandbox provider support, and user-uploaded file sync into cloud sandbox runs. (#15463, #15546, #15184, #15550) - **Desktop and CLI reliability** — Fixes desktop cold-start, auto-update, Windows build, CLI skill discovery, and `lh connect` agent dispatch paths. (#15547, #15525, #15527, #15562, #15632, #15634) - **Pages and sharing** — Refreshes topic sharing, improves Page Editor layout behavior, and routes Page Agent tool execution through the server-side editor path. (#15581, #15556, #15588, #15023, #15610) - **Model availability and provider updates** — Adds user-scoped LobeHub model availability, Claude Fable 5, Qwen thinking preservation, and MiniMax M3 updates. (#15590, #15639, #13494, #15376) --- ## 🏗️ Core Product & Architecture ### Agent Runtime & Heterogeneous Agents - Improves sub-agent lifecycle handling, including async suspend/resume, queue-mode QStash resume delivery, and blocking nested sub-agent calls. (#15481, #15620, #15575) - Stabilizes heterogeneous agent ingestion and streaming with raw stream dumps, per-turn usage, image forwarding on regenerate, and duplicate-text fixes. (#15602, #15577, #15592, #15585) - Adds execution-device and working-directory controls across device RPC, legacy defaults, and remote-spawned Claude Code sessions. (#15543, #15566, #15591, #15572) - Improves runtime diagnostics and compatibility, including Gemini multimodal output capture, abort stream semantics, and trace quality analysis. (#15535, #13677, #15508) --- ## 📱 Platforms, Integrations & UX ### Connectors, Sandbox & Tools - Ships API-level connector tool permissions, custom OAuth MCP connector onboarding, and connector-first runtime execution. (#15463, #15546) - Adds sandbox provider support, cloud sandbox file sync, and safer external URL file input handling with SSRF validation. (#15184, #15550, #12657) - Improves tool visibility and execution with pinned app-fixed tools, ANSI output rendering, gateway-tunneled MCP calls, and automatic headless tool runs. (#15509, #15516, #15469, #15492) ### Desktop, CLI & Web UX - Restores desktop startup and reload behavior, preserves IPC error causes, and keeps the tab bar new-tab action visible across routes. (#15547, #15597, #15638) - Fixes desktop update and build stability for browser quit guards, macOS update signing, and Windows Visual Studio detection. (#15525, #15527, #15562) - Shows the plan-limit upgrade UI on desktop builds. (#15628) - Adds the Agent Run delivery checker and fixes CLI device dispatch plus skill list/search output. (#15489, #15634, #15632) - Refreshes onboarding, auth source preservation, topic UI states, referral/Fable campaign copy, and chat-input control bar behavior. (#15629, #15544, #15573, #15614, #15616, #15617, #15622, #15643) --- ## 🔒 Security, Reliability & Rollout Notes - External URL file input now includes SSRF validation for safer Google file handling. (#12657) - Database workspace-scope migrations are part of this release; self-hosted operators should run the normal migration path before serving the updated app. (#15446, #15465, #15468, #15472) - The release branch was re-cut from `canary` and includes the latest `main` release-version commit so `v2.2.2` is the verified compare base. --- ## 👥 Contributors @ONLY-yours, @sxjeru, @hardy-one, @xujingli, @hezhijie0327, @Coooolfan, @arvinxx, @tjx666, @Innei, @rivertwilight, @rdmclin2, @cy948, @AmAzing129 **Full Changelog**: v2.2.2...release/weekly-20260610-recut-3
💻 Change Type
🔗 Related Issue
🔀 Description of Change
The chat-input Tools popover's "Pinned" (固定启用) group only listed tools the user
explicitly pinned (those in the agent's
pluginsarray, e.g. Linear). Tools that theapplication force-enables for every conversation —
lobe-agentplus the always-ondiscovery/activation infra (
alwaysOnToolIds) — were invisible, even though they'realways active.
This surfaces those app-fixed tools read-only at the top of the Pinned group so users
can see what the app keeps on. They have no toggle: a
Pinindicator with a hint tooltipreplaces the per-tool policy (
···) menu, since their on-state is owned by the runtime,not the agent config.
Changes:
packages/builtin-tools: addfixedDisplayToolIds=[lobe-agent, ...alwaysOnToolIds]builtinstore selector: addfixedDisplayMetaList— reads these (normally hidden) tools by id directly frombuiltinTools, in order, filtered by env availabilityTools/useControls: render read-only fixed items, prepend them to the Pinned section, and fold them into the pin count / footertools.activation.fixed.hintandtools.builtins.lobe-agent.*🧪 How to Test
Open the chat-input Skills / 技能 popover in agent mode — the Pinned (固定启用) group
now leads with the app-fixed tools (🤖 Lobe Agent, Tools Activator, Skills, Skill Store),
each showing a Pin indicator and a "always on" tooltip, above any user-pinned plugins.
📝 Additional Information
The fixed set follows the agreed scope (
alwaysOnToolIds+lobe-agent). The three infratools (
lobe-activator,lobe-skills,lobe-skill-store) arediscoverable: false; ifthey read as noisy in the Pinned list, trimming
fixedDisplayToolIdsdown to justlobe-agentis a one-line change.🤖 Generated with Claude Code