enumerate brands for brand rules

This commit is contained in:
Joe Danziger
2025-05-23 19:50:00 -04:00
parent 73963d4007
commit 77f54dcf3d
3 changed files with 34 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import {
withNormalizedProjectRoot withNormalizedProjectRoot
} from './utils.js'; } from './utils.js';
import { initializeProjectDirect } from '../core/task-master-core.js'; import { initializeProjectDirect } from '../core/task-master-core.js';
import { BRAND_RULE_OPTIONS } from '../../../src/constants/rules.js';
export function registerInitializeProjectTool(server) { export function registerInitializeProjectTool(server) {
server.addTool({ server.addTool({
@@ -37,10 +38,10 @@ export function registerInitializeProjectTool(server) {
'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.' 'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.'
), ),
rules: z rules: z
.array(z.string()) .array(z.enum(BRAND_RULE_OPTIONS))
.optional() .optional()
.describe( .describe(
'List of rules to include at initialization (e.g., ["cursor", "roo"]). If omitted, defaults to all available brand rules.' `List of rules to include at initialization. If omitted, defaults to all available brand rules. Available options: ${BRAND_RULE_OPTIONS.join(', ')}`
) )
}), }),
execute: withNormalizedProjectRoot(async (args, context) => { execute: withNormalizedProjectRoot(async (args, context) => {

View File

@@ -10,6 +10,7 @@ import {
withNormalizedProjectRoot withNormalizedProjectRoot
} from './utils.js'; } from './utils.js';
import { rulesDirect } from '../core/direct-functions/rules.js'; import { rulesDirect } from '../core/direct-functions/rules.js';
import { BRAND_RULE_OPTIONS } from '../../../src/constants/rules.js';
/** /**
* Register the rules tool with the MCP server * Register the rules tool with the MCP server
@@ -25,10 +26,10 @@ export function registerRulesTool(server) {
.enum(['add', 'remove']) .enum(['add', 'remove'])
.describe('Whether to add or remove rules.'), .describe('Whether to add or remove rules.'),
rules: z rules: z
.array(z.string()) .array(z.enum(BRAND_RULE_OPTIONS))
.min(1) .min(1)
.describe( .describe(
'List of rules to add or remove (e.g., ["roo", "windsurf"]).' `List of rules to add or remove. Available options: ${BRAND_RULE_OPTIONS.join(', ')}`
), ),
projectRoot: z projectRoot: z
.string() .string()

28
src/constants/rules.js Normal file
View File

@@ -0,0 +1,28 @@
/**
* @typedef {'cursor' | 'roo' | 'windsurf' | 'cline'} BrandRule
*/
/**
* Available brand rules for project initialization
* @type {BrandRule[]}
* @description Defines possible brand rule sets:
* - cursor: Cursor IDE rules (default)
* - roo: Roo Code IDE rules
* - windsurf: Windsurf IDE rules
* - cline: Cline IDE rules
*/
export const BRAND_RULE_OPTIONS = [
'cursor',
'roo',
'windsurf',
'cline'
];
/**
* Check if a given brand rule is valid
* @param {string} brandRule - The brand rule to check
* @returns {boolean} True if the brand rule is valid, false otherwise
*/
export function isValidBrandRule(brandRule) {
return BRAND_RULE_OPTIONS.includes(brandRule);
}