diff --git a/src/costrict/skills/strictReview.ts b/src/costrict/skills/strictReview.ts new file mode 100644 index 000000000..9957c6ef2 --- /dev/null +++ b/src/costrict/skills/strictReview.ts @@ -0,0 +1,57 @@ +import { registerBundledSkill } from 'src/skills/bundledSkills.js' +import { getResolvedLanguage } from 'src/utils/language.js' +import { + SKILL_FILES, + SKILL_METADATA, +} from 'src/costrict/review/skill/builtin.js' + +const LOCALE_MAP: Record = { zh: 'zh-CN', en: 'en' } + +function getLocale(): string { + const lang = getResolvedLanguage() + return LOCALE_MAP[lang] ?? 'zh-CN' +} + +const ALLOWED_TOOLS = [ + 'Skill', + 'Glob', + 'Grep', + 'Read', + 'TodoWrite', + 'Bash', + 'Agent', +] + +function registerStrictReviewSkill( + name: string, + skillKey: string, + files: Record, + description: string, +): void { + registerBundledSkill({ + name, + description, + whenToUse: description, + userInvocable: true, + disableModelInvocation: false, + allowedTools: ALLOWED_TOOLS, + files, + async getPromptForCommand(args) { + return [{ type: 'text', text: args.trim() || `Please perform a ${skillKey}.` }] + }, + }) +} + +export function registerStrictReviewSkills(): void { + const locale = getLocale() + const localeFiles = SKILL_FILES[locale] + const localeMetadata = SKILL_METADATA[locale] + if (!localeFiles || !localeMetadata) return + + for (const [skillKey, files] of Object.entries(localeFiles)) { + const meta = localeMetadata[skillKey] + if (!meta || !files) continue + + registerStrictReviewSkill(`strict:${skillKey}`, skillKey, files, meta.description) + } +} diff --git a/src/skills/bundled/index.ts b/src/skills/bundled/index.ts index a082c2a6e..ea02ed714 100644 --- a/src/skills/bundled/index.ts +++ b/src/skills/bundled/index.ts @@ -17,6 +17,7 @@ import { registerUpdateConfigSkill } from './updateConfig.js' import { registerVerifySkill } from './verify.js' import { registerStrictPlanSkill } from 'src/costrict/skills/strictPlan.js' import { registerStrictSpecSkill } from 'src/costrict/skills/strictSpec.js' +import { registerStrictReviewSkills } from 'src/costrict/skills/strictReview.js' import { registerProjectWikiSkill } from 'src/costrict/skills/projectWiki.js' import { registerTddSkill } from 'src/costrict/skills/tdd.js' @@ -38,6 +39,7 @@ export function initBundledSkills(): void { registerTddSkill() registerStrictPlanSkill() registerStrictSpecSkill() + registerStrictReviewSkills() registerKeybindingsSkill() registerVerifySkill() registerDebugSkill()