diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 168d498..07d09ad 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -1,50 +1,125 @@
name: Bug Report
-description: File a bug report
+description: Report a bug or unexpected behavior in bitssh
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
- Thanks for taking the time to fill out this bug report!
- - type: input
- id: contact
+ Thanks for reporting a bug! Please fill out the sections below to help us reproduce and fix the issue.
+ - type: textarea
+ id: description
attributes:
- label: Contact Details
- description: How can we get in touch with you if we need more info?
- placeholder: ex. email@example.com
+ label: Bug Description
+ description: A clear and concise description of what the bug is.
+ placeholder: "e.g. When I select a host from the TUI, the connection fails with..."
validations:
- required: false
+ required: true
+ - type: textarea
+ id: steps
+ attributes:
+ label: Steps to Reproduce
+ description: How can we reproduce this behavior?
+ placeholder: |
+ 1. Run `bitssh`
+ 2. Select host 'xyz'
+ 3. Press Enter
+ 4. See error
+ validations:
+ required: true
- type: textarea
- id: what-happened
+ id: expected
attributes:
- label: What happened?
- description: Also tell us, what did you expect to happen?
- placeholder: Tell us what you see!
- value: "A bug happened!"
+ label: Expected Behavior
+ description: What did you expect to happen?
+ placeholder: "e.g. I expected bitssh to connect to the selected host"
+ validations:
+ required: true
+ - type: textarea
+ id: actual
+ attributes:
+ label: Actual Behavior
+ description: What actually happened?
+ placeholder: "e.g. Connection timed out, error message shown, etc."
+ validations:
+ required: true
+ - type: input
+ id: bitssh-version
+ attributes:
+ label: bitssh Version
+ description: What version of bitssh are you running?
+ placeholder: "e.g. 3.7.0 (run `pip show bitssh` or `bitssh --version` or check pyproject.toml)"
+ validations:
+ required: true
+ - type: input
+ id: python-version
+ attributes:
+ label: Python Version
+ description: What version of Python are you using?
+ placeholder: "e.g. 3.12.1 (run `python --version`)"
validations:
required: true
- type: dropdown
- id: Operating System's
+ id: os
attributes:
- label: What OS are you seeing the problem on?
- multiple: true
+ label: Operating System
+ description: What OS are you running bitssh on?
options:
- - linux
- - windows
- - Macos
+ - Linux
+ - macOS
+ - Windows (WSL)
+ - Windows (Native)
- Other
+ validations:
+ required: true
+ - type: input
+ id: terminal
+ attributes:
+ label: Terminal Emulator
+ description: Which terminal emulator are you using?
+ placeholder: "e.g. iTerm2, GNOME Terminal, Windows Terminal, Alacritty"
+ validations:
+ required: false
+ - type: textarea
+ id: ssh-config
+ attributes:
+ label: SSH Config (Sanitized)
+ description: |
+ Please share a sanitized version of your `~/.ssh/config` if relevant to the bug.
+ **IMPORTANT: Remove or redact any hostnames, IP addresses, usernames, and keys before sharing!**
+ placeholder: |
+ Host myserver
+ Hostname xxx.xx.xx.xx
+ User myuser
+ Port 22
+ render: shell
+ validations:
+ required: false
- type: textarea
id: logs
attributes:
- label: Relevant log output
- description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
+ label: Relevant Log Output
+ description: Please copy and paste any relevant log output or traceback. This will be automatically formatted as code.
+ placeholder: "Paste the full traceback or error output here"
render: shell
+ validations:
+ required: false
+ - type: checkboxes
+ id: pre-checks
+ attributes:
+ label: Pre-submission Checks
+ options:
+ - label: I am running the latest version of bitssh
+ required: false
+ - label: I have checked that a similar issue does not already exist
+ required: true
+ - label: My `~/.ssh/config` file exists and is properly formatted
+ required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
- description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/FOSS-Community/website-fossc/blob/main/CODE_OF_CONDUCT.md)
+ description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/Mr-Sunglasses/bitssh/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..c5c5337
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Questions & Discussions
+ url: https://github.com/Mr-Sunglasses/bitssh/discussions
+ about: Ask questions and discuss ideas with the community
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
index fb82508..98eb8ed 100644
--- a/.github/ISSUE_TEMPLATE/feature.yml
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -1,41 +1,71 @@
-name: Feature request
-description: Suggest an idea for this project
-title: "[Feature]
"
-labels: "feature"
-
+name: Feature Request
+description: Suggest a new feature or enhancement for bitssh
+title: "[Feature]: "
+labels: ["feature"]
body:
- type: markdown
attributes:
- value: Is your feature request related to a problem? Please describe.
+ value: |
+ Thanks for suggesting a feature! Please describe your idea clearly so we can evaluate it.
- type: textarea
+ id: problem
attributes:
- label: Describe the feature you'd like to request
- description: A clear and concise description of what the problem is.
- placeholder : |
- Ex. I'm always frustrated when [...]
+ label: Problem / Use Case
+ description: What problem does this feature solve? What's your workflow that could be improved?
+ placeholder: |
+ e.g. I manage many SSH hosts and it's hard to find the one I need in the TUI list...
validations:
required: true
- type: textarea
+ id: solution
attributes:
- label: Describe the solution you'd like
- description: A clear and concise description of what you want to happen.
- placeholder : |
- Ex. I want the solution like [...]
+ label: Proposed Solution
+ description: Describe the feature or behavior you'd like to see.
+ placeholder: |
+ e.g. Add a search/filter feature to the TUI so users can quickly find a host by name...
+ validations:
+ required: true
+ - type: dropdown
+ id: feature-area
+ attributes:
+ label: Feature Area
+ description: Which part of bitssh does this feature relate to?
+ options:
+ - TUI (Terminal User Interface)
+ - SSH Connection Handling
+ - SSH Config Parsing
+ - CLI Arguments / Options
+ - Installation / Packaging
+ - Documentation
+ - Other
validations:
required: true
- type: textarea
+ id: alternatives
attributes:
- label: Describe alternatives you've considered
- description: A clear and concise description of any alternative solutions or features you've considered.
- placeholder : |
- Ex. I want to extend the function A by adding someting more
+ label: Alternatives Considered
+ description: Have you considered any alternative solutions or workarounds?
+ placeholder: |
+ e.g. I currently use `grep` on my SSH config, but it would be much nicer to have this built into bitssh...
validations:
required: false
- type: textarea
+ id: additional-context
attributes:
- label: Additional context
- description: Add any other context or screenshots about the feature request here.
- placeholder : |
- context, screenshots, related links , etc.
+ label: Additional Context
+ description: Add any screenshots, mockups, or references to similar features in other tools.
+ placeholder: |
+ e.g. Similar to how `sshmenu` or `sshrc` handles host selection...
validations:
required: false
+ - type: checkboxes
+ id: pre-checks
+ attributes:
+ label: Pre-submission Checks
+ options:
+ - label: I have checked that this feature does not already exist in bitssh
+ required: true
+ - label: I have searched existing issues to ensure this hasn't been requested before
+ required: true
+ - label: This feature would benefit most bitssh users, not just me
+ required: false
\ No newline at end of file
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 0720d9e..ff96cc7 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,38 +1,53 @@
-# Description
+## Description
-Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
+Briefly describe what this PR does and why.
-Fixes # (issue)
+Fixes #(issue)
-## Type of change
+## Type of Change
-Please delete options that are not relevant.
-
-- [ ] Bug fix (non-breaking change which fixes an issue)
-- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Bug fix (non-breaking change that fixes an issue)
+- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
-- [ ] This change requires a documentation update
+- [ ] Refactor (code restructuring without changing behavior)
+- [ ] Documentation update
+- [ ] CI/Build improvement
+
+## Affected Area
+
+- [ ] TUI (Terminal User Interface)
+- [ ] SSH Connection Handling
+- [ ] SSH Config Parsing
+- [ ] CLI Arguments / Options
+- [ ] Installation / Packaging
+- [ ] Tests
+- [ ] Documentation
+
+## Testing
+
+Describe how you tested your changes.
+
+- [ ] I tested manually by running `bitssh` and connecting to a host
+- [ ] I ran the existing test suite (`pytest`)
+- [ ] I added new tests for my changes
-# How Has This Been Tested?
+**Python version tested**:
+**OS tested on**:
-Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
+## SSH Config Tested (if applicable)
-- [ ] Test A
-- [ ] Test B
+If your change affects SSH config parsing or connection behavior, please describe the config entries used for testing (redact sensitive info):
-**Test Configuration**:
-* Firmware version:
-* Hardware:
-* Toolchain:
-* SDK:
+```
+Host example
+ Hostname x.x.x.x
+ User test
+ Port 22
+```
-# Checklist:
+## Checklist
-- [ ] My code follows the style guidelines of this project
-- [ ] I have performed a self-review of my own code
-- [ ] I have commented my code, particularly in hard-to-understand areas
-- [ ] I have made corresponding changes to the documentation
+- [ ] My code follows the project's style guidelines (`ruff` and `black`)
+- [ ] I have performed a self-review of my code
- [ ] My changes generate no new warnings
-- [ ] I have added tests that prove my fix is effective or that my feature works
-- [ ] New and existing unit tests pass locally with my changes
-- [ ] Any dependent changes have been merged and published in downstream modules
+- [ ] I have updated the documentation if needed
\ No newline at end of file
diff --git a/pdm.lock b/pdm.lock
deleted file mode 100644
index 37c858b..0000000
--- a/pdm.lock
+++ /dev/null
@@ -1,293 +0,0 @@
-# This file is @generated by PDM.
-# It is not intended for manual editing.
-
-[metadata]
-groups = ["default"]
-strategy = ["inherit_metadata"]
-lock_version = "4.5.0"
-content_hash = "sha256:76ad143cd32a672da1ddf445caa4edbb270c389e56361d9d552d6389ef36ede4"
-
-[[metadata.targets]]
-requires_python = ">=3.9"
-
-[[package]]
-name = "cfgv"
-version = "3.4.0"
-requires_python = ">=3.8"
-summary = "Validate configuration and produce human readable error messages."
-groups = ["default"]
-files = [
- {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
- {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
-]
-
-[[package]]
-name = "distlib"
-version = "0.3.8"
-summary = "Distribution utilities"
-groups = ["default"]
-files = [
- {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"},
- {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"},
-]
-
-[[package]]
-name = "filelock"
-version = "3.13.1"
-requires_python = ">=3.8"
-summary = "A platform independent file lock."
-groups = ["default"]
-files = [
- {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"},
- {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"},
-]
-
-[[package]]
-name = "identify"
-version = "2.5.33"
-requires_python = ">=3.8"
-summary = "File identification library for Python"
-groups = ["default"]
-files = [
- {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"},
- {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"},
-]
-
-[[package]]
-name = "inquirerpy"
-version = "0.3.4"
-requires_python = ">=3.7,<4.0"
-summary = "Python port of Inquirer.js (A collection of common interactive command-line user interfaces)"
-groups = ["default"]
-dependencies = [
- "pfzy<0.4.0,>=0.3.1",
- "prompt-toolkit<4.0.0,>=3.0.1",
-]
-files = [
- {file = "InquirerPy-0.3.4-py3-none-any.whl", hash = "sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4"},
- {file = "InquirerPy-0.3.4.tar.gz", hash = "sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e"},
-]
-
-[[package]]
-name = "markdown-it-py"
-version = "3.0.0"
-requires_python = ">=3.8"
-summary = "Python port of markdown-it. Markdown parsing, done right!"
-groups = ["default"]
-dependencies = [
- "mdurl~=0.1",
-]
-files = [
- {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
- {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
-]
-
-[[package]]
-name = "mdurl"
-version = "0.1.2"
-requires_python = ">=3.7"
-summary = "Markdown URL utilities"
-groups = ["default"]
-files = [
- {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
- {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
-]
-
-[[package]]
-name = "nodeenv"
-version = "1.8.0"
-requires_python = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
-summary = "Node.js virtual environment builder"
-groups = ["default"]
-dependencies = [
- "setuptools",
-]
-files = [
- {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
- {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
-]
-
-[[package]]
-name = "path"
-version = "17.1.0"
-requires_python = ">=3.9"
-summary = "A module wrapper for os.path"
-groups = ["default"]
-files = [
- {file = "path-17.1.0-py3-none-any.whl", hash = "sha256:688e7ec254f07a1c25f5474662d4480c663a2c8c4eb15c0ba056d8ab81608d22"},
- {file = "path-17.1.0.tar.gz", hash = "sha256:d41e05ed4fa1d4f6d702df3c1e0a1a255d7b544287432456455dc7c51e5f98e9"},
-]
-
-[[package]]
-name = "pfzy"
-version = "0.3.4"
-requires_python = ">=3.7,<4.0"
-summary = "Python port of the fzy fuzzy string matching algorithm"
-groups = ["default"]
-files = [
- {file = "pfzy-0.3.4-py3-none-any.whl", hash = "sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96"},
- {file = "pfzy-0.3.4.tar.gz", hash = "sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1"},
-]
-
-[[package]]
-name = "platformdirs"
-version = "4.1.0"
-requires_python = ">=3.8"
-summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-groups = ["default"]
-files = [
- {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"},
- {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"},
-]
-
-[[package]]
-name = "pre-commit"
-version = "4.2.0"
-requires_python = ">=3.9"
-summary = "A framework for managing and maintaining multi-language pre-commit hooks."
-groups = ["default"]
-dependencies = [
- "cfgv>=2.0.0",
- "identify>=1.0.0",
- "nodeenv>=0.11.1",
- "pyyaml>=5.1",
- "virtualenv>=20.10.0",
-]
-files = [
- {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"},
- {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"},
-]
-
-[[package]]
-name = "prompt-toolkit"
-version = "3.0.50"
-requires_python = ">=3.8.0"
-summary = "Library for building powerful interactive command lines in Python"
-groups = ["default"]
-dependencies = [
- "wcwidth",
-]
-files = [
- {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"},
- {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"},
-]
-
-[[package]]
-name = "pygments"
-version = "2.17.2"
-requires_python = ">=3.7"
-summary = "Pygments is a syntax highlighting package written in Python."
-groups = ["default"]
-files = [
- {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
- {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
-]
-
-[[package]]
-name = "pyyaml"
-version = "6.0.1"
-requires_python = ">=3.6"
-summary = "YAML parser and emitter for Python"
-groups = ["default"]
-files = [
- {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
- {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
- {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
- {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
- {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
- {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
- {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
- {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
- {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
- {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
- {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
- {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
- {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
- {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
- {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
- {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
- {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
- {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
- {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
-]
-
-[[package]]
-name = "rich"
-version = "14.0.0"
-requires_python = ">=3.8.0"
-summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-groups = ["default"]
-dependencies = [
- "markdown-it-py>=2.2.0",
- "pygments<3.0.0,>=2.13.0",
- "typing-extensions<5.0,>=4.0.0; python_version < \"3.11\"",
-]
-files = [
- {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"},
- {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"},
-]
-
-[[package]]
-name = "setuptools"
-version = "69.0.3"
-requires_python = ">=3.8"
-summary = "Easily download, build, install, upgrade, and uninstall Python packages"
-groups = ["default"]
-files = [
- {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"},
- {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"},
-]
-
-[[package]]
-name = "typing-extensions"
-version = "4.13.2"
-requires_python = ">=3.8"
-summary = "Backported and Experimental Type Hints for Python 3.8+"
-groups = ["default"]
-marker = "python_version < \"3.11\""
-files = [
- {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"},
- {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"},
-]
-
-[[package]]
-name = "virtualenv"
-version = "20.25.0"
-requires_python = ">=3.7"
-summary = "Virtual Python Environment builder"
-groups = ["default"]
-dependencies = [
- "distlib<1,>=0.3.7",
- "filelock<4,>=3.12.2",
- "importlib-metadata>=6.6; python_version < \"3.8\"",
- "platformdirs<5,>=3.9.1",
-]
-files = [
- {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"},
- {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"},
-]
-
-[[package]]
-name = "wcwidth"
-version = "0.2.13"
-summary = "Measures the displayed width of unicode strings in a terminal"
-groups = ["default"]
-dependencies = [
- "backports-functools-lru-cache>=1.2.1; python_version < \"3.2\"",
-]
-files = [
- {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
- {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
-]