passvault-cli-tool 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. passvault_cli_tool-1.0.0/LICENSE +21 -0
  2. passvault_cli_tool-1.0.0/MANIFEST.in +4 -0
  3. passvault_cli_tool-1.0.0/PKG-INFO +166 -0
  4. passvault_cli_tool-1.0.0/README.md +139 -0
  5. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/PKG-INFO +166 -0
  6. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/SOURCES.txt +34 -0
  7. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/dependency_links.txt +1 -0
  8. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/entry_points.txt +2 -0
  9. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/requires.txt +11 -0
  10. passvault_cli_tool-1.0.0/passvault_cli_tool.egg-info/top_level.txt +3 -0
  11. passvault_cli_tool-1.0.0/passvault_core/clipboard.py +206 -0
  12. passvault_cli_tool-1.0.0/passvault_core/crypto.py +59 -0
  13. passvault_cli_tool-1.0.0/passvault_core/errors.py +11 -0
  14. passvault_cli_tool-1.0.0/passvault_core/schema.py +96 -0
  15. passvault_cli_tool-1.0.0/passvault_core/storage.py +134 -0
  16. passvault_cli_tool-1.0.0/passvault_core/tests/test_clipboard.py +383 -0
  17. passvault_cli_tool-1.0.0/passvault_core/tests/test_crypto.py +198 -0
  18. passvault_cli_tool-1.0.0/passvault_core/tests/test_schema.py +175 -0
  19. passvault_cli_tool-1.0.0/passvault_core/tests/test_storage.py +186 -0
  20. passvault_cli_tool-1.0.0/passvault_tui/__init__.py +3 -0
  21. passvault_cli_tool-1.0.0/passvault_tui/app.py +399 -0
  22. passvault_cli_tool-1.0.0/passvault_tui/screens/__init__.py +1 -0
  23. passvault_cli_tool-1.0.0/passvault_tui/style.css +413 -0
  24. passvault_cli_tool-1.0.0/passvault_tui/utils/__init__.py +1 -0
  25. passvault_cli_tool-1.0.0/passvault_tui/widgets/__init__.py +19 -0
  26. passvault_cli_tool-1.0.0/passvault_tui/widgets/add_credential_panel.py +116 -0
  27. passvault_cli_tool-1.0.0/passvault_tui/widgets/add_vault_panel.py +69 -0
  28. passvault_cli_tool-1.0.0/passvault_tui/widgets/credential_panel.py +73 -0
  29. passvault_cli_tool-1.0.0/passvault_tui/widgets/delete_vault_panel.py +57 -0
  30. passvault_cli_tool-1.0.0/passvault_tui/widgets/export_vault_panel.py +73 -0
  31. passvault_cli_tool-1.0.0/passvault_tui/widgets/import_vault_panel.py +72 -0
  32. passvault_cli_tool-1.0.0/passvault_tui/widgets/master_password_panel.py +48 -0
  33. passvault_cli_tool-1.0.0/pyproject.toml +44 -0
  34. passvault_cli_tool-1.0.0/setup.cfg +4 -0
  35. passvault_cli_tool-1.0.0/utils/__init__.py +4 -0
  36. passvault_cli_tool-1.0.0/utils/logger.py +58 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Senume
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ include passvault_tui/style.css
2
+ recursive-include passvault_tui/widgets *.py
3
+ recursive-include passvault_core *.py
4
+ recursive-include utils *.py
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: passvault-cli-tool
3
+ Version: 1.0.0
4
+ Summary: A local-first TUI password manager for Linux.
5
+ Author: Senume
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Senume/PassVault
8
+ Keywords: password-manager,tui,cli,security
9
+ Classifier: Environment :: Console
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Topic :: Security
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: cryptography>=41.0
17
+ Requires-Dist: argon2-cffi>=23.0
18
+ Requires-Dist: appdirs>=1.4
19
+ Requires-Dist: textual>=0.60
20
+ Requires-Dist: rich>=13.0
21
+ Requires-Dist: pydantic>=2.0
22
+ Requires-Dist: httpx>=0.27
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest; extra == "dev"
25
+ Requires-Dist: pytest-asyncio; extra == "dev"
26
+ Dynamic: license-file
27
+
28
+ # 🔐 PassVault
29
+
30
+ A local TUI (Terminal User Interface) password manager for Linux.
31
+ Credentials are encrypted with **Argon2id + AES-GCM** and never leave your machine.
32
+
33
+ ---
34
+
35
+ ## Features
36
+
37
+ | Key | Action |
38
+ |-----|--------|
39
+ | `/` | Open vault selector overlay |
40
+ | `n` | Create a new vault |
41
+ | `g` | Add a new credential to the current vault |
42
+ | `f` | Search credentials by name |
43
+ | `e` | Export current vault as an encrypted `.pvault` archive |
44
+ | `i` | Import a vault from a `.pvault` archive |
45
+ | `ctrl+d` | Delete the current vault (requires typing vault name) |
46
+ | `ctrl+g` | Auto-generate a strong password (inside Add Credential panel) |
47
+ | `ctrl+v` | Paste from clipboard into any input field |
48
+
49
+ ---
50
+
51
+ ## Requirements
52
+
53
+ ### System dependency
54
+ PassVault uses `xclip` for clipboard operations:
55
+ ```bash
56
+ sudo apt install xclip # Debian / Ubuntu
57
+ sudo pacman -S xclip # Arch
58
+ sudo dnf install xclip # Fedora
59
+ ```
60
+
61
+ ### Python
62
+ - Python **3.10+**
63
+
64
+ ---
65
+
66
+ ## Installation
67
+
68
+ ### From PyPI
69
+ ```bash
70
+ pip install passvault
71
+ ```
72
+
73
+ ### From source
74
+ ```bash
75
+ git clone https://github.com/Senume/PassVault.git
76
+ cd PassVault
77
+ pip install -e .
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Running
83
+
84
+ ```bash
85
+ passvault
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Data & log paths
91
+
92
+ PassVault resolves paths in priority order:
93
+
94
+ | | System path (root) | User fallback | Env override |
95
+ |---|---|---|---|
96
+ | **Vaults** | `/etc/passvault/vaults` | `~/.local/share/passvault/vaults` | `$PASSVAULT` |
97
+ | **Logs** | `/var/log/passvault/passvault.log` | `~/.local/state/passvault/passvault.log` | `$PASSVAULT_LOG` |
98
+
99
+ Directories are created automatically on first run.
100
+
101
+ > To grant your user write access to the system paths:
102
+ > ```bash
103
+ > sudo mkdir -p /etc/passvault/vaults /var/log/passvault
104
+ > sudo chown -R $USER /etc/passvault /var/log/passvault
105
+ > ```
106
+
107
+ ---
108
+
109
+ ## Usage walkthrough
110
+
111
+ ### 1 — Create a vault
112
+ Press `n`, enter a vault name and master password (confirmed twice). Press `Enter`.
113
+
114
+ ### 2 — Add credentials
115
+ Press `g` (a vault must be selected first via `/`).
116
+ Fill in **Name**, **Username**, **Password** — or press `Ctrl+G` to auto-generate a strong password.
117
+ Press `Enter` to confirm, then enter the vault master password.
118
+
119
+ ### 3 — View credentials
120
+ Select a credential from the list and press `Enter`.
121
+ Enter the master password to unlock.
122
+ Press `c` to copy the username or `p` to copy the password to clipboard.
123
+ Press `Esc` to close.
124
+
125
+ ### 4 — Search
126
+ Press `f` to focus the search bar. Type to filter credentials by name in real time. Press `Esc` to clear.
127
+
128
+ ### 5 — Export / Import
129
+ - **Export** (`e`): saves the current vault as an encrypted `.pvault` zip to a path you specify (default: `~/PassVault_exports/`).
130
+ - **Import** (`i`): restores a vault from a `.pvault` file path.
131
+
132
+ The archive keeps credentials AES-GCM encrypted — no master password is needed for the transfer itself.
133
+
134
+ ### 6 — Delete a vault
135
+ Press `Ctrl+D`, then type the vault name exactly to confirm permanent deletion.
136
+
137
+ ---
138
+
139
+ ## Security
140
+
141
+ - **KDF**: Argon2id (time cost 3, memory 64 MB, parallelism 1)
142
+ - **Encryption**: AES-256-GCM per credential — each `.ptr` file is independently encrypted
143
+ - **Master password**: never stored; derived key exists only in memory during a session
144
+ - **Clipboard**: copy operations use `xclip`; clear the clipboard manually after use
145
+
146
+ ---
147
+
148
+ ## Development
149
+
150
+ ```bash
151
+ git clone https://github.com/Senume/PassVault.git
152
+ cd PassVault
153
+ pip install -e ".[dev]"
154
+
155
+ # Run tests
156
+ PYTHONPATH=$PWD pytest -q
157
+
158
+ # Run the app
159
+ PASSVAULT=data passvault
160
+ ```
161
+
162
+ ---
163
+
164
+ ## License
165
+
166
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,139 @@
1
+ # 🔐 PassVault
2
+
3
+ A local TUI (Terminal User Interface) password manager for Linux.
4
+ Credentials are encrypted with **Argon2id + AES-GCM** and never leave your machine.
5
+
6
+ ---
7
+
8
+ ## Features
9
+
10
+ | Key | Action |
11
+ |-----|--------|
12
+ | `/` | Open vault selector overlay |
13
+ | `n` | Create a new vault |
14
+ | `g` | Add a new credential to the current vault |
15
+ | `f` | Search credentials by name |
16
+ | `e` | Export current vault as an encrypted `.pvault` archive |
17
+ | `i` | Import a vault from a `.pvault` archive |
18
+ | `ctrl+d` | Delete the current vault (requires typing vault name) |
19
+ | `ctrl+g` | Auto-generate a strong password (inside Add Credential panel) |
20
+ | `ctrl+v` | Paste from clipboard into any input field |
21
+
22
+ ---
23
+
24
+ ## Requirements
25
+
26
+ ### System dependency
27
+ PassVault uses `xclip` for clipboard operations:
28
+ ```bash
29
+ sudo apt install xclip # Debian / Ubuntu
30
+ sudo pacman -S xclip # Arch
31
+ sudo dnf install xclip # Fedora
32
+ ```
33
+
34
+ ### Python
35
+ - Python **3.10+**
36
+
37
+ ---
38
+
39
+ ## Installation
40
+
41
+ ### From PyPI
42
+ ```bash
43
+ pip install passvault
44
+ ```
45
+
46
+ ### From source
47
+ ```bash
48
+ git clone https://github.com/Senume/PassVault.git
49
+ cd PassVault
50
+ pip install -e .
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Running
56
+
57
+ ```bash
58
+ passvault
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Data & log paths
64
+
65
+ PassVault resolves paths in priority order:
66
+
67
+ | | System path (root) | User fallback | Env override |
68
+ |---|---|---|---|
69
+ | **Vaults** | `/etc/passvault/vaults` | `~/.local/share/passvault/vaults` | `$PASSVAULT` |
70
+ | **Logs** | `/var/log/passvault/passvault.log` | `~/.local/state/passvault/passvault.log` | `$PASSVAULT_LOG` |
71
+
72
+ Directories are created automatically on first run.
73
+
74
+ > To grant your user write access to the system paths:
75
+ > ```bash
76
+ > sudo mkdir -p /etc/passvault/vaults /var/log/passvault
77
+ > sudo chown -R $USER /etc/passvault /var/log/passvault
78
+ > ```
79
+
80
+ ---
81
+
82
+ ## Usage walkthrough
83
+
84
+ ### 1 — Create a vault
85
+ Press `n`, enter a vault name and master password (confirmed twice). Press `Enter`.
86
+
87
+ ### 2 — Add credentials
88
+ Press `g` (a vault must be selected first via `/`).
89
+ Fill in **Name**, **Username**, **Password** — or press `Ctrl+G` to auto-generate a strong password.
90
+ Press `Enter` to confirm, then enter the vault master password.
91
+
92
+ ### 3 — View credentials
93
+ Select a credential from the list and press `Enter`.
94
+ Enter the master password to unlock.
95
+ Press `c` to copy the username or `p` to copy the password to clipboard.
96
+ Press `Esc` to close.
97
+
98
+ ### 4 — Search
99
+ Press `f` to focus the search bar. Type to filter credentials by name in real time. Press `Esc` to clear.
100
+
101
+ ### 5 — Export / Import
102
+ - **Export** (`e`): saves the current vault as an encrypted `.pvault` zip to a path you specify (default: `~/PassVault_exports/`).
103
+ - **Import** (`i`): restores a vault from a `.pvault` file path.
104
+
105
+ The archive keeps credentials AES-GCM encrypted — no master password is needed for the transfer itself.
106
+
107
+ ### 6 — Delete a vault
108
+ Press `Ctrl+D`, then type the vault name exactly to confirm permanent deletion.
109
+
110
+ ---
111
+
112
+ ## Security
113
+
114
+ - **KDF**: Argon2id (time cost 3, memory 64 MB, parallelism 1)
115
+ - **Encryption**: AES-256-GCM per credential — each `.ptr` file is independently encrypted
116
+ - **Master password**: never stored; derived key exists only in memory during a session
117
+ - **Clipboard**: copy operations use `xclip`; clear the clipboard manually after use
118
+
119
+ ---
120
+
121
+ ## Development
122
+
123
+ ```bash
124
+ git clone https://github.com/Senume/PassVault.git
125
+ cd PassVault
126
+ pip install -e ".[dev]"
127
+
128
+ # Run tests
129
+ PYTHONPATH=$PWD pytest -q
130
+
131
+ # Run the app
132
+ PASSVAULT=data passvault
133
+ ```
134
+
135
+ ---
136
+
137
+ ## License
138
+
139
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: passvault-cli-tool
3
+ Version: 1.0.0
4
+ Summary: A local-first TUI password manager for Linux.
5
+ Author: Senume
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Senume/PassVault
8
+ Keywords: password-manager,tui,cli,security
9
+ Classifier: Environment :: Console
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Topic :: Security
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: cryptography>=41.0
17
+ Requires-Dist: argon2-cffi>=23.0
18
+ Requires-Dist: appdirs>=1.4
19
+ Requires-Dist: textual>=0.60
20
+ Requires-Dist: rich>=13.0
21
+ Requires-Dist: pydantic>=2.0
22
+ Requires-Dist: httpx>=0.27
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest; extra == "dev"
25
+ Requires-Dist: pytest-asyncio; extra == "dev"
26
+ Dynamic: license-file
27
+
28
+ # 🔐 PassVault
29
+
30
+ A local TUI (Terminal User Interface) password manager for Linux.
31
+ Credentials are encrypted with **Argon2id + AES-GCM** and never leave your machine.
32
+
33
+ ---
34
+
35
+ ## Features
36
+
37
+ | Key | Action |
38
+ |-----|--------|
39
+ | `/` | Open vault selector overlay |
40
+ | `n` | Create a new vault |
41
+ | `g` | Add a new credential to the current vault |
42
+ | `f` | Search credentials by name |
43
+ | `e` | Export current vault as an encrypted `.pvault` archive |
44
+ | `i` | Import a vault from a `.pvault` archive |
45
+ | `ctrl+d` | Delete the current vault (requires typing vault name) |
46
+ | `ctrl+g` | Auto-generate a strong password (inside Add Credential panel) |
47
+ | `ctrl+v` | Paste from clipboard into any input field |
48
+
49
+ ---
50
+
51
+ ## Requirements
52
+
53
+ ### System dependency
54
+ PassVault uses `xclip` for clipboard operations:
55
+ ```bash
56
+ sudo apt install xclip # Debian / Ubuntu
57
+ sudo pacman -S xclip # Arch
58
+ sudo dnf install xclip # Fedora
59
+ ```
60
+
61
+ ### Python
62
+ - Python **3.10+**
63
+
64
+ ---
65
+
66
+ ## Installation
67
+
68
+ ### From PyPI
69
+ ```bash
70
+ pip install passvault
71
+ ```
72
+
73
+ ### From source
74
+ ```bash
75
+ git clone https://github.com/Senume/PassVault.git
76
+ cd PassVault
77
+ pip install -e .
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Running
83
+
84
+ ```bash
85
+ passvault
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Data & log paths
91
+
92
+ PassVault resolves paths in priority order:
93
+
94
+ | | System path (root) | User fallback | Env override |
95
+ |---|---|---|---|
96
+ | **Vaults** | `/etc/passvault/vaults` | `~/.local/share/passvault/vaults` | `$PASSVAULT` |
97
+ | **Logs** | `/var/log/passvault/passvault.log` | `~/.local/state/passvault/passvault.log` | `$PASSVAULT_LOG` |
98
+
99
+ Directories are created automatically on first run.
100
+
101
+ > To grant your user write access to the system paths:
102
+ > ```bash
103
+ > sudo mkdir -p /etc/passvault/vaults /var/log/passvault
104
+ > sudo chown -R $USER /etc/passvault /var/log/passvault
105
+ > ```
106
+
107
+ ---
108
+
109
+ ## Usage walkthrough
110
+
111
+ ### 1 — Create a vault
112
+ Press `n`, enter a vault name and master password (confirmed twice). Press `Enter`.
113
+
114
+ ### 2 — Add credentials
115
+ Press `g` (a vault must be selected first via `/`).
116
+ Fill in **Name**, **Username**, **Password** — or press `Ctrl+G` to auto-generate a strong password.
117
+ Press `Enter` to confirm, then enter the vault master password.
118
+
119
+ ### 3 — View credentials
120
+ Select a credential from the list and press `Enter`.
121
+ Enter the master password to unlock.
122
+ Press `c` to copy the username or `p` to copy the password to clipboard.
123
+ Press `Esc` to close.
124
+
125
+ ### 4 — Search
126
+ Press `f` to focus the search bar. Type to filter credentials by name in real time. Press `Esc` to clear.
127
+
128
+ ### 5 — Export / Import
129
+ - **Export** (`e`): saves the current vault as an encrypted `.pvault` zip to a path you specify (default: `~/PassVault_exports/`).
130
+ - **Import** (`i`): restores a vault from a `.pvault` file path.
131
+
132
+ The archive keeps credentials AES-GCM encrypted — no master password is needed for the transfer itself.
133
+
134
+ ### 6 — Delete a vault
135
+ Press `Ctrl+D`, then type the vault name exactly to confirm permanent deletion.
136
+
137
+ ---
138
+
139
+ ## Security
140
+
141
+ - **KDF**: Argon2id (time cost 3, memory 64 MB, parallelism 1)
142
+ - **Encryption**: AES-256-GCM per credential — each `.ptr` file is independently encrypted
143
+ - **Master password**: never stored; derived key exists only in memory during a session
144
+ - **Clipboard**: copy operations use `xclip`; clear the clipboard manually after use
145
+
146
+ ---
147
+
148
+ ## Development
149
+
150
+ ```bash
151
+ git clone https://github.com/Senume/PassVault.git
152
+ cd PassVault
153
+ pip install -e ".[dev]"
154
+
155
+ # Run tests
156
+ PYTHONPATH=$PWD pytest -q
157
+
158
+ # Run the app
159
+ PASSVAULT=data passvault
160
+ ```
161
+
162
+ ---
163
+
164
+ ## License
165
+
166
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,34 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ passvault_cli_tool.egg-info/PKG-INFO
6
+ passvault_cli_tool.egg-info/SOURCES.txt
7
+ passvault_cli_tool.egg-info/dependency_links.txt
8
+ passvault_cli_tool.egg-info/entry_points.txt
9
+ passvault_cli_tool.egg-info/requires.txt
10
+ passvault_cli_tool.egg-info/top_level.txt
11
+ passvault_core/clipboard.py
12
+ passvault_core/crypto.py
13
+ passvault_core/errors.py
14
+ passvault_core/schema.py
15
+ passvault_core/storage.py
16
+ passvault_core/tests/test_clipboard.py
17
+ passvault_core/tests/test_crypto.py
18
+ passvault_core/tests/test_schema.py
19
+ passvault_core/tests/test_storage.py
20
+ passvault_tui/__init__.py
21
+ passvault_tui/app.py
22
+ passvault_tui/style.css
23
+ passvault_tui/screens/__init__.py
24
+ passvault_tui/utils/__init__.py
25
+ passvault_tui/widgets/__init__.py
26
+ passvault_tui/widgets/add_credential_panel.py
27
+ passvault_tui/widgets/add_vault_panel.py
28
+ passvault_tui/widgets/credential_panel.py
29
+ passvault_tui/widgets/delete_vault_panel.py
30
+ passvault_tui/widgets/export_vault_panel.py
31
+ passvault_tui/widgets/import_vault_panel.py
32
+ passvault_tui/widgets/master_password_panel.py
33
+ utils/__init__.py
34
+ utils/logger.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ passvault = passvault_tui.app:run
@@ -0,0 +1,11 @@
1
+ cryptography>=41.0
2
+ argon2-cffi>=23.0
3
+ appdirs>=1.4
4
+ textual>=0.60
5
+ rich>=13.0
6
+ pydantic>=2.0
7
+ httpx>=0.27
8
+
9
+ [dev]
10
+ pytest
11
+ pytest-asyncio
@@ -0,0 +1,3 @@
1
+ passvault_core
2
+ passvault_tui
3
+ utils