Files
AgentCompany/src/main/skills/index.ts
T
2026-04-04 12:03:50 -04:00

65 lines
2.0 KiB
TypeScript

import { join } from "node:path";
import type { AppDatabase } from "../database";
import { createSkillImporter } from "./import";
import { createSkillCrud } from "./crud";
import { createSkillRuntime } from "./runtime";
interface SkillServiceDependencies {
db: AppDatabase;
profileDir: string;
logger: {
info: (...args: unknown[]) => void;
warn: (...args: unknown[]) => void;
error: (...args: unknown[]) => void;
};
}
export function createSkillService({ db, profileDir, logger }: SkillServiceDependencies) {
function skillsRoot(companyId: string): string {
return join(profileDir, "skills", companyId);
}
function skillFilesDir(companyId: string, slug: string): string {
return join(skillsRoot(companyId), slug);
}
function runtimeDir(companyId: string): string {
return join(skillsRoot(companyId), "__runtime__");
}
void runtimeDir; // used externally if needed
const importer = createSkillImporter({ db, profileDir, logger, skillsRoot, skillFilesDir });
const crud = createSkillCrud({
db,
logger,
cleanupSkillFiles: importer.cleanupSkillFiles,
parseGitHubUrl: importer.parseGitHubUrl,
});
const runtime = createSkillRuntime({
db,
profileDir,
logger,
skillsRoot,
skillFilesDir,
importFromLocal: importer.importFromLocal,
});
return {
importFromSource: importer.importFromSource,
importFromGitHub: importer.importFromGitHub,
importFromLocal: importer.importFromLocal,
importFromUrl: importer.importFromUrl,
listForCompany: crud.listForCompany,
getDetail: crud.getDetail,
deleteSkill: crud.deleteSkill,
assignToAgent: crud.assignToAgent,
removeFromAgent: crud.removeFromAgent,
checkUpdateStatus: crud.checkUpdateStatus,
listRuntimeSkillEntries: runtime.listRuntimeSkillEntries,
scanWorkspaceSkills: runtime.scanWorkspaceSkills,
seedBuiltinSkills: runtime.seedBuiltinSkills,
assignBasicSkillsToAgent: runtime.assignBasicSkillsToAgent,
assignRoleSkillsToAgent: runtime.assignRoleSkillsToAgent,
};
}