34f773c90a
CI / lint (pull_request) Successful in 26s
CI / typecheck (pull_request) Successful in 51s
CI / quality (pull_request) Successful in 33s
CI / security (pull_request) Successful in 1m1s
CI / build (pull_request) Successful in 28s
CI / helm (pull_request) Successful in 24s
CI / unit_tests (pull_request) Failing after 6m52s
CI / docker (pull_request) Has been skipped
CI / e2e_tests (pull_request) Successful in 16m23s
CI / integration_tests (pull_request) Failing after 23m3s
CI / coverage (pull_request) Successful in 10m45s
CI / status-check (pull_request) Failing after 1s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Successful in 56m43s
Implements the three Rich panels required by specification.md §"agents session export"
(lines 1987–2115) that were missing from the export_session() command.
Changes:
- Add _render_export_panels() helper that renders three spec-required panels:
* "Session Export" panel: session ID, output path, message count, file size, format
* "Contents" panel: messages, plan references, metadata keys, actor config, schema version
* "Integrity" panel: checksum (sha256:xxxx...xxxx), encrypted flag
- Fix success message from "Session exported to {output}" to "Export completed"
- Fix stdout export path to also render Rich panels (previously only printed raw JSON)
- Keep --format and --force options (useful extensions, do not break spec compliance)
- Update Behave scenarios in features/session_cli.feature to verify panel rendering
- Update Robot Framework helper and test file with new export panel assertions
ISSUES CLOSED: #3424
179 lines
7.5 KiB
Gherkin
179 lines
7.5 KiB
Gherkin
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"
|
|
|
|
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"
|