fix(chat): query expert skills via symlinks and use $ prefix for Codex
Expert skills in the chat session were derived by intersecting built-in experts with ACP availableCommands, which caused Codex experts to never appear since Codex does not advertise skills through ACP. - Add `experts_list_for_agent` backend API that checks symlink status across all global skill dirs for the given agent type - Replace availableCommands-based expert filtering with symlink-based query, making the settings page the single source of truth - Use `$` prefix for Codex expert skills while keeping `/` for slash commands and other agents' experts - Disable the expert button when no experts are linked for the agent - Invalidate per-agent expert cache after link/unlink in settings Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,7 @@ import {
|
||||
expertsUnlinkFromAgent,
|
||||
openFolderWindow,
|
||||
} from "@/lib/api"
|
||||
import { invalidateAgentExpertsCache } from "@/hooks/use-agent-experts"
|
||||
import type {
|
||||
AcpAgentInfo,
|
||||
AgentType,
|
||||
@@ -336,6 +337,7 @@ export function ExpertsSettings() {
|
||||
if (enable) {
|
||||
const next = await expertsLinkToAgent({ expertId, agentType })
|
||||
setStatuses((prev) => ({ ...prev, [agentType]: next }))
|
||||
invalidateAgentExpertsCache(agentType)
|
||||
toast.success(t("toasts.enabled"))
|
||||
} else {
|
||||
await expertsUnlinkFromAgent({ expertId, agentType })
|
||||
@@ -346,6 +348,7 @@ export function ExpertsSettings() {
|
||||
map[entry.agentType] = entry
|
||||
}
|
||||
setStatuses(map)
|
||||
invalidateAgentExpertsCache(agentType)
|
||||
toast.success(t("toasts.disabled"))
|
||||
}
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user