β¨ feat(agent): list project skills over device RPC in the sidebar#15566
Conversation
The right-sidebar ζθ½ (project skills) tab only read skills over local Electron IPC, so in device mode (working dir on a bound remote device, or the web client) the list was always empty β unlike the Files / Review tabs which already branch on `deviceId`. Add a `listProjectSkills` device RPC mirroring `getProjectFileIndex`: - types: `DeviceProjectSkillItem` / `DeviceListProjectSkillsResult` - `deviceGateway.listProjectSkills` via the generic `invokeRpc` relay - TRPC `device.listProjectSkills` + `GatewayConnectionCtr` dispatch to `WorkspaceCtr.listProjectSkills` - renderer chokepoint `projectSkillService` branches on `deviceId` - `useProjectSkills(dir, deviceId?)`; remote mode lists but doesn't open previews (parity with the Files tab) - thread `remoteDeviceId` through `SkillsGroup` No device-gateway repo change needed β the RPC relay is method-agnostic. Co-Authored-By: Claude Opus 4.8 <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: ff0049f21f
βΉοΈ 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".
Codecov Reportβ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## canary #15566 +/- ##
=========================================
Coverage 70.49% 70.49%
=========================================
Files 3309 3309
Lines 326769 326804 +35
Branches 34653 28870 -5783
=========================================
+ Hits 230357 230388 +31
- Misses 96229 96233 +4
Partials 183 183
Flags with carried forward coverage won't be shown. Click here to find out more.
π New features to boost your workflow:
|
β¦ents too Thread `deviceId` through the homogeneous resources path (`AgentDocumentsGroup` β `ProjectLevelSkills`) so a device-bound homogeneous agent's ζθ½ tab populates over RPC, matching the heterogeneous `SkillsGroup`. `useProjectSkills` already accepts `deviceId`; this just wires it in and OR-s `deviceId` into the `showProjectSkills` gate. (The large AgentDocumentsGroup diff is prettier re-indentation from wrapping the outer memo() once the param list crossed the print width.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
β¦de skills load ResourcesSection computed its working directory with the legacy `topicCwd || agentCwd` selector, which misses `workingDirByDevice[deviceId]` and `device.defaultCwd`. For a device-bound agent the cwd lives in that per-device map, so it resolved to `undefined` β the project-skills SWR key was null and the fetch never fired even though `deviceId` was set (the ζθ½ tab showed "ζζ ε―η¨ζθ½"). Switch to `useEffectiveWorkingDirectory`, the same resolver the runtime bar / WorkingSidebar use. Fixes both the hetero SkillsGroup and the homogeneous AgentDocumentsGroup paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
β¦path On a working-directory switch the project-skills SWR key changes, so items go empty while the new scan is in flight. The homogeneous skills panel was flashing the empty placeholder instead of a loader. Surface `useProjectSkills().isLoading` and render NeuralNetworkLoading when project skills are the only source and still loading. (The hetero SkillsGroup already shows it via SkillSection's isLoading.) Co-Authored-By: Claude Opus 4.8 <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 right-sidebar ζθ½ (project skills) tab only read skills over local Electron IPC, so in device mode (working directory on a bound remote device, or the web client) the list was always empty β unlike the Files / Review tabs, which already branch on
deviceIdand work in both local and device mode.This adds a
listProjectSkillsdevice RPC that exactly mirrors the already-workinggetProjectFileIndex(Files tab) dual IPC/RPC chain:@lobechat/types):DeviceProjectSkillItem/DeviceListProjectSkillsResult(mirror the desktopProjectSkillItem/ListProjectSkillsResultso the server avoids importing@lobechat/electron-client-ipc)deviceGateway.listProjectSkills()via the genericinvokeRpcrelaydevice.listProjectSkillsprocedureGatewayConnectionCtr.executeDeviceRpcβWorkspaceCtr.listProjectSkills(the local scan already existed)projectSkillServicebranches transport ondeviceId(parallelsprojectFileService)useProjectSkills(dir, deviceId?)β SWR key now keyed bydeviceId ?? 'local'; remote mode lists but does not open previews (parity with the Files tab, whosehandleNodeClickearly-returns when remote)remoteDeviceIdthroughSkillsGroup/ResourcesSection/WorkingSidebarNo
device-gatewayrepo change needed β the RPC relay is method-agnostic, so every method afterinitWorkspacerides it for free.Scoped to the heterogeneous
SkillsGroup(matching how Files/Review device support is hetero-WorkingSidebar-only). The homogeneousAgentDocumentsGrouppath is intentionally left local-only here β it already gets server-side project-skill autoload via workspace-init, anduseProjectSkillsalready acceptsdeviceIdif we want to thread it later.π§ͺ How to Test
Added 6 cases to
deviceGateway/__tests__/index.test.ts(mirroringinitWorkspace): config gate, pass-through + rpc params, failure, missing-data, exception, custom timeout.type-checkclean for touched files.To verify manually: bind an agent to a remote device, open a project with
.agents/skills/.claude/skills, and confirm the ζθ½ tab populates in device mode (previously empty).π Additional Information
Cross-layer (
packages/typesβ server TRPC β desktop controller β renderer/UI) but ships as a single cohesive unit β the server contract and its in-repo callers merge together tocanary.