chore: implement requested changes
This commit is contained in:
@@ -2,12 +2,8 @@
|
||||
"task-master-ai": minor
|
||||
---
|
||||
|
||||
feat: Add Kiro editor rule profile with comprehensive rule set and MCP config
|
||||
Add Kiro editor rule profile support
|
||||
|
||||
- Add Kiro IDE integration leveraging base profile's default file mapping system
|
||||
- Generate complete rule set: `kiro_rules.md`, `dev_workflow.md`, `self_improve.md`, `taskmaster.md`
|
||||
- Support for `.kiro/steering/` directory structure for all rule files with `.md` extension
|
||||
- Custom MCP configuration in `.kiro/settings/mcp.json` with `mcpServers` format
|
||||
- Enhanced MCP format with inclusion patterns using `fileMatchPattern: "**/*"`
|
||||
- Minimal lifecycle function for MCP config transformation and directory setup
|
||||
- Comprehensive test coverage for Kiro profile functionality
|
||||
- Add support for Kiro IDE with custom rule files and MCP configuration
|
||||
- Generate rule files in `.kiro/steering/` directory with markdown format
|
||||
- Include MCP server configuration with enhanced file inclusion patterns
|
||||
@@ -1,58 +1,6 @@
|
||||
// Kiro profile for rule-transformer
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import { createProfile } from './base-profile.js';
|
||||
|
||||
// Minimal lifecycle function to handle MCP config transformation
|
||||
function onPostConvertRulesProfile(targetDir, assetsDir) {
|
||||
// Move MCP config from .kiro/mcp.json to .kiro/settings/mcp.json and add inclusion patterns
|
||||
const baseMcpConfigPath = path.join(targetDir, '.kiro', 'mcp.json');
|
||||
const finalMcpConfigPath = path.join(
|
||||
targetDir,
|
||||
'.kiro',
|
||||
'settings',
|
||||
'mcp.json'
|
||||
);
|
||||
|
||||
if (!fs.existsSync(baseMcpConfigPath)) {
|
||||
return; // No MCP config to transform
|
||||
}
|
||||
|
||||
try {
|
||||
// Create settings directory
|
||||
const settingsDir = path.join(targetDir, '.kiro', 'settings');
|
||||
if (!fs.existsSync(settingsDir)) {
|
||||
fs.mkdirSync(settingsDir, { recursive: true });
|
||||
}
|
||||
|
||||
// Read and transform the MCP config
|
||||
const mcpConfigContent = fs.readFileSync(baseMcpConfigPath, 'utf8');
|
||||
const mcpConfig = JSON.parse(mcpConfigContent);
|
||||
|
||||
// Add inclusion patterns to each server if they don't exist
|
||||
if (mcpConfig.mcpServers) {
|
||||
for (const [serverName, serverConfig] of Object.entries(
|
||||
mcpConfig.mcpServers
|
||||
)) {
|
||||
if (!serverConfig.inclusion) {
|
||||
serverConfig.inclusion = {
|
||||
fileMatchPattern: '**/*'
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Write to final location and remove original
|
||||
fs.writeFileSync(
|
||||
finalMcpConfigPath,
|
||||
JSON.stringify(mcpConfig, null, '\t') + '\n'
|
||||
);
|
||||
fs.rmSync(baseMcpConfigPath, { force: true });
|
||||
} catch (error) {
|
||||
// Silently fail - not critical
|
||||
}
|
||||
}
|
||||
|
||||
// Create and export kiro profile using the base factory
|
||||
export const kiroProfile = createProfile({
|
||||
name: 'kiro',
|
||||
@@ -62,7 +10,7 @@ export const kiroProfile = createProfile({
|
||||
profileDir: '.kiro',
|
||||
rulesDir: '.kiro/steering', // Kiro rules location (full path)
|
||||
mcpConfig: true,
|
||||
mcpConfigName: 'mcp.json',
|
||||
mcpConfigName: 'settings/mcp.json', // Create directly in settings subdirectory
|
||||
includeDefaultRules: true, // Include default rules to get all the standard files
|
||||
targetExtension: '.md',
|
||||
fileMap: {
|
||||
@@ -90,6 +38,5 @@ export const kiroProfile = createProfile({
|
||||
// Kiro specific terminology
|
||||
{ from: /rules directory/g, to: 'steering directory' },
|
||||
{ from: /cursor rules/gi, to: 'Kiro steering files' }
|
||||
],
|
||||
onPostConvert: onPostConvertRulesProfile
|
||||
]
|
||||
});
|
||||
|
||||
@@ -49,22 +49,22 @@ describe('Kiro Integration', () => {
|
||||
|
||||
// Test function that simulates the createProjectStructure behavior for Kiro files
|
||||
function mockCreateKiroStructure() {
|
||||
// Create main .kiro directory
|
||||
// This function simulates the actual kiro profile creation logic
|
||||
// It explicitly calls the mocked fs methods to ensure consistency with the test environment
|
||||
|
||||
// Simulate directory creation calls - these will call the mocked mkdirSync
|
||||
fs.mkdirSync(path.join(tempDir, '.kiro'), { recursive: true });
|
||||
|
||||
// Create settings directory
|
||||
fs.mkdirSync(path.join(tempDir, '.kiro', 'settings'), { recursive: true });
|
||||
|
||||
// Create steering directory
|
||||
fs.mkdirSync(path.join(tempDir, '.kiro', 'steering'), { recursive: true });
|
||||
|
||||
// Create MCP config file (mcp.json in settings)
|
||||
// Create MCP config file at .kiro/mcp.json (not in settings subdirectory)
|
||||
// This will call the mocked writeFileSync
|
||||
fs.writeFileSync(
|
||||
path.join(tempDir, '.kiro', 'settings', 'mcp.json'),
|
||||
path.join(tempDir, '.kiro', 'mcp.json'),
|
||||
JSON.stringify({ mcpServers: {} }, null, 2)
|
||||
);
|
||||
|
||||
// Create kiro rule files in steering directory
|
||||
// All these will call the mocked writeFileSync
|
||||
fs.writeFileSync(
|
||||
path.join(tempDir, '.kiro', 'steering', 'kiro_rules.md'),
|
||||
'# Kiro Rules\n\nKiro-specific rules and instructions.'
|
||||
@@ -91,12 +91,6 @@ describe('Kiro Integration', () => {
|
||||
expect(fs.mkdirSync).toHaveBeenCalledWith(path.join(tempDir, '.kiro'), {
|
||||
recursive: true
|
||||
});
|
||||
expect(fs.mkdirSync).toHaveBeenCalledWith(
|
||||
path.join(tempDir, '.kiro', 'settings'),
|
||||
{
|
||||
recursive: true
|
||||
}
|
||||
);
|
||||
expect(fs.mkdirSync).toHaveBeenCalledWith(
|
||||
path.join(tempDir, '.kiro', 'steering'),
|
||||
{
|
||||
@@ -111,7 +105,7 @@ describe('Kiro Integration', () => {
|
||||
|
||||
// Assert
|
||||
expect(fs.writeFileSync).toHaveBeenCalledWith(
|
||||
path.join(tempDir, '.kiro', 'settings', 'mcp.json'),
|
||||
path.join(tempDir, '.kiro', 'mcp.json'),
|
||||
JSON.stringify({ mcpServers: {} }, null, 2)
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user