diff --git a/assets/roocode/.roomodes b/assets/roocode/.roomodes index 289a4226..06a26893 100644 --- a/assets/roocode/.roomodes +++ b/assets/roocode/.roomodes @@ -1,8 +1,8 @@ { "customModes": [ { - "slug": "boomerang", - "name": "Boomerang", + "slug": "orchestrator", + "name": "Orchestrator", "roleDefinition": "You are Roo, a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, also your own, and with the information given by the user and other modes in shared context you are enabled to effectively break down complex problems into discrete tasks that can be solved by different specialists using the `taskmaster-ai` system for task and context management.", "customInstructions": "Your role is to coordinate complex workflows by delegating tasks to specialized modes, using `taskmaster-ai` as the central hub for task definition, progress tracking, and context management. \nAs an orchestrator, you should:\nn1. When given a complex task, use contextual information (which gets updated frequently) to break it down into logical subtasks that can be delegated to appropriate specialized modes.\nn2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. \nThese instructions must include:\n* All necessary context from the parent task or previous subtasks required to complete the work.\n* A clearly defined scope, specifying exactly what the subtask should accomplish.\n* An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n* An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to further relay this information to other tasks and for you to keep track of what was completed on this project.\nn3. Track and manage the progress of all subtasks. When a subtask is completed, acknowledge its results and determine the next steps.\nn4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\nn5. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively. If it seems complex delegate to architect to accomplish that \nn6. Use subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.", "groups": [ diff --git a/docs/contributor-docs/testing-roo-integration.md b/docs/contributor-docs/testing-roo-integration.md index cb4c6040..d1e3d1fc 100644 --- a/docs/contributor-docs/testing-roo-integration.md +++ b/docs/contributor-docs/testing-roo-integration.md @@ -64,7 +64,7 @@ To manually verify that the Roo files are properly included in the package: ls -la .roo/rules ls -la .roo/rules-architect ls -la .roo/rules-ask - ls -la .roo/rules-boomerang + ls -la .roo/rules-orchestrator ls -la .roo/rules-code ls -la .roo/rules-debug ls -la .roo/rules-test diff --git a/src/constants/profiles.js b/src/constants/profiles.js index 7c34c2c5..4d800e05 100644 --- a/src/constants/profiles.js +++ b/src/constants/profiles.js @@ -43,7 +43,7 @@ export const RULE_PROFILES = [ export const ROO_MODES = [ 'architect', 'ask', - 'boomerang', + 'orchestrator', 'code', 'debug', 'test' diff --git a/tests/integration/profiles/roo-files-inclusion.test.js b/tests/integration/profiles/roo-files-inclusion.test.js index ae1467cd..598fa38e 100644 --- a/tests/integration/profiles/roo-files-inclusion.test.js +++ b/tests/integration/profiles/roo-files-inclusion.test.js @@ -90,7 +90,7 @@ describe('Roo Files Inclusion in Package', () => { const expectedModes = [ 'architect', 'ask', - 'boomerang', + 'orchestrator', 'code', 'debug', 'test' diff --git a/tests/unit/profiles/cursor-integration.test.js b/tests/unit/profiles/cursor-integration.test.js index 3a23d509..eb962184 100644 --- a/tests/unit/profiles/cursor-integration.test.js +++ b/tests/unit/profiles/cursor-integration.test.js @@ -29,11 +29,8 @@ describe('Cursor Integration', () => { // Spy on fs methods jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {}); jest.spyOn(fs, 'readFileSync').mockImplementation((filePath) => { - if (filePath.toString().includes('.cursormodes')) { - return 'Existing cursormodes content'; - } - if (filePath.toString().includes('-rules')) { - return 'Existing mode rules content'; + if (filePath.toString().includes('mcp.json')) { + return JSON.stringify({ mcpServers: {} }, null, 2); } return '{}'; }); @@ -58,29 +55,10 @@ describe('Cursor Integration', () => { // Create rules directory fs.mkdirSync(path.join(tempDir, '.cursor', 'rules'), { recursive: true }); - // Create mode-specific rule directories - const cursorModes = [ - 'architect', - 'ask', - 'boomerang', - 'code', - 'debug', - 'test' - ]; - for (const mode of cursorModes) { - fs.mkdirSync(path.join(tempDir, '.cursor', `rules-${mode}`), { - recursive: true - }); - fs.writeFileSync( - path.join(tempDir, '.cursor', `rules-${mode}`, `${mode}-rules`), - `Content for ${mode} rules` - ); - } - - // Copy .cursormodes file + // Create MCP config file fs.writeFileSync( - path.join(tempDir, '.cursormodes'), - 'Cursormodes file content' + path.join(tempDir, '.cursor', 'mcp.json'), + JSON.stringify({ mcpServers: {} }, null, 2) ); } diff --git a/tests/unit/profiles/roo-integration.test.js b/tests/unit/profiles/roo-integration.test.js index efb7619f..453849cb 100644 --- a/tests/unit/profiles/roo-integration.test.js +++ b/tests/unit/profiles/roo-integration.test.js @@ -59,7 +59,14 @@ describe('Roo Integration', () => { fs.mkdirSync(path.join(tempDir, '.roo', 'rules'), { recursive: true }); // Create mode-specific rule directories - const rooModes = ['architect', 'ask', 'boomerang', 'code', 'debug', 'test']; + const rooModes = [ + 'architect', + 'ask', + 'orchestrator', + 'code', + 'debug', + 'test' + ]; for (const mode of rooModes) { fs.mkdirSync(path.join(tempDir, '.roo', `rules-${mode}`), { recursive: true @@ -102,7 +109,7 @@ describe('Roo Integration', () => { { recursive: true } ); expect(fs.mkdirSync).toHaveBeenCalledWith( - path.join(tempDir, '.roo', 'rules-boomerang'), + path.join(tempDir, '.roo', 'rules-orchestrator'), { recursive: true } ); expect(fs.mkdirSync).toHaveBeenCalledWith( @@ -133,7 +140,7 @@ describe('Roo Integration', () => { expect.any(String) ); expect(fs.writeFileSync).toHaveBeenCalledWith( - path.join(tempDir, '.roo', 'rules-boomerang', 'boomerang-rules'), + path.join(tempDir, '.roo', 'rules-orchestrator', 'orchestrator-rules'), expect.any(String) ); expect(fs.writeFileSync).toHaveBeenCalledWith( diff --git a/tests/unit/profiles/windsurf-integration.test.js b/tests/unit/profiles/windsurf-integration.test.js index e19d2e89..1726c1d0 100644 --- a/tests/unit/profiles/windsurf-integration.test.js +++ b/tests/unit/profiles/windsurf-integration.test.js @@ -29,11 +29,8 @@ describe('Windsurf Integration', () => { // Spy on fs methods jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {}); jest.spyOn(fs, 'readFileSync').mockImplementation((filePath) => { - if (filePath.toString().includes('.windsurfmodes')) { - return 'Existing windsurfmodes content'; - } - if (filePath.toString().includes('-rules')) { - return 'Existing mode rules content'; + if (filePath.toString().includes('mcp.json')) { + return JSON.stringify({ mcpServers: {} }, null, 2); } return '{}'; }); @@ -58,29 +55,10 @@ describe('Windsurf Integration', () => { // Create rules directory fs.mkdirSync(path.join(tempDir, '.windsurf', 'rules'), { recursive: true }); - // Create mode-specific rule directories - const windsurfModes = [ - 'architect', - 'ask', - 'boomerang', - 'code', - 'debug', - 'test' - ]; - for (const mode of windsurfModes) { - fs.mkdirSync(path.join(tempDir, '.windsurf', `rules-${mode}`), { - recursive: true - }); - fs.writeFileSync( - path.join(tempDir, '.windsurf', `rules-${mode}`, `${mode}-rules`), - `Content for ${mode} rules` - ); - } - - // Copy .windsurfmodes file + // Create MCP config file fs.writeFileSync( - path.join(tempDir, '.windsurfmodes'), - 'Windsurfmodes file content' + path.join(tempDir, '.windsurf', 'mcp.json'), + JSON.stringify({ mcpServers: {} }, null, 2) ); }