Ctrl K
ComunidadGuías…

plans/2025-09-13-dynamic-agent-slash-commands-v3.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
 # Dynamic Agent-Specific Slash Commands Implementation Plan

## Objective

Implement dynamic registration of agent-specific slash commands that automatically creates commands like `/agent-foo` and `/agent-bar` based on the agents returned by the API. This feature will provide direct shortcuts for agent switching without requiring the interactive selection interface of the existing `/agent` command. The implementation follows the existing command registration pattern used by workflow commands.

## Implementation Plan

- [x] **Task 1. Add AgentSwitch Command Variant**
   
   **Rationale**: Extend the existing Command enum with a new variant for direct agent switching, following the pattern of other command variants like Custom(PartialEvent).
   
   - Add `AgentSwitch(String)` variant to `Command` enum in `crates/forge_main/src/model.rs:221`
   - Add corresponding name() method case at `crates/forge_main/src/model.rs:325`
   - Add usage description using the strum property pattern similar to existing commands
   - Update command parsing logic to route agent-specific commands to this variant

- [x] **Task 2. Extend ForgeCommandManager with Agent Command Registration**
   
   **Rationale**: Follow the existing pattern used by `register_all()` method for workflow commands, but create a separate method for agent-based dynamic commands to maintain separation of concerns.
   
   - Add `register_agent_commands(&self, agents: Vec<Agent>)` method to `ForgeCommandManager` at `crates/forge_main/src/model.rs:63`
   - Implement agent ID sanitization for valid command names (replace special chars, handle spaces)
   - Generate `ForgeCommand` objects with pattern `/agent-{sanitized_id}` following workflow command format
   - Add agent-specific description format like "🤖 Switch to {title} agent" 
   - Store agent ID in the `value` field for later retrieval during parsing

- [x] **Task 3. Update ForgeCommandManager Command Parsing**
   
   **Rationale**: Extend the existing parsing logic in the `parse()` method to detect and handle agent-specific command patterns, similar to how workflow custom commands are handled.
   
   - Extend the `parse()` method fallback logic at `crates/forge_main/src/model.rs:192` to check for agent commands
   - Detect commands matching `/agent-*` pattern before falling back to custom commands
   - Extract agent ID from command names by removing `/agent-` prefix
   - Return `Command::AgentSwitch(agent_id)` for valid agent commands
   - Maintain existing error handling for invalid commands

- [x] **Task 4. Integrate Agent Command Registration into UI Initialization**
   
   **Rationale**: Agent commands must be registered during UI initialization right after workflow commands, ensuring they are available throughout the session.
   
   - Modify `init_state()` method in `crates/forge_main/src/ui.rs:700` to register agent commands
   - Load agents using existing `self.api.get_agents().await?` after line 720
   - Call `self.command.register_agent_commands(agents)` after workflow registration
   - Add error handling that logs warnings for agent loading failures without breaking initialization
   - Ensure agent commands are refreshed on subsequent `init_state()` calls

- [x] **Task 5. Implement Agent Switch Command Handler**
   
   **Rationale**: Create a streamlined handler for direct agent switching in the main UI command processing loop, reusing existing agent switching logic for consistency.
   
   - Add handler for `Command::AgentSwitch(agent_id)` in the UI command processing loop (around `crates/forge_main/src/ui.rs`)
   - Validate that the requested agent exists by checking against loaded agents
   - Reuse existing `on_agent_change()` logic for the actual switch operation
   - Provide user feedback for successful switches using existing notification patterns
   - Handle error cases with clear messages when agent is not found or unavailable

- [x] **Task 6. Implement Agent ID Sanitization Logic**
   
   **Rationale**: Ensure generated command names are valid shell command identifiers and don't conflict with existing system commands.
   
   - Create helper function to sanitize agent IDs for command names
   - Convert spaces and special characters to hyphens or underscores
   - Handle edge cases like empty IDs, numeric-only IDs, or very long IDs
   - Validate against existing built-in command names (`/agent`, `/forge`, `/muse`, etc.)
   - Provide deterministic fallback naming for problematic agent IDs

