All files / src/llm-orchestration/action-handlers list-sub-agents.handler.ts

100% Statements 16/16
100% Branches 2/2
100% Functions 6/6
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 907x           7x     7x 16x   16x     1x               3x                                                     7x 7x   5x     7x       5x         7x                       2x                        
import { Injectable } from '@nestjs/common';
import { ActionHandler } from './action-handler.interface';
import {
  ActionExecutionResult,
  PlanExecutionContext,
} from '../llm-orchestration.interfaces';
import { SubAgentsService } from '../../sub-agents/sub-agents.service';
 
@Injectable()
export class ListSubAgentsHandler implements ActionHandler {
  readonly toolName = 'list_sub_agents';
 
  constructor(private readonly subAgentsService: SubAgentsService) {}
 
  getMetadata() {
    return {
      name: this.toolName,
      description: 'List all available sub-agents with their details',
      arguments: [],
    };
  }
 
  getDefinition(): string {
    return `## list_sub_agents
 
List all available sub-agents with their configuration details.
 
### Parameters:
No parameters required.
 
### Returns:
List of sub-agents including:
- name
- description
- enabled_tools
- system_prompt_id
- context_template_id
- model_id
 
### Example:
\`\`\`typescript
tool: list_sub_agents
args: {}
\`\`\``;
  }
 
  async execute(
    _args: Record<string, any>,
    _context: PlanExecutionContext,
  ): Promise<ActionExecutionResult> {
    try {
      const subAgents = await this.subAgentsService.findActive();
 
      const summary = subAgents
        .map(
          (agent) =>
            `- **${agent.name}**: ${agent.description || 'No description'}`,
        )
        .join('\n');
 
      return {
        status: 'SUCCESS',
        summary: `Found ${subAgents.length} available sub-agent(s):\n\n${summary}`,
        execution_log: {
          output: JSON.stringify(
            subAgents.map((a) => ({
              name: a.name,
              description: a.description,
              enabled_tools: a.enabled_tools,
            })),
            null,
            2,
          ),
        },
        persisted_args: {},
      };
    } catch (error) {
      return {
        status: 'FAILURE',
        summary: 'Failed to list sub-agents',
        error_message: error.message,
        execution_log: {
          output: '',
          error_message: error.message,
        },
      };
    }
  }
}