UAT: TuiCommandRouter only handles persona/session/help — 11 of 14 slash command groups return "Unknown command" (plan, project, actor, resource, scope, config, tool, skill, invariant, profile, TUI utilities) #5948

Open
opened 2026-04-09 12:08:53 +00:00 by HAL9000 · 0 comments
Owner

Bug Report

Feature Area: TUI Reference and Command Input System — Command Dispatch
Component: src/cleveragents/tui/commands.py
ADR Reference: ADR-046 §Command System (/ Prefix) — Complete Command Reference


What Was Tested

Code-level analysis of TuiCommandRouter.handle() in src/cleveragents/tui/commands.py (lines 48–58) against the complete slash command reference in ADR-046.


Expected Behavior (from ADR-046 §Complete Command Reference)

ADR-046 defines 14 command groups with a total of 60+ slash commands:

  • Session (9 commands): session:create, session:list, session:show, session:switch, session:close, session:delete, session:rename, session:export, session:import
  • Persona (7 commands): persona:list, persona:set, persona:create, persona:edit, persona:delete, persona:export, persona:import
  • Scope (4 commands): scope:add, scope:remove, scope:clear, scope:show
  • Plan (14 commands): plan:use, plan:list, plan:status, plan:tree, plan:execute, plan:apply, plan:cancel, plan:diff, plan:correct, plan:resume, plan:revert, plan:rollback, plan:explain, plan:errors, plan:artifacts, plan:inspect
  • Project (6 commands): project:list, project:create, project:show, project:delete, project:inspect, project:context:show
  • Actor (3 commands): actor:list, actor:show, actor:set-default
  • Resource (4 commands): resource:list, resource:show, resource:tree, resource:inspect
  • Automation Profile (2 commands): profile:list, profile:show
  • Invariant (3 commands): invariant:list, invariant:add, invariant:remove
  • Config (3 commands): config:list, config:get, config:set
  • Tool (2 commands): tool:list, tool:show
  • Skill (2 commands): skill:list, skill:show
  • TUI Utilities (6 commands): clear, theme, settings, help, about, debug

All commands must execute immediately without being sent to the actor.


Actual Behavior (from code)

In src/cleveragents/tui/commands.py, lines 48–58:

def handle(self, raw: str, *, session_id: str) -> str:
    tokens = raw.strip().split()
    if not tokens:
        return "Empty command"
    if tokens[0] == "persona":
        return self._persona_command(tokens[1:], session_id=session_id)
    if tokens[0] == "session":
        return self._session_command(tokens[1:], session_id=session_id)
    if tokens[0] == "help":
        return self._help_command(tokens[1:])
    return f"Unknown command: /{raw}"

Only 3 of 14 command groups are dispatched:

  • persona — partially implemented (list and set only; create, edit, delete, export, import return "Unknown persona command")
  • session — partially implemented (show, export, import only; create, list, switch, close, delete, rename return "Unknown session command")
  • help — fully implemented

All other command groups return "Unknown command: /<cmd>":

  • /plan:*Unknown command: /plan:use
  • /project:*Unknown command: /project:list
  • /actor:*Unknown command: /actor:list
  • /resource:*Unknown command: /resource:list
  • /scope:*Unknown command: /scope:add
  • /config:*Unknown command: /config:get
  • /tool:*Unknown command: /tool:list
  • /skill:*Unknown command: /skill:list
  • /invariant:*Unknown command: /invariant:list
  • /profile:*Unknown command: /profile:list
  • /clear, /theme, /settings, /about, /debugUnknown command

Additionally, the handle() method splits on spaces and checks tokens[0], but the slash catalog uses colon-namespaced commands (e.g., session:create). When the user types /session:create, tokens[0] is "session:create" — not "session" — so even the session handler is not reached for colon-namespaced input.


Steps to Reproduce

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

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

# These all return "Unknown command: /..."
print(router.handle("plan:list", session_id="s1"))    # "Unknown command: /plan:list"
print(router.handle("project:list", session_id="s1")) # "Unknown command: /project:list"
print(router.handle("clear", session_id="s1"))        # "Unknown command: /clear"
print(router.handle("scope:show", session_id="s1"))   # "Unknown command: /scope:show"

# Even session:create fails (colon-namespaced)
print(router.handle("session:create", session_id="s1"))  # "Unknown command: /session:create"

Code Location

  • src/cleveragents/tui/commands.py, lines 48–58 (TuiCommandRouter.handle)
  • src/cleveragents/tui/commands.py, lines 95–113 (_persona_command — only list/set)
  • src/cleveragents/tui/commands.py, lines 106–113 (_session_command — only show/export/import)

Severity Assessment

Non-critical for v3.7.0 milestone acceptance if the TUI is not yet feature-complete for all command groups. However, this is a significant functional gap — the slash command overlay shows 60+ commands but only ~5 actually work. Users who type any plan, project, actor, resource, scope, config, tool, skill, invariant, or profile command receive an unhelpful "Unknown command" error.

The session:create, session:list, session:switch, session:close, session:delete, session:rename commands are particularly impactful as they are core session management operations.


Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: uat-tester

## Bug Report **Feature Area:** TUI Reference and Command Input System — Command Dispatch **Component:** `src/cleveragents/tui/commands.py` **ADR Reference:** ADR-046 §Command System (/ Prefix) — Complete Command Reference --- ## What Was Tested Code-level analysis of `TuiCommandRouter.handle()` in `src/cleveragents/tui/commands.py` (lines 48–58) against the complete slash command reference in ADR-046. --- ## Expected Behavior (from ADR-046 §Complete Command Reference) ADR-046 defines 14 command groups with a total of 60+ slash commands: - **Session** (9 commands): `session:create`, `session:list`, `session:show`, `session:switch`, `session:close`, `session:delete`, `session:rename`, `session:export`, `session:import` - **Persona** (7 commands): `persona:list`, `persona:set`, `persona:create`, `persona:edit`, `persona:delete`, `persona:export`, `persona:import` - **Scope** (4 commands): `scope:add`, `scope:remove`, `scope:clear`, `scope:show` - **Plan** (14 commands): `plan:use`, `plan:list`, `plan:status`, `plan:tree`, `plan:execute`, `plan:apply`, `plan:cancel`, `plan:diff`, `plan:correct`, `plan:resume`, `plan:revert`, `plan:rollback`, `plan:explain`, `plan:errors`, `plan:artifacts`, `plan:inspect` - **Project** (6 commands): `project:list`, `project:create`, `project:show`, `project:delete`, `project:inspect`, `project:context:show` - **Actor** (3 commands): `actor:list`, `actor:show`, `actor:set-default` - **Resource** (4 commands): `resource:list`, `resource:show`, `resource:tree`, `resource:inspect` - **Automation Profile** (2 commands): `profile:list`, `profile:show` - **Invariant** (3 commands): `invariant:list`, `invariant:add`, `invariant:remove` - **Config** (3 commands): `config:list`, `config:get`, `config:set` - **Tool** (2 commands): `tool:list`, `tool:show` - **Skill** (2 commands): `skill:list`, `skill:show` - **TUI Utilities** (6 commands): `clear`, `theme`, `settings`, `help`, `about`, `debug` All commands must execute immediately without being sent to the actor. --- ## Actual Behavior (from code) In `src/cleveragents/tui/commands.py`, lines 48–58: ```python def handle(self, raw: str, *, session_id: str) -> str: tokens = raw.strip().split() if not tokens: return "Empty command" if tokens[0] == "persona": return self._persona_command(tokens[1:], session_id=session_id) if tokens[0] == "session": return self._session_command(tokens[1:], session_id=session_id) if tokens[0] == "help": return self._help_command(tokens[1:]) return f"Unknown command: /{raw}" ``` Only **3 of 14 command groups** are dispatched: - `persona` — partially implemented (`list` and `set` only; `create`, `edit`, `delete`, `export`, `import` return "Unknown persona command") - `session` — partially implemented (`show`, `export`, `import` only; `create`, `list`, `switch`, `close`, `delete`, `rename` return "Unknown session command") - `help` — fully implemented **All other command groups return `"Unknown command: /<cmd>"`:** - `/plan:*` → `Unknown command: /plan:use` - `/project:*` → `Unknown command: /project:list` - `/actor:*` → `Unknown command: /actor:list` - `/resource:*` → `Unknown command: /resource:list` - `/scope:*` → `Unknown command: /scope:add` - `/config:*` → `Unknown command: /config:get` - `/tool:*` → `Unknown command: /tool:list` - `/skill:*` → `Unknown command: /skill:list` - `/invariant:*` → `Unknown command: /invariant:list` - `/profile:*` → `Unknown command: /profile:list` - `/clear`, `/theme`, `/settings`, `/about`, `/debug` → `Unknown command` Additionally, the `handle()` method splits on spaces and checks `tokens[0]`, but the slash catalog uses colon-namespaced commands (e.g., `session:create`). When the user types `/session:create`, `tokens[0]` is `"session:create"` — not `"session"` — so even the session handler is not reached for colon-namespaced input. --- ## Steps to Reproduce ```python from cleveragents.tui.commands import TuiCommandRouter from cleveragents.tui.persona.registry import PersonaRegistry from cleveragents.tui.persona.state import PersonaState registry = PersonaRegistry() state = PersonaState(registry=registry) router = TuiCommandRouter(persona_registry=registry, persona_state=state) # These all return "Unknown command: /..." print(router.handle("plan:list", session_id="s1")) # "Unknown command: /plan:list" print(router.handle("project:list", session_id="s1")) # "Unknown command: /project:list" print(router.handle("clear", session_id="s1")) # "Unknown command: /clear" print(router.handle("scope:show", session_id="s1")) # "Unknown command: /scope:show" # Even session:create fails (colon-namespaced) print(router.handle("session:create", session_id="s1")) # "Unknown command: /session:create" ``` --- ## Code Location - `src/cleveragents/tui/commands.py`, lines 48–58 (`TuiCommandRouter.handle`) - `src/cleveragents/tui/commands.py`, lines 95–113 (`_persona_command` — only list/set) - `src/cleveragents/tui/commands.py`, lines 106–113 (`_session_command` — only show/export/import) --- ## Severity Assessment **Non-critical for v3.7.0 milestone acceptance** if the TUI is not yet feature-complete for all command groups. However, this is a significant functional gap — the slash command overlay shows 60+ commands but only ~5 actually work. Users who type any plan, project, actor, resource, scope, config, tool, skill, invariant, or profile command receive an unhelpful "Unknown command" error. The `session:create`, `session:list`, `session:switch`, `session:close`, `session:delete`, `session:rename` commands are particularly impactful as they are core session management operations. --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
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#5948
No description provided.