From cbe1b2711d8879538d8ec4b3652ab1e0a4537218 Mon Sep 17 00:00:00 2001 From: Anderson da Campo Date: Wed, 15 Jul 2026 17:12:45 -0300 Subject: [PATCH] feat: add native support for Kurama Adds Kurama to AI_TOOLS mapping `.kurama` directory and registers the command adapter. --- src/core/command-generation/adapters/index.ts | 1 + .../command-generation/adapters/kurama.ts | 34 +++++++++++++++++++ src/core/command-generation/registry.ts | 2 ++ src/core/config.ts | 1 + 4 files changed, 38 insertions(+) create mode 100644 src/core/command-generation/adapters/kurama.ts diff --git a/src/core/command-generation/adapters/index.ts b/src/core/command-generation/adapters/index.ts index 89d0fe5201..3b2c27f416 100644 --- a/src/core/command-generation/adapters/index.ts +++ b/src/core/command-generation/adapters/index.ts @@ -15,6 +15,7 @@ export { codebuddyAdapter } from './codebuddy.js'; export { continueAdapter } from './continue.js'; export { costrictAdapter } from './costrict.js'; export { crushAdapter } from './crush.js'; +export { kuramaAdapter } from './kurama.js'; export { cursorAdapter } from './cursor.js'; export { factoryAdapter } from './factory.js'; export { geminiAdapter } from './gemini.js'; diff --git a/src/core/command-generation/adapters/kurama.ts b/src/core/command-generation/adapters/kurama.ts new file mode 100644 index 0000000000..849159439d --- /dev/null +++ b/src/core/command-generation/adapters/kurama.ts @@ -0,0 +1,34 @@ +/** + * Kurama Command Adapter + * + * Formats commands for Kurama following its frontmatter specification. + */ + +import path from 'path'; +import type { CommandContent, ToolCommandAdapter } from '../types.js'; + +/** + * Kurama adapter for command generation. + * File path: .kurama/skills/.md + * Frontmatter: name, description, category, tags + */ +export const kuramaAdapter: ToolCommandAdapter = { + toolId: 'kurama', + + getFilePath(commandId: string): string { + return path.join('.kurama', 'skills', `${commandId}.md`); + }, + + formatFile(content: CommandContent): string { + const tagsStr = content.tags.join(', '); + return `--- +name: ${content.name} +description: ${content.description} +category: ${content.category} +tags: [${tagsStr}] +--- + +${content.body} +`; + }, +}; diff --git a/src/core/command-generation/registry.ts b/src/core/command-generation/registry.ts index c2773ac410..9719bd8db5 100644 --- a/src/core/command-generation/registry.ts +++ b/src/core/command-generation/registry.ts @@ -17,6 +17,7 @@ import { codebuddyAdapter } from './adapters/codebuddy.js'; import { continueAdapter } from './adapters/continue.js'; import { costrictAdapter } from './adapters/costrict.js'; import { crushAdapter } from './adapters/crush.js'; +import { kuramaAdapter } from './adapters/kurama.js'; import { cursorAdapter } from './adapters/cursor.js'; import { factoryAdapter } from './adapters/factory.js'; import { geminiAdapter } from './adapters/gemini.js'; @@ -54,6 +55,7 @@ export class CommandAdapterRegistry { CommandAdapterRegistry.register(continueAdapter); CommandAdapterRegistry.register(costrictAdapter); CommandAdapterRegistry.register(crushAdapter); + CommandAdapterRegistry.register(kuramaAdapter); CommandAdapterRegistry.register(cursorAdapter); CommandAdapterRegistry.register(factoryAdapter); CommandAdapterRegistry.register(geminiAdapter); diff --git a/src/core/config.ts b/src/core/config.ts index 55062273d0..e926dd59fe 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -31,6 +31,7 @@ export const AI_TOOLS: AIToolOption[] = [ { name: 'Continue', value: 'continue', available: true, successLabel: 'Continue (VS Code / JetBrains / Cli)', skillsDir: '.continue' }, { name: 'CoStrict', value: 'costrict', available: true, successLabel: 'CoStrict', skillsDir: '.cospec' }, { name: 'Crush', value: 'crush', available: true, successLabel: 'Crush', skillsDir: '.crush' }, + { name: 'Kurama', value: 'kurama', available: true, successLabel: 'Kurama', skillsDir: '.kurama' }, { name: 'Cursor', value: 'cursor', available: true, successLabel: 'Cursor', skillsDir: '.cursor' }, { name: 'Factory Droid', value: 'factory', available: true, successLabel: 'Factory Droid', skillsDir: '.factory' }, { name: 'Gemini CLI', value: 'gemini', available: true, successLabel: 'Gemini CLI', skillsDir: '.gemini' },