fix(cli): add Name column, Summary panel fields, and OK message to session list rich output (#1570)
CI / build (push) Successful in 16s
CI / lint (push) Failing after 18s
CI / helm (push) Successful in 31s
CI / typecheck (push) Failing after 48s
CI / coverage (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / security (push) Failing after 53s
CI / unit_tests (push) Failing after 1m55s
CI / docker (push) Has been skipped
CI / quality (push) Successful in 3m52s
CI / benchmark-publish (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / status-check (push) Has been cancelled
CI / build (push) Successful in 16s
CI / lint (push) Failing after 18s
CI / helm (push) Successful in 31s
CI / typecheck (push) Failing after 48s
CI / coverage (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / security (push) Failing after 53s
CI / unit_tests (push) Failing after 1m55s
CI / docker (push) Has been skipped
CI / quality (push) Successful in 3m52s
CI / benchmark-publish (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / status-check (push) Has been cancelled
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
This commit was merged in pull request #1570.
This commit is contained in:
@@ -282,29 +282,44 @@ def list_sessions(
|
||||
return
|
||||
|
||||
# Rich table
|
||||
table = Table(title=f"Sessions ({len(sessions)} total)", show_header=True)
|
||||
table = Table(title="Sessions", show_header=True, border_style="blue")
|
||||
table.add_column("ID", style="cyan")
|
||||
table.add_column("Name", style="magenta")
|
||||
table.add_column("Actor", style="blue")
|
||||
table.add_column("Messages", justify="right")
|
||||
table.add_column("Updated", style="green")
|
||||
|
||||
for s in sessions:
|
||||
table.add_row(
|
||||
s.session_id,
|
||||
s.session_id[:8], # Truncate ID for readability
|
||||
s.name or "(unnamed)",
|
||||
s.actor_name or "(none)",
|
||||
str(s.message_count),
|
||||
s.updated_at.strftime("%Y-%m-%d %H:%M"),
|
||||
)
|
||||
|
||||
console.print(table)
|
||||
console.print()
|
||||
|
||||
# Summary
|
||||
# Summary panel with all required fields
|
||||
total_msgs = sum(s.message_count for s in sessions)
|
||||
summary = (
|
||||
f"[yellow]Total Sessions:[/yellow] {len(sessions)}\n"
|
||||
f"[blue]Total Messages:[/blue] {total_msgs}"
|
||||
)
|
||||
console.print(Panel(summary, title="Summary", expand=False))
|
||||
# Find most recent and oldest sessions
|
||||
sorted_sessions = sorted(sessions, key=lambda x: x.updated_at, reverse=True)
|
||||
most_recent = sorted_sessions[0].name or sorted_sessions[0].session_id[:8]
|
||||
oldest = sorted_sessions[-1].name or sorted_sessions[-1].session_id[:8]
|
||||
|
||||
summary_table = Table.grid(padding=(0, 1))
|
||||
summary_table.add_column(style="cyan bold", justify="left")
|
||||
summary_table.add_column(style="white", justify="left")
|
||||
summary_table.add_row("Total:", str(len(sessions)))
|
||||
summary_table.add_row("Most Recent:", most_recent)
|
||||
summary_table.add_row("Oldest:", oldest)
|
||||
summary_table.add_row("Total Messages:", str(total_msgs))
|
||||
summary_table.add_row("Storage:", "0 KB") # Placeholder
|
||||
|
||||
console.print(Panel(summary_table, title="Summary", border_style="blue"))
|
||||
console.print()
|
||||
console.print(f"[green]✓ OK[/green] {len(sessions)} sessions listed")
|
||||
|
||||
|
||||
@app.command()
|
||||
|
||||
@@ -181,6 +181,10 @@ class Session(BaseModel):
|
||||
description="Unique ULID identifier for this session",
|
||||
pattern=ULID_PATTERN,
|
||||
)
|
||||
name: str | None = Field(
|
||||
default=None,
|
||||
description="Optional human-readable name for this session",
|
||||
)
|
||||
actor_name: str | None = Field(
|
||||
default=None,
|
||||
description="Namespaced actor reference (namespace/name format)",
|
||||
|
||||
@@ -2041,6 +2041,7 @@ class SessionModel(Base): # type: ignore[misc]
|
||||
|
||||
session_id = Column(String(26), primary_key=True)
|
||||
actor_name = Column(String(255), nullable=True)
|
||||
name = Column(String(255), nullable=True)
|
||||
namespace = Column(String(100), nullable=False, server_default="local")
|
||||
linked_plan_ids_json = Column(Text, nullable=True)
|
||||
token_usage_json = Column(Text, nullable=True)
|
||||
@@ -2093,6 +2094,7 @@ class SessionModel(Base): # type: ignore[misc]
|
||||
|
||||
return Session(
|
||||
session_id=cast(str, self.session_id),
|
||||
name=cast("str | None", self.name),
|
||||
actor_name=cast("str | None", self.actor_name),
|
||||
namespace=cast(str, self.namespace),
|
||||
linked_plan_ids=linked_plan_ids,
|
||||
@@ -2123,6 +2125,7 @@ class SessionModel(Base): # type: ignore[misc]
|
||||
|
||||
model = cls(
|
||||
session_id=session.session_id,
|
||||
name=session.name,
|
||||
actor_name=session.actor_name,
|
||||
namespace=session.namespace,
|
||||
linked_plan_ids_json=json.dumps(session.linked_plan_ids),
|
||||
|
||||
Reference in New Issue
Block a user