Commit Graph
253 Commits
Author SHA1 Message Date
thePR0M3TH3AN 92f17355ad Advance TUI v2 parity with reveal/QR and landing theme 2026-03-01 18:20:57 -05:00
thePR0M3TH3AN f02b360062 Fix beta TUI startup preflight and installer fallback hints 2026-03-01 17:47:17 -05:00
thePR0M3TH3AN 3470fd6aac Strengthen determinism gates and add TUI v2 agent testing workflow 2026-03-01 17:35:39 -05:00
thePR0M3TH3AN feb4e0df8c Reduce repeated status noise in TUI v2 2026-03-01 17:00:06 -05:00
thePR0M3TH3AN e1b87ff2df Polish TUI v2 visual hierarchy and panel clarity 2026-03-01 16:57:23 -05:00
thePR0M3TH3AN e667249ec4 Improve TUI v2 UX with help overlay and pane focus 2026-03-01 16:55:39 -05:00
thePR0M3TH3AN e3c117110a Switch default interactive CLI routing to TUI v2 2026-03-01 16:46:08 -05:00
thePR0M3TH3AN 5f0dbe82af Add TUI v2 parity scenarios and align help hints 2026-03-01 16:44:07 -05:00
thePR0M3TH3AN eba7ff3353 Add Textual pilot tests for TUI v2 workflows 2026-03-01 16:27:55 -05:00
thePR0M3TH3AN 7a1768f349 Add testable TUI v2 helper layer and unit coverage 2026-03-01 16:24:55 -05:00
thePR0M3TH3AN 0d0432ec45 Add TUI v2 retryable error recovery flows 2026-03-01 16:20:37 -05:00
thePR0M3TH3AN ec0d77d3e6 Add TUI v2 parity checklist and large-vault pagination 2026-03-01 16:17:42 -05:00
thePR0M3TH3AN 6478987254 Add relation filters and link traversal to TUI v2 2026-03-01 16:15:03 -05:00
thePR0M3TH3AN 437254b5bb Add TUI v2 command palette and graph links panel 2026-03-01 16:13:09 -05:00
thePR0M3TH3AN 403c09a806 Add TUI v2 phase 2 document edit and archive actions 2026-03-01 16:09:46 -05:00
thePR0M3TH3AN 4113bd1282 Implement TUI v2 phase 1 read-only shell 2026-03-01 16:06:39 -05:00
thePR0M3TH3AN 8d3d2a3993 Add TUI v2 scaffold, plan docs, and discovery command hints 2026-03-01 16:03:04 -05:00
thePR0M3TH3AN d0ea0d96f6 Add document workflows, entry graph links, and discovery/docs updates 2026-03-01 15:43:43 -05:00
thePR0M3TH3AN 64efd1175d Improve Nostr sync failure messaging for offline mode 2026-03-01 01:31:08 -05:00
thePR0M3TH3AN b9d6c0d49d Add Nostr sync reset/fresh namespace workflow and docs 2026-03-01 01:24:33 -05:00
thePR0M3TH3AN 24aa3f12a2 Merge branch 'beta'
# Conflicts:
#	memory-update.md
#	torch/_backups/backup_2026-02-26T13-45-30-661Z/scripts/find_dead_code.py
2026-03-01 01:02:55 -05:00
thePR0M3TH3AN 68cb1169e3 Add agent autonomy controls, docs updates, and landing page agent section 2026-03-01 01:02:11 -05:00
thePR0M3TH3AN fe96ccd7c7 Add agent security controls, broker auth, and capability discovery 2026-02-28 22:32:38 -05:00
google-labs-jules[bot]andPR0M3TH3AN 198ed4e440 chore(ai): format sources (style-agent)
Reformatted 5 Python files using black and verified linting for Node.js sources. No functional changes.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 22:20:16 +00:00
thePR0M3TH3AN 4459dfea78 Fix display service input hooks and clean pytest warnings 2026-02-26 15:45:55 -05:00
thePR0M3TH3AN 44a5afa99b Merge pull request #928 from PR0M3TH3AN/refactor/gui-backend-constants-18119685441517758660
Refactor GUI backend configuration to constants
2026-02-26 14:37:14 -05:00
thePR0M3TH3AN 53dcbb72c6 Merge pull request #929 from PR0M3TH3AN/refactor-menu-handler-generic-8639963642107346
Refactor entry menus to use generic `MenuHandler.run_menu`
2026-02-26 14:37:03 -05:00
thePR0M3TH3AN ca1b371e85 Merge pull request #930 from PR0M3TH3AN/refactor/password-complexity-4748189869193669602
🧹 Refactor _enforce_complexity for better maintainability
2026-02-26 14:36:49 -05:00
thePR0M3TH3AN 9a8c68dc81 Merge pull request #926 from PR0M3TH3AN/refactor/handle-add-methods-duplication-16655045915046682728
Refactor handle_add_* methods in manager.py to remove duplication
2026-02-26 14:36:12 -05:00
thePR0M3TH3AN 9408a64c1c Merge pull request #921 from PR0M3TH3AN/fix-backup-seed-overwrite-3580566875642074998
🔒 Fix Arbitrary File Overwrite in backup_parent_seed
2026-02-26 14:34:32 -05:00
thePR0M3TH3AN 11f61cec4c Merge pull request #919 from PR0M3TH3AN/code-health-display-service-3270220411041344632
🧹 Refactor display logic to DisplayService
2026-02-26 14:33:22 -05:00
thePR0M3TH3AN 7a74a3d77d Merge pull request #918 from PR0M3TH3AN/refactor-initialize-managers-2379820850270818796
Refactor initialize_managers in PasswordManager
2026-02-26 14:33:05 -05:00
google-labs-jules[bot]andPR0M3TH3AN a1b459f98f Refactor entry menus to use generic MenuHandler.run_menu
Consolidated duplicated menu loop logic from `_entry_actions_menu`, `_entry_edit_menu`, and `_entry_qr_menu` in `src/seedpass/core/manager.py` into a reusable `run_menu` method in `src/seedpass/core/menu_handler.py`. This improves maintainability by centralizing the loop handling, input prompting, and header clearing logic.

*   Added `run_menu` to `MenuHandler`.
*   Refactored `_entry_actions_menu` to use `run_menu`.
*   Refactored `_entry_edit_menu` to use `run_menu`.
*   Refactored `_entry_qr_menu` (NOSTR section) to use `run_menu`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 19:26:55 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9e08e5082b Refactor GUI backend config to constants.py
Extracts the hardcoded BeeWare GUI backend configuration (package names, versions, and SHA256 hashes) from `src/seedpass/cli/__init__.py` into a new `GUI_BACKEND_CONFIG` dictionary in `src/constants.py`. This improves maintainability by centralizing configuration and simplifying the CLI logic.

- Adds `GUI_BACKEND_CONFIG` to `src/constants.py`.
- Updates `src/seedpass/cli/__init__.py` to import and use `GUI_BACKEND_CONFIG`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 19:25:24 +00:00
google-labs-jules[bot]andPR0M3TH3AN 4ebc14e703 Refactor handle_add_* methods to remove duplication
- Introduced `_clear_header_add_entry`, `_mark_dirty`, `_sync_and_pause` helpers.
- Introduced `_entry_op_context` context manager for error handling.
- Applied these patterns to `handle_add_totp`, `handle_add_ssh_key`, `handle_add_seed`, `handle_add_pgp`, `handle_add_nostr_key`, `handle_add_key_value`, and `handle_add_managed_account`.
- Ensured `is_dirty` flag is set immediately after entry creation to prevent data loss if subsequent UI steps are cancelled.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 19:18:51 +00:00
google-labs-jules[bot]andPR0M3TH3AN 39f552d589 Fix: Prevent arbitrary file overwrite in backup_parent_seed
This change mitigates an arbitrary file overwrite vulnerability in the
`backup_parent_seed` API endpoint. Previously, the endpoint did not
check if the destination file already existed, allowing attackers or
accidental misuse to overwrite critical files if the path validation
passed.

The fix introduces a check using `resolved_path.exists()` after path
validation. If the file exists, the request is rejected with a
409 Conflict error.

A reproduction test case confirmed the vulnerability and verified the
fix. Regression tests on the API passed successfully.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 19:09:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN a6856c1fec Refactor _enforce_complexity in password_generation.py
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 18:17:59 +00:00
google-labs-jules[bot]andPR0M3TH3AN 40f37b30bd Refactor display_sensitive_entry_info into DisplayService
Extracted the monolithic `display_sensitive_entry_info` method from `PasswordManager` into a new `DisplayService` class in `src/seedpass/core/display_service.py`. This improves maintainability and separation of concerns.

- Created `src/seedpass/core/display_service.py` with `DisplayService` class.
- Implemented specific display methods for each entry type (TOTP, SSH, SEED, PGP, Nostr, Key/Value, Managed Account, Password).
- Updated `src/seedpass/core/manager.py` to use `DisplayService`.
- Verified with existing tests `test_manager_retrieve_totp.py` and `test_manager_search_display.py`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 18:11:07 +00:00
google-labs-jules[bot]andPR0M3TH3AN 24fa2e8e1a Refactor initialize_managers in PasswordManager for better readability
Extracted logic from `initialize_managers` into helper methods:
- `_initialize_config_and_state`
- `_initialize_entry_manager`
- `_initialize_password_generator`
- `_initialize_nostr_client`
- `_handle_migration`

This improves code organization and maintainability without altering functionality. Verified with `test_vault_initialization.py`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 18:11:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN cf9d473abe perf: offload blocking import_vault operations to thread
Refactors `import_vault` endpoint in `src/seedpass/api.py` to use `asyncio.to_thread` for blocking file I/O and synchronous `PasswordManager.handle_import_database` calls.
Replaces synchronous `pm.sync_vault()` with `await pm.sync_vault_async()` (with fallback) to prevent blocking the event loop or triggering `asyncio.run` errors.

This change ensures the API remains responsive during large vault imports.
Verified with a custom benchmark script showing concurrent requests are no longer blocked.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 17:48:27 +00:00
thePR0M3TH3AN 67fd7a1063 Merge pull request #914 from PR0M3TH3AN/fix-legacy-empty-salt-8731732856332646806
🔒 Fix Weak Legacy Key Derivation (Empty Salt)
2026-02-26 12:26:30 -05:00
google-labs-jules[bot]andPR0M3TH3AN b5a321544b 🔒 fix: Weak Legacy Key Derivation (Empty Salt)
This commit addresses a security vulnerability where legacy Fernet keys
were derived using PBKDF2 with an empty salt (b"").

Changes:
- Modified `_derive_legacy_key_from_password` to accept an optional `salt`
  parameter.
- Updated `EncryptionManager.decrypt_legacy` to attempt decryption using
   a salt derived from the user's fingerprint (unique per user) before
  falling back to the empty salt for backward compatibility.
- Added a new test file `src/tests/test_legacy_salt_fix.py` to verify the
  new logic.

Rationale: Using a unique salt per user is standard practice to prevent
precomputed attacks. While legacy vaults cannot be retroactively
secured, this change ensures that any future legacy-style derivations
use a unique salt if possible, while maintaining access to existing
vaults.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 17:26:00 +00:00
google-labs-jules[bot]andPR0M3TH3AN f9023e8f5f Refactor imghdr compatibility hack to a dedicated compat module
Moved the imghdr compatibility shim from `src/seedpass/core/password_generation.py`
to a new `src/seedpass/core/compat.py` module. This improves code
cleanliness and separates concerns by centralizing Python version
compatibility logic.

The shim ensures that `imghdr` is available in `sys.modules` (using
`utils.imghdr_stub` as a fallback for Python 3.13+) so that dependencies
like `pgpy` can function correctly.

Verified the change by:
- Confirming `compat.py` correctly populates `sys.modules["imghdr"]`.
- Verifying `password_generation.py` imports correctly and triggers the shim.
- Ensuring syntax correctness via `py_compile`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 17:23:37 +00:00
thePR0M3TH3AN 882cd060fa Fix Python 3.10 compatibility for UTC timezone usage 2026-02-25 21:26:32 -05:00
thePR0M3TH3AN c25d1df78d Format files to satisfy CI black check 2026-02-25 21:22:39 -05:00
thePR0M3TH3AN 0f8a54342c Fix profile setup edge cases and TOTP viewer refresh 2026-02-25 20:57:29 -05:00
thePR0M3TH3AN 88c1974ac6 Harden TUI recovery paths and add release integrity gates 2026-02-25 19:18:54 -05:00
thePR0M3TH3AN 72e6e3ba38 Close security item 6 with unlock throttling and policy gates 2026-02-25 18:32:06 -05:00
thePR0M3TH3AN 73a175b93f Harden item 6 API route access controls while locked 2026-02-25 18:29:02 -05:00
thePR0M3TH3AN dd6cbea7de Start security item 6: API lock access control and unlock route 2026-02-25 18:26:43 -05:00