Feature: Session CLI commands
  As a developer
  I want to manage sessions via CLI commands
  So that I can create and use persistent conversation threads

  Background:
    Given a session CLI runner with mocked service

  # Create command tests
  Scenario: Create session with defaults
    When I run session CLI create with no arguments
    Then the session CLI create should succeed
    And the session CLI output should contain "Session created"

  Scenario: Create session with custom actor
    When I run session CLI create with --actor "openai/gpt-4"
    Then the session CLI create should succeed
    And the session CLI output should contain "openai/gpt-4"

  Scenario: Create session with JSON format
    When I run session CLI create with --format json
    Then the session CLI create should succeed
    And the session CLI output should be valid JSON

  # List command tests
  Scenario: List sessions when empty
    Given there are no mocked sessions
    When I run session CLI list
    Then the session CLI output should contain "No sessions found"

  Scenario: List sessions with populated data
    Given there are mocked existing sessions
    When I run session CLI list
    Then the session CLI should show all sessions in a table

  Scenario: List sessions with JSON format
    Given there are mocked existing sessions
    When I run session CLI list with --format json
    Then the session CLI output should be valid JSON
    And the session CLI JSON should contain "sessions"

  # Show command tests
  Scenario: Show session with valid ID
    Given there is a mocked session with messages
    When I run session CLI show with a valid session ID
    Then the session CLI show should succeed
    And the session CLI output should contain "Session Summary"
    And the session CLI output should contain "ID:"
    And the session CLI output should contain "Actor:"
    And the session CLI output should contain "Messages:"
    And the session CLI output should contain "Created:"
    And the session CLI output should contain "Updated:"
    And the session CLI output should contain "Automation:"
    And the session CLI output should not contain "Session ID:"
    And the session CLI output should not contain "Namespace:"

  Scenario: Show session with JSON format
    Given there is a mocked session with messages
    When I run session CLI show with --format json
    Then the session CLI output should be valid JSON

  Scenario: Show session with invalid ID
    When I run session CLI show with an invalid session ID
    Then the session CLI should exit with error
    And the session CLI output should contain "Session not found"

  # Delete command tests
  Scenario: Delete session with --yes flag
    Given there is a mocked session to delete
    When I run session CLI delete with --yes
    Then the session CLI delete should succeed
    And the session CLI output should contain "deleted"

  Scenario: Delete non-existent session
    When I run session CLI delete with a non-existent ID
    Then the session CLI should exit with error
    And the session CLI output should contain "Session not found"

  # Export command tests
  Scenario: Export session to stdout renders Rich panels
    Given there is a mocked session for export
    When I run session CLI export with no output file
    Then the session CLI export should succeed
    And the session CLI output should contain "Session Export"
    And the session CLI output should contain "Contents"
    And the session CLI output should contain "Integrity"
    And the session CLI output should contain "Export completed"

  Scenario: Export session to file renders Rich panels
    Given there is a mocked session for export
    When I run session CLI export with --output to a temp file
    Then the session CLI export should succeed
    And the exported file should exist
    And the session CLI output should contain "Session Export"
    And the session CLI output should contain "Contents"
    And the session CLI output should contain "Integrity"
    And the session CLI output should contain "Export completed"

  Scenario: Export session to file shows correct output path in panel
    Given there is a mocked session for export
    When I run session CLI export with --output to a temp file
    Then the session CLI export should succeed
    And the session CLI output should contain "Output:"

  Scenario: Export session to stdout shows stdout indicator in panel
    Given there is a mocked session for export
    When I run session CLI export with no output file
    Then the session CLI export should succeed
    And the session CLI output should contain "(stdout)"

  Scenario: Export refuses overwrite without --force
    Given there is a mocked session for export
    And there is an existing export file
    When I run session CLI export to an existing file without --force
    Then the session CLI should exit with error
    And the session CLI output should contain "File already exists"

  Scenario: Export with --force overwrites file
    Given there is a mocked session for export
    And there is an existing export file
    When I run session CLI export to an existing file with --force
    Then the session CLI export should succeed
    And the session CLI output should contain "Export completed"

  Scenario: Export non-existent session
    When I run session CLI export with a non-existent session ID
    Then the session CLI should exit with error
    And the session CLI output should contain "Session not found"

  # Import command tests
  Scenario: Import session from valid file
    Given there is a valid session export file
    When I run session CLI import with the export file
    Then the session CLI import should succeed
    And the session CLI output should contain "Session Import"
    And the session CLI output should contain "Validation"
    And the session CLI output should contain "Merge"
    And the session CLI output should contain "Import completed"

  Scenario: Import session shows correct panel fields
    Given there is a valid session export file
    When I run session CLI import with the export file
    Then the session CLI import should succeed
    And the session CLI output should contain "Input:"
    And the session CLI output should contain "Session ID:"
    And the session CLI output should contain "Messages:"
    And the session CLI output should contain "Schema:"
    And the session CLI output should contain "Checksum:"
    And the session CLI output should contain "Actor Ref:"
    And the session CLI output should contain "Existing:"
    And the session CLI output should contain "Strategy:"

  Scenario: Import from non-existent file
    When I run session CLI import with a non-existent file
    Then the session CLI should exit with error
    And the session CLI output should contain "File not found"

  Scenario: Import from corrupt file
    Given there is a corrupt session export file
    When I run session CLI import with the corrupt file
    Then the session CLI should exit with error
    And the session CLI output should contain "Import error"

  Scenario: Import from invalid JSON file
    Given there is an invalid JSON file
    When I run session CLI import with the invalid JSON file
    Then the session CLI should exit with error
    And the session CLI output should contain "Invalid JSON"

  # Tell command tests
  Scenario: Tell appends message to session
    Given there is a mocked session for tell
    When I run session CLI tell with a prompt "Hello, world"
    Then the session CLI tell should succeed
    And the session CLI output should contain "Acknowledged"

  Scenario: Tell with custom actor
    Given there is a mocked session for tell
    When I run session CLI tell with --actor "openai/gpt-4" and prompt "Plan a feature"
    Then the session CLI tell should succeed
    And the session CLI output should contain "openai/gpt-4"

  Scenario: Tell to non-existent session
    When I run session CLI tell to a non-existent session
    Then the session CLI should exit with error
    And the session CLI output should contain "Session not found"
