✨ feat(cc): render Linear MCP tool calls with branded inspector#14864
Conversation
CC emits Linear MCP tools as `mcp__claude_ai_Linear__<verb>_<noun>` — the default inspector and the collapsed summary surface those raw names, which read as `Mcp__claude_ai_ Linear__get_issue` after title-casing. Adds a generic Linear MCP inspector that: - Shows the monochrome Linear logomark + "Linear" product prefix - Renders the action as a single pill split into action / value halves (e.g. `Get issue | id: LOBE-8743`) - Detects `parentId` and surfaces it with a CornerLeftUp icon, either in the chip's value half (when parent is the primary arg) or as a secondary badge after the chip (mirrors the parent visual used by AgentTask UI) - Hard-caps chip text at 60 chars so long comment bodies / search queries don't push the row off-screen Also humanizes the collapsed-workflow summary via a `formatLinearMcpShortLabel` helper exported from `@lobechat/builtin-tool-claude-code/client`, so the bundle row reads "Linear · Get issue" instead of the raw tool name. 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: 70d527d331
ℹ️ 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".
| export const LINEAR_MCP_PREFIX = 'mcp__claude_ai_Linear__'; | ||
|
|
||
| // Mirrors the wire names CC emits for the claude.ai Linear MCP server. | ||
| export const LINEAR_MCP_TOOL_NAMES = [ |
There was a problem hiding this comment.
Register the create_document Linear tool
This list is the sole source used to build LinearMcpInspectors, but it omits create_document. The repo already has Claude Code fixtures for mcp__claude_ai_Linear__create_document in packages/heterogeneous-agents/src/adapters/claudeCode.test.ts, so that real Linear tool will fall back to the generic inspector even though the summary helper now labels it as Linear. Add create_document to the registered names (or share the canonical tool list) so document creation calls get the branded inspector too.
Useful? React with 👍 / 👎.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## canary #14864 +/- ##
========================================
Coverage 65.91% 65.92%
========================================
Files 2960 2960
Lines 261500 261505 +5
Branches 26452 25594 -858
========================================
+ Hits 172372 172386 +14
+ Misses 88970 88961 -9
Partials 158 158
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
…ector CC's web tools were falling through to the generic tool UI because `ClaudeCodeApiName` and the render/inspector registries hadn't been extended. Adds dedicated inspector (query/url chip) and result card (text for search, markdown for fetched pages) for both. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…reak `Group.test.tsx` mocks `antd-style` with only `createStaticStyles`. The previous wiring imported `formatLinearMcpShortLabel` through the `@lobechat/builtin-tool-claude-code/client` barrel, which transitively loads `LinearMcp.tsx` → `@lobechat/shared-tool-ui/styles` → `keyframes`, crashing the mock. Splits the pure label utilities (LINEAR_MCP_PREFIX, parseToolName, staticLabelFor, formatLinearMcpShortLabel, LINEAR_MCP_TOOL_NAMES) into `linearMcpLabels.ts` with no React/antd-style imports, exposes it as `@lobechat/builtin-tool-claude-code/client/labels`, and switches the consumer in `toolDisplayNames.ts` to that subpath. The inspector component keeps importing the same helpers locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Heterogeneous agent workflows often run 40+ tool calls. When the user collapsed the workflow and clicked the header to re-expand, it landed at the height-capped `semi` state and hid most of the chain. Now we infer a "fully expanded experience" from `defaultWorkflowExpandLevel` — any phase opting into `full` routes the manual expand straight to `full` instead of the legacy `semi` cap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…hip the built-in skill side Walks back the cross-package edits from the previous commit. The CC adapter keeps its own `LinearMcp.tsx` + `linearMcpLabels.ts` exactly as #14864 left them — `formatLinearMcpShortLabel` is still exported from `@lobechat/builtin-tool-claude-code/client/labels` and `toolDisplayNames.ts` still imports it from there. CC's inspector index continues to spread `LinearMcpInspectors` into its own map. The new shared module under `packages/builtin-tools/src/linear/` now only covers the built-in LobeHub Linear skill path: `LinearIdentifier='linear'` + bare apiNames (`get_issue`, `save_issue`, …). The inspector component is duplicated from CC on purpose — `builtin-tools` already depends on `builtin-tool-claude-code`, so we can't import the other way without a circular dep, and the user wants the CC code to stay put. Drops the `LinearMcpInspectors` re-export and the CC-entry merge in `inspectors.ts` that the previous commit had introduced. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…kill (#14884) * ✨ feat(linear): share branded inspector between CC MCP and built-in Linear skill The Linear-branded inspector (logomark + action chip + parentId badge) was only registered against `mcp__claude_ai_Linear__*` tool names emitted by the CC adapter. LobeHub's own built-in Linear skill calls land with `identifier='linear'` and bare apiNames (`get_issue`, `save_issue`, …), so they fell through to the generic Title + JSON inspector despite being the exact same Linear surface. Moves the inspector + label utilities out of `builtin-tool-claude-code` into `packages/builtin-tools/src/linear/` (alongside `github/`) and registers them twice in the central inspector map: once under `LinearIdentifier = 'linear'` for the built-in skill path, once merged into the CC entry for the MCP-prefixed wire names. Same component, same look in both cases. `formatLinearShortLabel` now matches bare apiNames against the known tool list too, so the collapsed workflow summary reads `Linear · Get issue` for built-in calls as well — previously only CC got the humanized label. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ♻️ refactor(linear): leave CC's LinearMcp inspector inside CC, only ship the built-in skill side Walks back the cross-package edits from the previous commit. The CC adapter keeps its own `LinearMcp.tsx` + `linearMcpLabels.ts` exactly as #14864 left them — `formatLinearMcpShortLabel` is still exported from `@lobechat/builtin-tool-claude-code/client/labels` and `toolDisplayNames.ts` still imports it from there. CC's inspector index continues to spread `LinearMcpInspectors` into its own map. The new shared module under `packages/builtin-tools/src/linear/` now only covers the built-in LobeHub Linear skill path: `LinearIdentifier='linear'` + bare apiNames (`get_issue`, `save_issue`, …). The inspector component is duplicated from CC on purpose — `builtin-tools` already depends on `builtin-tool-claude-code`, so we can't import the other way without a circular dep, and the user wants the CC code to stay put. Drops the `LinearMcpInspectors` re-export and the CC-entry merge in `inspectors.ts` that the previous commit had introduced. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ♻️ refactor(linear): hoist shared LinearInspector + label utilities into shared-tool-ui The Linear-branded inspector and its tool-name parsing helpers were duplicated between `builtin-tool-claude-code/src/client/Inspector/LinearMcp` (MCP-prefixed wire names) and `builtin-tools/src/linear/` (built-in skill bare names). The dep graph (`builtin-tools` → `builtin-tool-claude-code` → `shared-tool-ui`) means CC can't import from `builtin-tools`, so the previous round kept two copies. Moves the component + labels into `packages/shared-tool-ui/src/Inspector/ Linear/` — both CC and `builtin-tools` already depend on `shared-tool-ui`, so they can each pull the same `LinearInspector` and register it under whichever key shape their code path uses: - CC's `LinearMcp.tsx` is now a 10-line wrapper that maps the shared inspector across every MCP-prefixed name. - CC's `linearMcpLabels.ts` re-exports the parsing primitives + keeps the CC-only `formatLinearMcpShortLabel` (the prefix check stays here so the workflow-summary label only fires for MCP-prefixed wire names). - `builtin-tools/src/linear/` drops its own Inspector / labels files; the index just registers the shared component under bare apiNames. Exposes a labels-only subpath `@lobechat/shared-tool-ui/inspectors/ linear-labels` so the workflow-summary path can pull parsing helpers without dragging the React inspector (and its `keyframes`-using style modules) into `Group.test.tsx`'s mocked antd-style context. 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 (20260518) **Release Date:** May 18, 2026 **Since v2.1.58:** 208 merged PRs · 209 commits · 16 contributors > v2.2.0 introduces the **Chief Agent Operator** — an agent that runs itself end-to-end. It self-iterates against its own output, assembles sub-agent teams on demand through the heterogeneous runtime, and drives a unified task system that knows when to pause for a human. Self-review, AssistantGroup, and tasks/scheduling all converge into one operator surface. --- ## ✨ Highlights ### 🎩 Chief Agent Operator - **Self-iteration exits Lab** — Agent Signal's self-review pipeline ships proposal actions straight into briefs and auto-executes the approved follow-ups, with prompts hardened against eval. The operator now critiques and re-runs its own work without a human in the loop. (#14769, #14583, #14647, #14882) - **Auto-formed agent teams** — Heterogeneous AssistantGroup gains Monitor-style signal callbacks, read-only SubAgent threads with breadcrumb headers, and a thread switcher. The operator dispatches sub-agents and you can step into any branch to see what the team is doing. (#14859, #14658, #14845, #14715) - **Task system as the operator's runway** — Claude Code surfaces task tools, AskUserQuestion freeform notes, and a dedicated `waitingForHuman` topic status; `lobe-task` exposes `setTaskSchedule`; the scheduler is hardened (maxExecutions cap, sub-10min heartbeat block, race-free SchedulerForm). Long-running operator runs no longer go silent and stop themselves when human input is needed. (#14870, #14639, #14713, #14865, #14853) ### 🚀 Cloud & runtime - **Cloud Claude Code V3** — Repo picker, GitHub token flow, and sandbox-aware context bring cloud-hosted Claude Code to feature parity with local; cloud sandbox completion now triggers the task lifecycle end-to-end. (#14568, #14822, #14681) - **Heterogeneous agent multi-replica safety** — Subagent threads, ingest refresh, and parallel-tool counts now survive replica swaps without losing parent_id or rolling back tool state. (#14897, #14631, #14806, #14838) - **Built-in tool lifecycle hooks** — `onBeforeCall` / `onAfterCall` land on the built-in tool runtime; sub-agent dispatch moves to `lobe-agent`; self-iteration aligns with the shared inspector pattern. (#14719, #14715, #14827) - **Knowledge base RAG unified** — Client and server share one `KnowledgeBaseSearchService`; KB files preserved on `NoSuchKey` instead of silently lost. (#14673, #14501) ### 💬 Workspace experience - **Home daily brief + recommendations** — The home screen opens with a linkable welcome, paired input hint, and a recommendations module sourced from the operator's hetero action library. (#14589, #14645, #14770) - **Chat mode + redesigned action bar** — The chat input gains a Chat/Agent mode toggle and a re-pitched action bar with icon-and-color action tag chips. (#14774, #14903, #14846) - **Documents tree, optimistic** — Document tree creates, deletes, and inline renames now apply optimistically; the agent-documents index hides web crawls and switches to a table layout. (#14714, #14292) - **Branded MCP inspectors** — Linear MCP tool calls render with the same branded inspector as the built-in Linear skill; CC MCP and built-in skills now share inspector code. (#14864, #14884) - **Bot identity gating** — Device tools are gated by sender identity, the activator bypass is closed, and Slack mpim plus Discord DM regressions are fixed. (#14634, #14664, #14733) --- ## 🏗️ Core Agent & Signal Pipeline ### Self-iteration & Agent Signal - Self-iteration graduates out of Lab, with service, tool, name, and concept structure unified across `agent-signal`, `prompts`, `database`, and `builtin-tool-self-iteration`. (#14699, #14769) - Self-review now proposes actions to briefs and auto-executes the approved set, with eval-verified prompt hardening. (#14583, #14657, #14647) - Self-iteration built-in tool aligns with the shared runtime + inspector patterns. (#14827) - Agent Signal prompts adapt their response language and avoid blocking agent execution. (#14890, #14775, #14882) - Receipt descriptions now carry an Agent Signal marker, and self-review hinted skill documents route correctly. (#14764, #14895) ### Heterogeneous agent runtime - Subagent threads render read-only with a breadcrumb header and thread switcher; SUBAGENT badge dropped, indentation tightened. (#14658, #14845, #14783) - Multi-replica safety: ingest refresh restores tools/model from DB to fix parent_id breaks; new-step assistants sync across replicas; subagent-tagged events no longer leak into the main gateway handler. (#14897, #14631, #14838) - Fetch-triggering events are deferred to keep parallel tool counts from rolling back. (#14806) - AskUserQuestion is wired for Claude Code, with auto-decline disabled and a freeform note input on the cloud side; `waitingForHuman` is a first-class topic status. (#14639, #14629, #14870) - AssistantGroup gains Monitor-style signal callbacks; project skills surface in the working sidebar and markdown preview. (#14859, #14896) - Cloud Claude Code V3 — repo picker, GitHub token, sandbox context; credentials alert and disabled input when not configured. (#14568, #14822) - Cloud sandbox completion now triggers the task lifecycle end-to-end. (#14681) ### Agent runtime & context engine - Built-in tool runtime gets `onBeforeCall` / `onAfterCall` lifecycle hooks. (#14719) - `CompletionLifecycle`, `HumanInterventionHandler`, and `stepPresentation` are extracted from the runtime monolith. (#14441) - Per-tool timeout is honored end-to-end for client tool dispatch. (#14817) - Compression budget accounts for `tool_calls`, reasoning content, and tool defs; `call_llm` forwards tools into the budget. (#14813, #14837) - Pre-flight context check now fails fast for OpenAI-compatible providers. (#14824) - Malformed `tool_call` names are recovered instead of finishing the step silently. (#14577) - Sub-agent dispatch moves from `lobe-gtd` to `lobe-agent`. (#14715) - Hidden built-in tools now appear in the system prompt @-mention list. (#14823) ### Agent tracing & operations - New `agent_operations` table and runtime persistence for every hetero-agent operation. (#14416, #14736) - `signOperationJwt` issues 4-hour signed operation tokens. (#14586) - S3 trace snapshots are zstd-compressed; DB `trace_s3_key` aligns with the `.json.zst` suffix; legacy `.json` fallback preserved on fetch. (#14807, #14860, #14826) --- ## 📱 Platform & Integrations ### Bot / Channels - Device tools are gated by sender identity. (#14634) - Activator bypass closed and device-access checks converged. (#14664) - Slack mpim supported; Discord DM regression fixed; Slack connect + slash commands repaired. (#14733, #14591) - Bot channels, bot watch, bot callback service, and system bot reliability fixes. (#14847, #14796, #14570, #14784, #14649) - Online Messager scaffolding. (#14755) ### Onboarding - Home daily brief with linkable welcome and paired input hint. (#14589) - Recommendations module sourced from the hetero agent action library. (#14645) - Chat onboarding passes request triggers via metadata and preserves the resume request. (#14770, #14798) - Discovery turn progress gated by phase, with a reminder on stalled discovery. (#14842, #14833) - FullNameStep back button rejoins the shared prefix; ModeSwitch hidden in production. (#14898, #14760) - Agent marketplace folds into the web onboarding tool. (#14578, #14672) - Onboarding interests stored as keys instead of free text; early-exit skips marketplace and drops CJK prompts. (#14624, #14598) ### Model providers - Gemini 3.1 Flash-Lite cards; Gemini schema sanitizer drops non-compliant `enum` / `required`; zero `cachedContentTokenCount` handled in usage conversion. (#14604, #14740, #14567) - DeepSeek-V4 model cards and pricing restored to official rates. (#14110, #14911) - ernie-5.1 and spark-x2-flash support; Grok 4.3 `reasoning_effort` support. (#14643, #14731, #14642) - SiliconCloud catalog synced with API; duplicates removed; reasoning params adjusted. (#14464) - Minimax derives `max_tokens` from context window to avoid `ExceededContextWindow`. (#14814) - aihubmix uses the full models endpoint for a complete list; stale empty-apiKey test dropped. (#14511, #14669) - Stream parse errors are enriched with provider + model context. (#14636) - Visual content parts are consumed in the server runtime; video image references move to a JSON object. (#14637, #14900) - Google function call magic `thoughtSignature` now attaches to every part, not just the last turn. (#14904) - Service model assignments settings added; model extend-param options removed. (#14712, #14607) ### Built-in tools & knowledge base - `lobe-task` exposes `setTaskSchedule`; task scheduler hardened (maxExecutions cap, sub-10min heartbeat blocked, SchedulerForm race fix, rapid automation-mode toggle stabilized). (#14713, #14865, #14853, #14801) - KnowledgeBaseSearchService shares RAG runtime across client and server. (#14673) - KB files preserved on `NoSuchKey` and orphan documents/tasks cleaned. (#14501) - Document tree gets optimistic create/delete + inline rename. (#14714) - agent-documents index hides web crawls and switches to a table layout. (#14292) - `lobe-clarify` and SKILL.md frontmatter parsing/edit validation are unified. (#14566) - AnalyzeVisualMedia inspector + Portal HTML preview refactor; HTML preview restored for AssistantGroup messages. (#14777, #14811) - Branded inspector shared between CC MCP and built-in Linear skill. (#14884, #14864) --- ## 🖥️ CLI & User Experience ### Chat & Conversation - Chat mode toggle and redesigned chat input action bar. (#14774) - Action tag chips switch to icon + colored label; ActionDropdown closes on sibling-open and focus-out; submenu uses native header/footer slots. (#14903, #14802, #14901) - Action bar padding equalized around the send button; skeleton shows in action bar while config loads. (#14846, #14656) - `useCmdEnterToSend` is respected in thread & task inputs; send button enables after pasting into thread/comment input. (#14850, #14816) - TopicChatDrawer state preserved during close animation. (#14803) - Only the last assistant block animates during markdown streaming. (#14906) - Right working panel no longer auto-collapses on chat mount; home agent config fetched so knowledge toggles reflect in UI. (#14883, #14834) ### Tasks - Task scheduler, hotkey, comment, and TodoList polish. (#14707) - Add Subtask button & card baseline aligned; activity card stop run; task agent manager polish. (#14848, #14559, #14569) - Task template skeleton CLS reduced; task page placeholder copy refreshed. (#14788, #14704) - Task agent model snapshotted into `task.config` at create time. (#14670) - User-feedback card, task card polish, and Run-now context menu in markdown. (#14727) - Inline skill auth in recommended task templates. (#14676) ### Navigation & Layout - Tab bar gains a Chrome-style divider between inactive tabs. (#14892) - SideBarDrawer & header layout polish; nav ActionIcon sizing unified; TodoList encapsulation improved. (#14762, #14692) - Desktop header icons, sidebar density, and task menus polished. (#14724) - Standardized header action icon sizes. (#14717) - Chat topic title length increased; copy session ID added to topic dropdown menu. (#14659, #14595) - Heterogeneous agent topic rows regain indentation. (#14783) ### Other polish - Usage token details shortened; tool execution time formatted as `Xmin Ys`. (#14849, #14641) - Tool arguments display gets word-wrap toggle; long tool-call params wrap instead of truncate. (#14706, #14640) - Editor stops showing per-line placeholder once content is present. (#14852) - Visible divider between queued messages; intervention confirmation bar polished. (#14593, #14587) - Credit top-up copy refreshed; auth captcha retry copy refreshed; brief recommendations layout polished. (#14821, #14561, #14871) --- ## 🔧 Tooling & Developer Experience - Dev-only feature flag override panel. (#14565) - `__DEV__` define replaces `process.env.NODE_ENV` in the SPA. (#14696) - Agent-settings drops Meta/Documents tabs and restores `inputTemplate`. (#14874) - `local-system` forwards all `grepContent` params and moves the executor to `/client`. (#14888) - `lobe-task` and `setTaskSchedule` exposed. (#14713) - Memory user-memory benchmark agent config and source-id extraction schemas. (#14779, #14778) - CLI man page drops stale cron entry; `clearMessages` hotkey removed. (#14709, #14906) - Skill docs simplified; cloud heteroContext gains sandbox TTL + public-repo fork push guide. (#14785, #14761) --- ## 🔒 Security & Reliability - **Security:** Sensitive comments and examples sanitized from the production JS bundle. (#14557) - **Security:** Inactive OIDC access rejected. (#14674) - **Security:** CASC `new Function()` template replaced with safe string builders. (#14751) - **Security:** Sign-in captcha flow removed in favor of safer flow. (#14573) - **Security:** Desktop local file previews restricted to safe roots. (#14789) - **Security:** Image binary capped at 3.75 MB so base64 payload stays under the Anthropic 5 MB limit. (#14711) - **Reliability:** Neon/Node pools get error listeners to prevent Lambda crashes. (#14606) - **Reliability:** `paradedb.match(...)` replaces hardcoded normalizer in memory search. (#14590) - **Reliability:** `PlaceholderVariablesProcessor` errors carry diagnostic context. (#14741) - **Reliability:** File storage upload checks are serialized; multiple account link bug fixed. (#14829, #14562) - **Reliability:** `ScrollShadow` replaced with `ScrollArea` to fix a React infinite render loop (error code 185). (#14689) - **Reliability:** Embedding token cap enforced — long memory queries are limited and truncated before search. (#14757) - **Reliability:** Embed binary blob guard + oversized output cap in `local-system.readFile`. (#14602) - **Reliability:** Windows npm CLI shims resolved before spawning agents. (#14772, #14720) - **Reliability:** Vite pinned to 8.0.12 to avoid the rolldown 1.0.1 preload regression; desktop runtime externals split from native deps. (#14804, #14776) - **Reliability:** Old lobehub cron job removed; WeChat URL rules dropped from web crawler. (#14630, #14633) --- ## 👥 Contributors Huge thanks to **16 contributors** who shipped **208 merged PRs** this cycle. @hezhijie0327 · @sxjeru · @hardy-one · @Bianzinan · @brone1323 · @YuSaZh · @Wxh16144 · @arvinxx · @Innei · @tjx666 · @neko · @lijian · @rdmclin2 · @sudongyuer · @AmAzing129 · @rivertwilight Plus @lobehubbot for maintenance translations. --- **Full Changelog**: v2.1.58...v2.2.0
…hub#14864) * ✨ feat(cc): render Linear MCP tool calls with branded inspector CC emits Linear MCP tools as `mcp__claude_ai_Linear__<verb>_<noun>` — the default inspector and the collapsed summary surface those raw names, which read as `Mcp__claude_ai_ Linear__get_issue` after title-casing. Adds a generic Linear MCP inspector that: - Shows the monochrome Linear logomark + "Linear" product prefix - Renders the action as a single pill split into action / value halves (e.g. `Get issue | id: LOBE-8743`) - Detects `parentId` and surfaces it with a CornerLeftUp icon, either in the chip's value half (when parent is the primary arg) or as a secondary badge after the chip (mirrors the parent visual used by AgentTask UI) - Hard-caps chip text at 60 chars so long comment bodies / search queries don't push the row off-screen Also humanizes the collapsed-workflow summary via a `formatLinearMcpShortLabel` helper exported from `@lobechat/builtin-tool-claude-code/client`, so the bundle row reads "Linear · Get issue" instead of the raw tool name. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(cc): render WebSearch and WebFetch tool calls with custom inspector CC's web tools were falling through to the generic tool UI because `ClaudeCodeApiName` and the render/inspector registries hadn't been extended. Adds dedicated inspector (query/url chip) and result card (text for search, markdown for fetched pages) for both. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 🐛 fix(cc): isolate Linear MCP label helper to avoid antd-style mock break `Group.test.tsx` mocks `antd-style` with only `createStaticStyles`. The previous wiring imported `formatLinearMcpShortLabel` through the `@lobechat/builtin-tool-claude-code/client` barrel, which transitively loads `LinearMcp.tsx` → `@lobechat/shared-tool-ui/styles` → `keyframes`, crashing the mock. Splits the pure label utilities (LINEAR_MCP_PREFIX, parseToolName, staticLabelFor, formatLinearMcpShortLabel, LINEAR_MCP_TOOL_NAMES) into `linearMcpLabels.ts` with no React/antd-style imports, exposes it as `@lobechat/builtin-tool-claude-code/client/labels`, and switches the consumer in `toolDisplayNames.ts` to that subpath. The inspector component keeps importing the same helpers locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 ui(hetero): land manual workflow expand at full level Heterogeneous agent workflows often run 40+ tool calls. When the user collapsed the workflow and clicked the header to re-expand, it landed at the height-capped `semi` state and hid most of the chain. Now we infer a "fully expanded experience" from `defaultWorkflowExpandLevel` — any phase opting into `full` routes the manual expand straight to `full` instead of the legacy `semi` cap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…hub#14864) * ✨ feat(cc): render Linear MCP tool calls with branded inspector CC emits Linear MCP tools as `mcp__claude_ai_Linear__<verb>_<noun>` — the default inspector and the collapsed summary surface those raw names, which read as `Mcp__claude_ai_ Linear__get_issue` after title-casing. Adds a generic Linear MCP inspector that: - Shows the monochrome Linear logomark + "Linear" product prefix - Renders the action as a single pill split into action / value halves (e.g. `Get issue | id: LOBE-8743`) - Detects `parentId` and surfaces it with a CornerLeftUp icon, either in the chip's value half (when parent is the primary arg) or as a secondary badge after the chip (mirrors the parent visual used by AgentTask UI) - Hard-caps chip text at 60 chars so long comment bodies / search queries don't push the row off-screen Also humanizes the collapsed-workflow summary via a `formatLinearMcpShortLabel` helper exported from `@lobechat/builtin-tool-claude-code/client`, so the bundle row reads "Linear · Get issue" instead of the raw tool name. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ✨ feat(cc): render WebSearch and WebFetch tool calls with custom inspector CC's web tools were falling through to the generic tool UI because `ClaudeCodeApiName` and the render/inspector registries hadn't been extended. Adds dedicated inspector (query/url chip) and result card (text for search, markdown for fetched pages) for both. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 🐛 fix(cc): isolate Linear MCP label helper to avoid antd-style mock break `Group.test.tsx` mocks `antd-style` with only `createStaticStyles`. The previous wiring imported `formatLinearMcpShortLabel` through the `@lobechat/builtin-tool-claude-code/client` barrel, which transitively loads `LinearMcp.tsx` → `@lobechat/shared-tool-ui/styles` → `keyframes`, crashing the mock. Splits the pure label utilities (LINEAR_MCP_PREFIX, parseToolName, staticLabelFor, formatLinearMcpShortLabel, LINEAR_MCP_TOOL_NAMES) into `linearMcpLabels.ts` with no React/antd-style imports, exposes it as `@lobechat/builtin-tool-claude-code/client/labels`, and switches the consumer in `toolDisplayNames.ts` to that subpath. The inspector component keeps importing the same helpers locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * 💄 ui(hetero): land manual workflow expand at full level Heterogeneous agent workflows often run 40+ tool calls. When the user collapsed the workflow and clicked the header to re-expand, it landed at the height-capped `semi` state and hid most of the chain. Now we infer a "fully expanded experience" from `defaultWorkflowExpandLevel` — any phase opting into `full` routes the manual expand straight to `full` instead of the legacy `semi` cap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
CC emits Linear MCP tools as
mcp__claude_ai_Linear__<verb>_<noun>— the default inspector and the collapsed workflow summary surface those raw names, which read asMcp__claude_ai_ Linear__get_issueafter title-casing. This adds a Linear-aware inspector + summary humanizer for all 46 Linear MCP tools.Linearproduct prefix + a single chip split into action / value halves (e.g.Get issue | id: LOBE-8743)parentId, it's surfaced with aCornerLeftUpicon — either inside the chip (whenparentIdis the primary arg, e.g.list_issuesfilter) or as a secondary badge appended after the chip (e.g.save_issuecreate with bothtitleandparentId). Mirrors the parent visual used byTaskParentBarin the AgentTasks UI.formatLinearMcpShortLabelhelper (exported from@lobechat/builtin-tool-claude-code/client) plugs intogetToolDisplayName, replacingMcp__claude_ai_ Linear__get_issuewithLinear · Get issuein the bundled row.All 46 Linear apiNames are registered to the same inspector component via
Object.fromEntries(LINEAR_MCP_TOOL_NAMES.map(...))so adding/removing tools is a one-line change in the constant.Test plan
mcp__claude_ai_Linear__get_issue→ inspector shows<linear> Linear [Get issue | id: LOBE-xxxx]mcp__claude_ai_Linear__save_issue(create with title + parentId) → chip shows the title, secondary↰ LOBE-xxxxparent badge appearsmcp__claude_ai_Linear__save_issue(update with id) → chip key readsid, value is the issue id; "Update issue" action labelmcp__claude_ai_Linear__save_commentwith a long body → body truncates at 60 chars with…, chip doesn't overflow the rowmcp__claude_ai_Linear__list_issueswithparentIdfilter → chip value renders↰ LOBE-xxxx(noparentId:text key)mcp__claude_ai_Linear__search_documentation→ action reads "Search docs", chip value is the query (no double "Linear")Linear · Get issue, Linear · Save comment, Agentinstead of rawMcp__…namescolorTextDescription)🤖 Generated with Claude Code