UAT: TuiCommandRouter missing persona sub-commands: create, edit, delete, export, import #1339

Open
opened 2026-04-02 16:55:44 +00:00 by freemo · 0 comments
Owner

Bug Report: [tui/persona] — /persona command router only implements list and set

Severity Assessment

  • Impact: High. Five of the seven spec-required /persona:* commands are completely unimplemented in the command router, making persona management via slash commands impossible.
  • Likelihood: 100% reproducible — the commands return "Unknown persona command: ..." for all five missing sub-commands.
  • Priority: High

Location

  • File: src/cleveragents/tui/commands.pyTuiCommandRouter._persona_command() (lines 33–42)

Description

The specification (§Persona Commands — TUI-only) defines seven /persona:* slash commands:

Command Description
/persona:list Display all personas
/persona:set <name> Switch to persona
/persona:create Open PersonaEditorModal
/persona:edit [name] Edit persona
/persona:delete <name> Delete persona
/persona:export <name> Export persona YAML
/persona:import <path> Import persona YAML

Actual Behavior

The _persona_command() method only handles list and set:

def _persona_command(self, tokens: list[str], *, session_id: str) -> str:
    if not tokens or tokens[0] == "list":
        names = [persona.name for persona in self.persona_registry.list_personas()]
        return ", ".join(names) if names else "No personas"
    if tokens[0] == "set":
        if len(tokens) < 2:
            return "Usage: /persona set <name>"
        persona = self.persona_state.set_active_persona(session_id, tokens[1])
        return f"Active persona: {persona.name}"
    return f"Unknown persona command: {' '.join(tokens)}"

Verified via runtime test:

/persona create  → "Unknown persona command: create"
/persona edit    → "Unknown persona command: edit my-persona"
/persona delete  → "Unknown persona command: delete my-persona"
/persona export  → "Unknown persona command: export my-persona"
/persona import  → "Unknown persona command: import ./file.yaml"

Expected Behavior (from spec)

All seven /persona:* commands should be functional:

  • /persona:create — opens PersonaEditorModal (or a creation flow)
  • /persona:edit [name] — opens PersonaEditorModal for the named (or active) persona
  • /persona:delete <name> — deletes the named persona YAML file
  • /persona:export <name> — calls PersonaRegistry.export_persona() and reports the output path
  • /persona:import <path> — calls PersonaRegistry.import_persona() and reports success/failure

Note: The PersonaRegistry already implements export_persona() and import_persona() — the command router just needs to wire them up.

Steps to Reproduce

from cleveragents.tui.persona.registry import PersonaRegistry
from cleveragents.tui.persona.state import PersonaState
from cleveragents.tui.commands import TuiCommandRouter

reg = PersonaRegistry()
state = PersonaState(registry=reg)
router = TuiCommandRouter(persona_registry=reg, persona_state=state)

print(router.handle("persona create", session_id="s1"))
# Output: "Unknown persona command: create"
print(router.handle("persona delete my-persona", session_id="s1"))
# Output: "Unknown persona command: delete my-persona"
  • #1315 (Refactor TUI to Align with ADR-44 and ADR-45)

References

  • Spec §Persona Commands — TUI-only (line ~29241)
  • ADR-045 §Persona Lifecycle
  • src/cleveragents/tui/commands.py lines 33–42
  • src/cleveragents/tui/persona/registry.pyexport_persona(), import_persona(), delete()
## Bug Report: [tui/persona] — `/persona` command router only implements `list` and `set` ### Severity Assessment - **Impact**: High. Five of the seven spec-required `/persona:*` commands are completely unimplemented in the command router, making persona management via slash commands impossible. - **Likelihood**: 100% reproducible — the commands return "Unknown persona command: ..." for all five missing sub-commands. - **Priority**: High ### Location - **File**: `src/cleveragents/tui/commands.py` — `TuiCommandRouter._persona_command()` (lines 33–42) ### Description The specification (§Persona Commands — TUI-only) defines seven `/persona:*` slash commands: | Command | Description | |---------|-------------| | `/persona:list` | Display all personas | | `/persona:set <name>` | Switch to persona | | `/persona:create` | Open PersonaEditorModal | | `/persona:edit [name]` | Edit persona | | `/persona:delete <name>` | Delete persona | | `/persona:export <name>` | Export persona YAML | | `/persona:import <path>` | Import persona YAML | ### Actual Behavior The `_persona_command()` method only handles `list` and `set`: ```python def _persona_command(self, tokens: list[str], *, session_id: str) -> str: if not tokens or tokens[0] == "list": names = [persona.name for persona in self.persona_registry.list_personas()] return ", ".join(names) if names else "No personas" if tokens[0] == "set": if len(tokens) < 2: return "Usage: /persona set <name>" persona = self.persona_state.set_active_persona(session_id, tokens[1]) return f"Active persona: {persona.name}" return f"Unknown persona command: {' '.join(tokens)}" ``` Verified via runtime test: ``` /persona create → "Unknown persona command: create" /persona edit → "Unknown persona command: edit my-persona" /persona delete → "Unknown persona command: delete my-persona" /persona export → "Unknown persona command: export my-persona" /persona import → "Unknown persona command: import ./file.yaml" ``` ### Expected Behavior (from spec) All seven `/persona:*` commands should be functional: - `/persona:create` — opens PersonaEditorModal (or a creation flow) - `/persona:edit [name]` — opens PersonaEditorModal for the named (or active) persona - `/persona:delete <name>` — deletes the named persona YAML file - `/persona:export <name>` — calls `PersonaRegistry.export_persona()` and reports the output path - `/persona:import <path>` — calls `PersonaRegistry.import_persona()` and reports success/failure Note: The `PersonaRegistry` already implements `export_persona()` and `import_persona()` — the command router just needs to wire them up. ### Steps to Reproduce ```python from cleveragents.tui.persona.registry import PersonaRegistry from cleveragents.tui.persona.state import PersonaState from cleveragents.tui.commands import TuiCommandRouter reg = PersonaRegistry() state = PersonaState(registry=reg) router = TuiCommandRouter(persona_registry=reg, persona_state=state) print(router.handle("persona create", session_id="s1")) # Output: "Unknown persona command: create" print(router.handle("persona delete my-persona", session_id="s1")) # Output: "Unknown persona command: delete my-persona" ``` ### Related Issues - #1315 (Refactor TUI to Align with ADR-44 and ADR-45) ### References - Spec §Persona Commands — TUI-only (line ~29241) - ADR-045 §Persona Lifecycle - `src/cleveragents/tui/commands.py` lines 33–42 - `src/cleveragents/tui/persona/registry.py` — `export_persona()`, `import_persona()`, `delete()`
freemo self-assigned this 2026-04-02 18:45:21 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core#1339
No description provided.