fix(11): default agentSkillsDir server-side — GROUP-03/GROUP-04 gap closure

This commit is contained in:
Mikkel Georgsen 2026-04-01 03:46:58 +02:00
parent 1a85831d8a
commit 3b2fbe97ef

View file

@ -1,7 +1,14 @@
import { Router } from "express";
import os from "node:os";
import path from "node:path";
import { skillGroupService } from "../services/skill-registry-groups.js";
import { assertBoard } from "./authz.js";
/** Default skills directory when client doesn't provide one */
function defaultSkillsDir(): string {
return path.join(os.homedir(), ".claude", "skills");
}
/**
* REST routes for skill groups.
*
@ -165,10 +172,11 @@ export function skillGroupRoutes(): Router {
assertBoard(req);
try {
const { groupId, agentSkillsDir } = req.body as { groupId?: string; agentSkillsDir?: string };
if (!groupId || !agentSkillsDir) {
return res.status(400).json({ error: "groupId and agentSkillsDir required" });
if (!groupId) {
return res.status(400).json({ error: "groupId required" });
}
const result = await svc.assignGroup(groupId, req.params.agentId, agentSkillsDir);
const resolvedDir = agentSkillsDir || defaultSkillsDir();
const result = await svc.assignGroup(groupId, req.params.agentId, resolvedDir);
res.status(201).json(result);
} catch (err) {
handleError(res, err);
@ -179,10 +187,8 @@ export function skillGroupRoutes(): Router {
assertBoard(req);
try {
const { agentSkillsDir } = req.body as { agentSkillsDir?: string };
if (!agentSkillsDir) {
return res.status(400).json({ error: "agentSkillsDir required" });
}
await svc.removeGroup(req.params.groupId, req.params.agentId, agentSkillsDir);
const resolvedDir = agentSkillsDir || defaultSkillsDir();
await svc.removeGroup(req.params.groupId, req.params.agentId, resolvedDir);
res.status(204).end();
} catch (err) {
handleError(res, err);