- [x] **Task 7. Update register_all Method to Handle Combined Registration**
   
   **Rationale**: Ensure the existing workflow command registration doesn't interfere with agent commands and that both can coexist in the command registry.
   
   - Modify `register_all()` method at `crates/forge_main/src/model.rs:78` to preserve existing agent commands
   - Ensure agent commands are not overwritten when workflow commands are re-registered
   - Maintain proper sorting of all commands (workflow + agent) for consistent completion behavior
   - Add logic to clear only workflow-related commands while preserving agent commands

- [x] **Task 8. Add Command Validation and Conflict Resolution**
   
   **Rationale**: Prevent agent command names from conflicting with built-in commands or workflow commands, ensuring system stability.
   
   - Add validation in `register_agent_commands()` to check for name conflicts
   - Implement conflict resolution strategy (e.g., add numeric suffix for duplicates)
   - Log warnings for agents that can't be registered due to naming conflicts
   - Ensure built-in commands always take precedence over dynamic agent commands
   - Provide clear error messages when agent commands can't be registered

## Verification Criteria

- **Agent Command Registration**: All discovered agents generate corresponding `/agent-{id}` commands in the command registry
- **Command Parsing**: Agent-specific commands are correctly parsed and routed to `Command::AgentSwitch` variant
- **Agent Switching**: Direct agent switching via generated commands functions identically to the interactive `/agent` command
- **Command Completion**: Agent commands appear in autocompletion alongside workflow and built-in commands
- **Error Handling**: Invalid agent commands provide clear error messages without crashing the system
- **Name Validation**: Generated command names are valid and don't conflict with existing commands
- **Session Persistence**: Agent commands remain available throughout the session and are properly refreshed
- **Integration**: Agent command registration doesn't interfere with existing workflow command functionality

## Potential Risks and Mitigations

### **Risk: Command Name Collisions with Built-in Commands**
**Impact**: Agent IDs might conflict with existing built-in commands like `/agent`, `/forge`, `/muse`
**Mitigation**: 
- Use consistent `/agent-{id}` prefixing to avoid conflicts with built-in commands
- Implement validation to check against all existing command names during registration
- Skip registration for agents whose sanitized IDs would conflict with built-in commands

### **Risk: Agent Loading Performance Impact**  
**Impact**: Loading agents during UI initialization could slow startup
**Mitigation**:
- Agent loading already happens during UI initialization for other purposes
- Agent command registration is a lightweight operation that just creates ForgeCommand objects
- Implement timeout and graceful degradation if agent loading takes too long

### **Risk: Command Registry State Consistency**
**Impact**: Agent commands might become stale if agents are reloaded but commands aren't refreshed
**Mitigation**:
- Register agent commands on every `init_state()` call, which handles session refresh
- Clear existing agent commands before re-registering to prevent stale entries
- Use the existing agent loading cache to minimize performance impact

### **Risk: Agent ID Edge Cases**
**Impact**: Unusual agent IDs (empty, special chars, very long) could break command generation
**Mitigation**:
- Implement robust agent ID sanitization with fallback strategies
- Skip agents with IDs that can't be sanitized to valid command names
- Log warnings for problematic agent IDs to aid debugging

## Alternative Approaches

### **1. Extend Existing /agent Command**: Add parameter support like `/agent foo` instead of creating separate commands
   **Trade-offs**: Simpler implementation but doesn't provide individual completion entries and requires parameter parsing

### **2. Use Different Prefix Pattern**: Use `/switch-{agent}` or `/to-{agent}` instead of `/agent-{agent}`
   **Trade-offs**: Different naming might be clearer but `/agent-` prefix clearly indicates relationship to the `/agent` command

### **3. Register Agent Commands as Custom Commands**: Treat agent commands as workflow-style custom commands
   **Trade-offs**: Could reuse more existing logic but would blur the distinction between user-defined and system-generated commands

## Future Enhancements

- **Agent Command Grouping**: Display agent commands in a separate section in help/completion
- **Agent Command Aliases**: Allow agents to define custom short aliases in their metadata
- **Dynamic Command Refresh**: Automatically refresh agent commands when agent list changes without full UI reinitialization
- **Agent Command History**: Track usage patterns and prioritize frequently used agents in completion