Version: v0.8.8-rc3 (also present on main at time of filing)
Summary
The Skills file editor in the UI can never persist a change. The functions it calls in data-service.ts are hard-coded stubs that never make an HTTP request, so reading a skill file returns empty content and saving is an optimistic no-op with no error.
Evidence
packages/data-provider/src/data-service.ts:
export const getSkillTree = (_skillId: string): Promise<t.TSkillTreeResponse> => {
return Promise.resolve({ nodes: [] });
};
export const getSkillNodeContent = (_variables: { skillId: string; nodeId: string }): Promise<{ content: string; mimeType: string }> => {
return Promise.resolve({ content: '', mimeType: 'text/plain' });
};
export const updateSkillNodeContent = (variables: { skillId: string; nodeId: string; content: string }): Promise<t.TSkillNode> => {
// returns a synthesized node; no network call
};
packages/data-provider/src/api-endpoints.ts defines the intended route:
export const skillTree = ({ skillId, path = '' }) => `${BASE_URL}/api/skills/${encodeURIComponent(skillId)}/tree${path ? `/${path}` : ''}`;
but api/server/routes/skills.js mounts only /:id, /:id/files, /:id/files/*relativePath (GET/POST/DELETE) and /import — there is no /tree route, and a request to GET /api/skills/:id/tree/... returns 404 {"message":"Endpoint not found"}.
Reproduction
- Create a skill with a file (e.g.
references/queries.md) via POST /api/skills/:id/files.
- Open it in the UI file editor (
SkillFileEditor).
- The editor shows empty content (
getSkillNodeContent returns '').
- Type, click Save — no request is made; the mutation resolves a fake node.
- Reload — the change is gone.
Expected
Reading and saving a skill file should round-trip. The working server routes already exist for this — GET /api/skills/:id/files/*relativePath (read) and POST /api/skills/:id/files (create/replace, multipart) — so the data-service functions can either call those or the /tree route can be implemented.
Impact
Skill sub-file editing is impossible from the UI; only the SKILL.md body (via PATCH /api/skills/:id) can be edited. Skills with references/ or scripts/ are read-only in practice.
Version:
v0.8.8-rc3(also present onmainat time of filing)Summary
The Skills file editor in the UI can never persist a change. The functions it calls in
data-service.tsare hard-coded stubs that never make an HTTP request, so reading a skill file returns empty content and saving is an optimistic no-op with no error.Evidence
packages/data-provider/src/data-service.ts:packages/data-provider/src/api-endpoints.tsdefines the intended route:but
api/server/routes/skills.jsmounts only/:id,/:id/files,/:id/files/*relativePath(GET/POST/DELETE) and/import— there is no/treeroute, and a request toGET /api/skills/:id/tree/...returns 404{"message":"Endpoint not found"}.Reproduction
references/queries.md) viaPOST /api/skills/:id/files.SkillFileEditor).getSkillNodeContentreturns'').Expected
Reading and saving a skill file should round-trip. The working server routes already exist for this —
GET /api/skills/:id/files/*relativePath(read) andPOST /api/skills/:id/files(create/replace, multipart) — so thedata-servicefunctions can either call those or the/treeroute can be implemented.Impact
Skill sub-file editing is impossible from the UI; only the
SKILL.mdbody (viaPATCH /api/skills/:id) can be edited. Skills withreferences/orscripts/are read-only in practice.