| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /**
- * Agent MCP - Manages project agent roles during PBL generation.
- *
- * Migrated from PBL-Nano. No HTML rendering, no list_tools(), no hardcoded model.
- * Operates directly on a shared PBLProjectConfig.
- */
- import type { PBLProjectConfig, PBLAgent, PBLRoleDivision, PBLToolResult } from '../types';
- export class AgentMCP {
- private config: PBLProjectConfig;
- constructor(config: PBLProjectConfig) {
- this.config = config;
- }
- listAgents(): PBLToolResult {
- return {
- success: true,
- agents: this.config.agents.map((a) => ({ ...a })),
- message: this.config.agents.length === 0 ? 'No agents found.' : undefined,
- };
- }
- getAgentInfo(name: string): PBLToolResult {
- const agent = this.config.agents.find((a) => a.name === name);
- if (!agent) {
- return { success: false, error: `Agent "${name}" not found.` };
- }
- return { success: true, agent: { ...agent } };
- }
- createAgent(params: {
- name: string;
- system_prompt: string;
- default_mode: string;
- delay_time?: number;
- actor_role?: string;
- role_division?: PBLRoleDivision;
- is_system_agent?: boolean;
- }): PBLToolResult {
- const {
- name,
- system_prompt,
- default_mode,
- delay_time = 0,
- actor_role = '',
- role_division = 'development',
- is_system_agent = false,
- } = params;
- if (!name?.trim()) {
- return { success: false, error: 'Agent name cannot be empty.' };
- }
- if (!system_prompt?.trim()) {
- return { success: false, error: 'System prompt cannot be empty.' };
- }
- if (this.config.agents.find((a) => a.name === name)) {
- return { success: false, error: `Agent "${name}" already exists.` };
- }
- const newAgent: PBLAgent = {
- name,
- actor_role,
- role_division,
- system_prompt,
- default_mode,
- delay_time,
- env: {
- chat: {
- max_tokens: 4096,
- system_prompt,
- },
- },
- is_user_role: false,
- is_active: false,
- is_system_agent,
- };
- this.config.agents.push(newAgent);
- return { success: true, message: `Agent "${name}" created successfully.` };
- }
- updateAgent(params: {
- name: string;
- new_name?: string;
- system_prompt?: string;
- default_mode?: string;
- delay_time?: number;
- actor_role?: string;
- role_division?: PBLRoleDivision;
- }): PBLToolResult {
- const agent = this.config.agents.find((a) => a.name === params.name);
- if (!agent) {
- return { success: false, error: `Agent "${params.name}" not found.` };
- }
- if (
- params.new_name &&
- params.new_name !== params.name &&
- this.config.agents.find((a) => a.name === params.new_name)
- ) {
- return {
- success: false,
- error: `Agent "${params.new_name}" already exists.`,
- };
- }
- if (params.new_name !== undefined) agent.name = params.new_name;
- if (params.system_prompt !== undefined) {
- agent.system_prompt = params.system_prompt;
- if (agent.env.chat && typeof agent.env.chat === 'object') {
- (agent.env.chat as Record<string, unknown>).system_prompt = params.system_prompt;
- }
- }
- if (params.default_mode !== undefined) agent.default_mode = params.default_mode;
- if (params.delay_time !== undefined) agent.delay_time = params.delay_time;
- if (params.actor_role !== undefined) agent.actor_role = params.actor_role;
- if (params.role_division !== undefined) agent.role_division = params.role_division;
- return { success: true, message: 'Agent updated successfully.' };
- }
- deleteAgent(name: string): PBLToolResult {
- const index = this.config.agents.findIndex((a) => a.name === name);
- if (index === -1) {
- return { success: false, error: `Agent "${name}" not found.` };
- }
- this.config.agents.splice(index, 1);
- return { success: true, message: 'Agent deleted successfully.' };
- }
- }
|