Skip to content

[draft] feat: Introduce a Terminal UI that can browse job, step, task and attachments.#997

Draft
leongdl wants to merge 2 commits intoaws-deadline:mainlinefrom
leongdl:TUI
Draft

[draft] feat: Introduce a Terminal UI that can browse job, step, task and attachments.#997
leongdl wants to merge 2 commits intoaws-deadline:mainlinefrom
leongdl:TUI

Conversation

@leongdl
Copy link
Contributor

@leongdl leongdl commented Feb 10, 2026

Fixes: N/A — new feature

What was the problem/requirement? (What/Why)

There is no terminal-based way to interactively browse Deadline Cloud jobs, steps, tasks, sessions, and attachments. Users must rely on the AWS console or run multiple CLI commands manually to navigate the job hierarchy. The existing deadline browse command only covers attachment browsing for a single job.

This PR adds deadline job tui, an interactive terminal UI that lets users drill through the full job → step → task hierarchy, view sessions, and browse/download job attachments — all from a single command.

The TUI is gated behind an optional [tui] extra. If a user runs deadline job tui without it installed, they get a clear error:

Error: The TUI requires the 'rich' package. Install it with: pip install 'deadline[tui]'

What was the solution? (How)

Added a new deadline job tui subcommand with a rich-based terminal UI. The implementation is organized as:

  • src/deadline/client/cli/_groups/_job_tui/_common.py — shared rendering utilities (header, help bar, status icons, key input, screen management)
  • src/deadline/client/cli/_groups/_job_tui/_job_list.py — paginated job list browser
  • src/deadline/client/cli/_groups/_job_tui/_step_list.py — paginated step list browser
  • src/deadline/client/cli/_groups/_job_tui/_task_list.py — paginated task list browser
  • src/deadline/client/cli/_groups/_job_tui/_session_list.py — session list for a task
  • src/deadline/client/cli/_groups/_job_tui/_attachment_browser.py — file tree browser for job/task attachments
  • src/deadline/client/cli/_groups/job_group.pytui command registration and orchestration loops
  • src/deadline/client/cli/_groups/browse_group.py — existing deadline browse entry point (updated to share code)

Navigation: ↑/↓ to browse, →/Enter to drill in, ←/Esc to go back, a for attachments, l for sessions, c to copy IDs, n/p for pagination, q to quit.

The rich dependency is optional via pip install 'deadline[tui]' and is lazily imported — the rest of the CLI works without it.

What is the impact of this change?

  • New CLI subcommand: deadline job tui
  • New optional dependency: rich >= 13.0 (only when [tui] extra is installed)
    • RICH is MIT license, and works well with Deadline's license.
  • No changes to existing CLI commands or public Python API
  • The existing deadline browse command continues to work as before

How was this change tested?

See DEVELOPMENT.md for information on running tests.

  • Have you run the unit tests? Yes
  • Have you run the integration tests? No (this feature is CLI-only, no new AWS API calls)
  • Have you made changes to the download or asset_sync modules? No

Unit tests added:

  • test/unit/deadline_client/cli/test_cli_job_tui_common.py
  • test/unit/deadline_client/cli/test_cli_job_tui_job_list.py
  • test/unit/deadline_client/cli/test_cli_job_tui_step_list.py
  • test/unit/deadline_client/cli/test_cli_job_tui_task_list.py
  • test/unit/deadline_client/cli/test_cli_job_tui_session_list.py
  • test/unit/deadline_client/cli/test_cli_job_tui_attachment_browser.py

Manual testing with the branch

To test this locally against the feature branch:

# 1. Create and activate a fresh virtual environment
python3 -m venv ~/venvs/deadline-tui-test
source ~/venvs/deadline-tui-test/bin/activate

# 2. Clone the branch and install with the [tui] extra
git clone https://github.com/leongdl/deadline-cloud.git
pip install -e "deadline-cloud[tui]"

# 3. Configure your AWS credentials and Deadline defaults if not already set
deadline config set defaults.aws_profile_name <your-profile>
deadline config set defaults.farm_id <your-farm-id>
deadline config set defaults.queue_id <your-queue-id>

# 4. Launch the TUI
deadline job tui
deadline job tui --farm-id farm-fd8e9a84d9c04142848c6ea56c9d7568 --queue-id queue-2eb8ef58ce5d48d1bbaf3e2f65ea2c38

# 5. Verify the error message when [tui] is NOT installed
deactivate
python3 -m venv ~/venvs/deadline-no-tui-test
source ~/venvs/deadline-no-tui-test/bin/activate
pip install -e "deadline-cloud"
deadline job tui
# Expected output:
#   Error: The TUI requires the 'rich' package. Install it with: pip install 'deadline[tui]'

# 6. Run unit tests
source ~/venvs/deadline-tui-test/bin/activate
cd deadline-cloud
hatch run test --numprocesses=1 -k "job_tui"

# 7. Clean up
deactivate
rm -rf ~/venvs/deadline-tui-test ~/venvs/deadline-no-tui-test

Was this change documented?

  • Are relevant docstrings in the code base updated? Yes — all new modules and classes have docstrings.
  • Has the README.md been updated? No — the TUI is discoverable via deadline job tui --help. Design docs added under docs/design/.

Does this PR introduce new dependencies?

  • This PR adds one or more new dependency Python packages. I acknowledge I have reviewed the considerations for adding dependencies in DEVELOPMENT.md.
  • This PR does not add any new dependencies.

New optional dependency: rich >= 13.0 — only installed when the user opts in via pip install 'deadline[tui]'. It is not added to the core dependencies list, so it has zero impact on users who don't use the TUI. rich is a well-maintained, widely-used library (200M+ monthly downloads, MIT license).

Is this a breaking change?

No. This is a purely additive feature — a new subcommand (deadline job tui) behind an optional extra. No existing commands, APIs, or defaults are changed.

Does this change impact security?

No. The TUI reads data via existing Deadline Cloud API calls using the user's configured credentials. No new file/directory creation patterns, no new network endpoints, no privilege escalation.

Screenshots!

Job -> Step -> Task -> Job Attachments -> Input | output -> Preview

Screenshot 2026-02-13 at 4 55 14 PM Screenshot 2026-02-13 at 4 55 21 PM Screenshot 2026-02-13 at 4 55 28 PM Screenshot 2026-02-13 at 4 55 41 PM Screenshot 2026-02-13 at
<img width= 4 55 53 PM" src="https://github.com/user-attachments/assets/05c87b5a-5145-4bb6-9335-467543a129a7" />

@leongdl leongdl changed the title feat: Introduce a Terminal UI that can browse job, step, task and attachments. [draft] feat: Introduce a Terminal UI that can browse job, step, task and attachments. Feb 10, 2026
@github-actions github-actions bot added the waiting-on-maintainers Waiting on the maintainers to review. label Feb 10, 2026
try:
if webbrowser.open(FEEDBACK_URL):
return f"🌐 Opened {FEEDBACK_URL}"
except Exception:

Check notice

Code scanning / CodeQL

Empty except Note

'except' clause does nothing but pass and there is no explanatory comment.
@leongdl leongdl force-pushed the TUI branch 5 times, most recently from 164cd95 to 3047909 Compare February 13, 2026 06:36
…tui]

Signed-off-by: David Leong <116610336+leongdl@users.noreply.github.com>
Signed-off-by: David Leong <116610336+leongdl@users.noreply.github.com>
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
8 Security Hotspots

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on-maintainers Waiting on the maintainers to review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments