nyxora 2.6.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 (91) hide show
  1. nyxora-2.6.0/.github/workflows/ci.yml +61 -0
  2. nyxora-2.6.0/.github/workflows/publish.yml +49 -0
  3. nyxora-2.6.0/.gitignore +61 -0
  4. nyxora-2.6.0/CHANGELOG.md +217 -0
  5. nyxora-2.6.0/CODE_OF_CONDUCT.md +12 -0
  6. nyxora-2.6.0/CONTRIBUTING.md +43 -0
  7. nyxora-2.6.0/LICENSE +21 -0
  8. nyxora-2.6.0/PKG-INFO +234 -0
  9. nyxora-2.6.0/README.md +185 -0
  10. nyxora-2.6.0/SECURITY.md +52 -0
  11. nyxora-2.6.0/assets/nyxora_icon.png +0 -0
  12. nyxora-2.6.0/docs/.gitkeep +0 -0
  13. nyxora-2.6.0/docs/ARCHITECTURE.md +183 -0
  14. nyxora-2.6.0/docs/CLI_UX_SPEC.md +113 -0
  15. nyxora-2.6.0/docs/RECOVERY.md +144 -0
  16. nyxora-2.6.0/docs/SECURITY.md +51 -0
  17. nyxora-2.6.0/docs/help_output_report.md +302 -0
  18. nyxora-2.6.0/nyxora_windows.spec +96 -0
  19. nyxora-2.6.0/pyproject.toml +92 -0
  20. nyxora-2.6.0/scripts_build/build_windows.py +73 -0
  21. nyxora-2.6.0/src/nyxora/__init__.py +9 -0
  22. nyxora-2.6.0/src/nyxora/cli/__init__.py +1 -0
  23. nyxora-2.6.0/src/nyxora/cli/commands/__init__.py +1 -0
  24. nyxora-2.6.0/src/nyxora/cli/commands/backup.py +275 -0
  25. nyxora-2.6.0/src/nyxora/cli/commands/generate.py +207 -0
  26. nyxora-2.6.0/src/nyxora/cli/commands/import_.py +199 -0
  27. nyxora-2.6.0/src/nyxora/cli/commands/locker.py +213 -0
  28. nyxora-2.6.0/src/nyxora/cli/commands/recovery.py +145 -0
  29. nyxora-2.6.0/src/nyxora/cli/commands/scripting.py +278 -0
  30. nyxora-2.6.0/src/nyxora/cli/commands/secret.py +339 -0
  31. nyxora-2.6.0/src/nyxora/cli/commands/security.py +271 -0
  32. nyxora-2.6.0/src/nyxora/cli/commands/tui_cmd.py +83 -0
  33. nyxora-2.6.0/src/nyxora/cli/commands/update.py +230 -0
  34. nyxora-2.6.0/src/nyxora/cli/commands/vault.py +454 -0
  35. nyxora-2.6.0/src/nyxora/cli/helpers.py +187 -0
  36. nyxora-2.6.0/src/nyxora/cli/main.py +145 -0
  37. nyxora-2.6.0/src/nyxora/cli/ui.py +437 -0
  38. nyxora-2.6.0/src/nyxora/core/__init__.py +1 -0
  39. nyxora-2.6.0/src/nyxora/core/crypto_engine.py +410 -0
  40. nyxora-2.6.0/src/nyxora/core/intel_engine.py +552 -0
  41. nyxora-2.6.0/src/nyxora/core/memory_guard.py +221 -0
  42. nyxora-2.6.0/src/nyxora/core/recovery_core.py +329 -0
  43. nyxora-2.6.0/src/nyxora/core/session_core.py +203 -0
  44. nyxora-2.6.0/src/nyxora/core/update_engine.py +244 -0
  45. nyxora-2.6.0/src/nyxora/core/vault_store.py +976 -0
  46. nyxora-2.6.0/src/nyxora/data/__init__.py +0 -0
  47. nyxora-2.6.0/src/nyxora/data/eff_large_wordlist.txt +7776 -0
  48. nyxora-2.6.0/src/nyxora/sdk.py +300 -0
  49. nyxora-2.6.0/src/nyxora/tui/__init__.py +2 -0
  50. nyxora-2.6.0/src/nyxora/tui/app.py +58 -0
  51. nyxora-2.6.0/src/nyxora/tui/screens/__init__.py +0 -0
  52. nyxora-2.6.0/src/nyxora/tui/screens/audit_screen.py +79 -0
  53. nyxora-2.6.0/src/nyxora/tui/screens/search_overlay.py +62 -0
  54. nyxora-2.6.0/src/nyxora/tui/screens/vault_browser.py +241 -0
  55. nyxora-2.6.0/src/nyxora/tui/theme.tcss +249 -0
  56. nyxora-2.6.0/src/nyxora/utils/__init__.py +1 -0
  57. nyxora-2.6.0/src/nyxora/utils/config.py +210 -0
  58. nyxora-2.6.0/src/nyxora/utils/exceptions.py +127 -0
  59. nyxora-2.6.0/tests/__init__.py +0 -0
  60. nyxora-2.6.0/tests/cli/__init__.py +0 -0
  61. nyxora-2.6.0/tests/cli/test_backup_commands.py +0 -0
  62. nyxora-2.6.0/tests/cli/test_generate_commands.py +0 -0
  63. nyxora-2.6.0/tests/cli/test_locker_commands.py +0 -0
  64. nyxora-2.6.0/tests/cli/test_recovery_commands.py +0 -0
  65. nyxora-2.6.0/tests/cli/test_secret_commands.py +0 -0
  66. nyxora-2.6.0/tests/cli/test_security_commands.py +0 -0
  67. nyxora-2.6.0/tests/cli/test_vault_commands.py +0 -0
  68. nyxora-2.6.0/tests/conftest.py +27 -0
  69. nyxora-2.6.0/tests/integration/__init__.py +0 -0
  70. nyxora-2.6.0/tests/integration/test_brute_force_lockout.py +72 -0
  71. nyxora-2.6.0/tests/integration/test_full_workflow.py +100 -0
  72. nyxora-2.6.0/tests/integration/test_tamper_detection.py +95 -0
  73. nyxora-2.6.0/tests/integration/test_v2_features.py +111 -0
  74. nyxora-2.6.0/tests/unit/__init__.py +0 -0
  75. nyxora-2.6.0/tests/unit/test_cli_commands.py +130 -0
  76. nyxora-2.6.0/tests/unit/test_cli_help.py +23 -0
  77. nyxora-2.6.0/tests/unit/test_config.py +55 -0
  78. nyxora-2.6.0/tests/unit/test_crypto_engine.py +104 -0
  79. nyxora-2.6.0/tests/unit/test_direct_coverage.py +284 -0
  80. nyxora-2.6.0/tests/unit/test_intel_engine.py +155 -0
  81. nyxora-2.6.0/tests/unit/test_interactive_mocks.py +171 -0
  82. nyxora-2.6.0/tests/unit/test_main_and_vault.py +48 -0
  83. nyxora-2.6.0/tests/unit/test_massive_coverage.py +117 -0
  84. nyxora-2.6.0/tests/unit/test_memory_guard.py +30 -0
  85. nyxora-2.6.0/tests/unit/test_recovery_core.py +69 -0
  86. nyxora-2.6.0/tests/unit/test_sdk.py +141 -0
  87. nyxora-2.6.0/tests/unit/test_session_core.py +123 -0
  88. nyxora-2.6.0/tests/unit/test_tui.py +90 -0
  89. nyxora-2.6.0/tests/unit/test_ui_components.py +49 -0
  90. nyxora-2.6.0/tests/unit/test_update_engine.py +127 -0
  91. nyxora-2.6.0/tests/unit/test_vault_store.py +254 -0
@@ -0,0 +1,61 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ os: [ubuntu-latest, windows-latest]
16
+ python-version: ["3.12", "3.13", "3.14"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install -e ".[dev]"
30
+
31
+ - name: Run ruff lint
32
+ run: ruff check src/ tests/
33
+
34
+ - name: Run mypy type check
35
+ run: mypy src/nyxora
36
+
37
+ - name: Run tests
38
+ run: pytest tests/ -x -q --timeout=60
39
+
40
+ build_windows:
41
+ runs-on: windows-latest
42
+ needs: test
43
+ steps:
44
+ - uses: actions/checkout@v4
45
+
46
+ - name: Set up Python 3.12
47
+ uses: actions/setup-python@v5
48
+ with:
49
+ python-version: "3.12"
50
+
51
+ - name: Install build deps
52
+ run: |
53
+ python -m pip install --upgrade pip
54
+ pip install -e ".[dev,build]"
55
+
56
+ - name: Verify spec parses
57
+ run: |
58
+ python -c "
59
+ import PyInstaller.__main__
60
+ print('PyInstaller available')
61
+ "
@@ -0,0 +1,49 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+
13
+ - name: Set up Python
14
+ uses: actions/setup-python@v5
15
+ with:
16
+ python-version: "3.12"
17
+
18
+ - name: Install build tools
19
+ run: |
20
+ python -m pip install --upgrade pip
21
+ pip install build
22
+
23
+ - name: Build distributions
24
+ run: python -m build
25
+
26
+ - name: Upload distributions as artifact
27
+ uses: actions/upload-artifact@v4
28
+ with:
29
+ name: dist
30
+ path: dist/
31
+
32
+ publish:
33
+ needs: build
34
+ runs-on: ubuntu-latest
35
+ environment:
36
+ name: pypi
37
+ url: https://pypi.org/project/nyxora/
38
+ permissions:
39
+ id-token: write # Required for OIDC trusted publishing
40
+
41
+ steps:
42
+ - name: Download distributions
43
+ uses: actions/download-artifact@v4
44
+ with:
45
+ name: dist
46
+ path: dist/
47
+
48
+ - name: Publish to PyPI
49
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,61 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.so
5
+ .Python
6
+ build/
7
+ develop-eggs/
8
+ dist/
9
+ downloads/
10
+ eggs/
11
+ .eggs/
12
+ lib/
13
+ lib64/
14
+ parts/
15
+ sdist/
16
+ var/
17
+ wheels/
18
+ *.egg-info/
19
+ .installed.cfg
20
+ *.egg
21
+
22
+ # Testing
23
+ .pytest_cache/
24
+ .coverage
25
+ htmlcov/
26
+ .tox/
27
+
28
+ # Vault files
29
+ *.vault
30
+ *.nyx
31
+ .nyxora/
32
+ nyxora_session/
33
+ *.capsule
34
+ *.key
35
+ *.pem
36
+
37
+ # Environment
38
+ .env
39
+ .env.*
40
+
41
+ # IDE
42
+ .vscode/
43
+ .idea/
44
+ *.swp
45
+ *.swo
46
+
47
+ # OS
48
+ .DS_Store
49
+ Thumbs.db
50
+
51
+ # MyPy
52
+ .mypy_cache/
53
+
54
+ # Ruff
55
+ .ruff_cache/
56
+
57
+ # Temporary & Debug
58
+ *.txt
59
+ !src/nyxora/data/*.txt
60
+ *.bak
61
+ .claude/
@@ -0,0 +1,217 @@
1
+ # Changelog
2
+
3
+ All notable changes to Nyxora are documented here.
4
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
5
+
6
+ ---
7
+
8
+ ## [2.6.0] - 2026-05-03
9
+
10
+ ### Added
11
+ - **Auto-updater** (`nyx update check/install/rollback/channel`) — GitHub
12
+ Releases API integration with SHA-256 integrity verification, rollback
13
+ support, and non-blocking startup version notification after unlock
14
+ - **Named vault profiles** (`nyx vault profiles/use/add-profile/remove-profile`)
15
+ — multiple vaults managed from one installation; active profile auto-resolves
16
+ vault path across all commands
17
+ - **JSON output mode** (`nyx --json`) — any command emits machine-readable JSON;
18
+ supported on secret get/list/search, vault status, generate password/passphrase
19
+ - **TOTP per entry** — store a TOTP secret alongside credentials;
20
+ `nyx secret totp [entry]` shows live 6-digit code with countdown bar;
21
+ `--watch` flag auto-refreshes every 30 seconds
22
+ - **Vault health score** (`nyx security health`) — 0–100 composite grade
23
+ across strength, breach-free, no-reuse, age, and TOTP coverage
24
+ - **Rotation reminders** (`nyx security due [--days N]`) — lists entries
25
+ whose password hasn't changed in N days, sorted oldest-first
26
+ - **nyx vault import** — extended with `--totp-secret` on update command
27
+ - **Scripting layer** — `nyx script pipe`, `nyx script run`, `nyx script fzf`
28
+ for credential injection into subprocesses without shell history exposure
29
+ - **Python SDK** (`from nyxora import VaultClient`) — high-level programmatic
30
+ vault access with context manager, session-based and password-based modes
31
+ - **Textual TUI** (`nyx tui`) — Obsidian Tactical interactive vault browser;
32
+ entry list with j/k navigation, live search overlay, detail panel with
33
+ TOTP countdown, audit dashboard, amber #C89A30 tactical theme
34
+ - **Shell completions v2** — entry titles complete live from vault on Tab
35
+ for `nyx secret get`, `nyx secret update`, `nyx secret delete`
36
+ - **PyInstaller build** — Windows standalone `nyx.exe` with gem icon;
37
+ `python scripts_build/build_windows.py` produces a single-file executable
38
+
39
+ ### Security
40
+ - Schema version bumped to "2"; silent migration adds `totp_secret_enc` column
41
+ to existing v2.0.0 vaults on first open — HMAC stays consistent
42
+
43
+ ### Breaking Changes
44
+ - None — fully backward-compatible with v2.0.0 vault files
45
+
46
+ ---
47
+
48
+ ## [2.0.0] - 2026-05-03
49
+
50
+ ### Added
51
+ - `nyx vault import` — batch import from CSV, Bitwarden JSON, 1Password CSV,
52
+ and Nyxora JSON export formats with auto-detection and dry-run preview
53
+ - In-session entry cache on VaultStore — eliminates O(N) decryptions on
54
+ repeated list/search operations; invalidated on every mutation
55
+ - `VaultStore.get_metadata_value()` — public API for metadata queries,
56
+ replacing internal `_conn` access in the recovery status command
57
+ - `nyx generate password --min-strength` — regenerates up to 10 times until
58
+ the requested entropy threshold (weak/fair/strong/excellent) is met
59
+ - `nyx generate passphrase --count/-n` — generate multiple passphrases in
60
+ one call, matching the `password` command's existing `--count` flag
61
+ - `nyx secret update --tags` — replace tags on an existing entry
62
+ - `nyx secret add --custom` — attach arbitrary key=value custom fields
63
+ - Full EFF Large Wordlist (7,776 words) replaces the 204-word sample —
64
+ 5-word passphrase entropy: 37.7 bits → 64.6 bits
65
+ - 9 new terminal UI components: `entropy_bar`, `strength_badge`,
66
+ `checklist_panel`, `danger_panel`, `session_dashboard`,
67
+ `audit_summary_panel`, `clipboard_countdown`, `update_diff_panel`,
68
+ `recovery_status_panel`
69
+ - Visual entropy bar and strength badge on all generation commands
70
+ - `nyx vault status` now shows a rich session dashboard (entries, session
71
+ token prefix, inactivity timeout, failed attempt count, cipher suite)
72
+ - `nyx vault health-check` renders a pass/fail integrity checklist
73
+ - `nyx security audit` appends a colour-coded summary panel
74
+ - `nyx backup export --plaintext` requires a two-step danger confirmation
75
+ (confirm prompt + type the word CONFIRM)
76
+ - `nyx secret get --copy` auto-clears clipboard after 30 seconds
77
+ - `nyx recovery status` now shows real TOTP/capsule/share detection
78
+ - Real integration tests replacing empty stubs: full vault lifecycle,
79
+ brute-force lockout ladder, 3-layer tamper detection, entry cache,
80
+ metadata API, and CSV import round-trip (135 tests total)
81
+
82
+ ### Security
83
+ - Recovery capsule inner and outer encryption now use HKDF-derived
84
+ independent keys (`nyxora:capsule:inner` / `nyxora:capsule:outer`) —
85
+ previously both layers shared `capsule_key` directly
86
+ - Locker `.nyx` files now embed a 16-byte random salt in the header;
87
+ identical filenames always produce a different encryption key
88
+ - `nyx secret update --password` flag removed — password no longer exposed
89
+ in shell history or `ps aux`; interactive prompt required instead
90
+ - Plaintext backup export now requires double confirmation with exact word
91
+ match to prevent accidental credential exposure
92
+
93
+ ### Performance
94
+ - `wipe_memory()` passes 2 and 3 now use `ctypes.memset` — orders of
95
+ magnitude faster for large buffers
96
+ - `gc.collect()` removed from `wipe_memory()` — eliminates ResourceWarning
97
+ cascade and unnecessary GC pressure on every key wipe
98
+ - GF(256) multiplicative inverse is now an O(1) precomputed lookup table
99
+ (was O(256) brute-force per call)
100
+ - `security audit` HIBP checks now run concurrently via
101
+ `ThreadPoolExecutor(max_workers=5)` — ~10× faster for large vaults
102
+
103
+ ### Fixed
104
+ - `nyx vault change-password`: atomic three-step file swap with rollback —
105
+ power loss can no longer permanently destroy the vault (Phase 1)
106
+ - HMAC comparisons in `_verify_entry_hmac` and `_verify_vault_hmac` now
107
+ use `hmac.compare_digest()` — eliminates timing oracle (Phase 1)
108
+ - `SessionManager` brute-force ladder now active at CLI level —
109
+ `record_failed_attempt()` and `record_successful_unlock()` wired in (Phase 1)
110
+ - `SessionManager._running` initialised in `__init__` — no more
111
+ `AttributeError` when `lock()` called before `unlock()` (Phase 1)
112
+ - `delete_entry` now verifies entry HMAC before soft-deletion, consistent
113
+ with `get_entry` and `update_entry` (Phase 1)
114
+ - `unlock --create` branch now writes the `.salt` file — vault can be
115
+ re-opened after creation via `--create` flag (Phase 2)
116
+ - Empty tag list `[]` in `migrate_from_store` no longer treated as `None` —
117
+ HMAC mismatch after migration fixed (Phase 2)
118
+ - `locker_key` always wiped in `finally` block during encrypt — key no
119
+ longer leaked in memory on exception (Phase 2)
120
+ - `_derive_argon2id` removes pointless `tmp` wipe of a bytearray copy;
121
+ `del raw` minimises lifetime of the immutable `bytes` object (Phase 2)
122
+ - Dead code removed: unreachable `return` after `raise` in HIBP check;
123
+ unused `sha1` variable in `check_breach_offline` (Phase 4)
124
+ - `Config.validate()` called on every `load()` — invalid configs no longer
125
+ silently propagate (Phase 4)
126
+ - `nyx recovery status` no longer returns placeholder text (Phase 2 UI)
127
+ - Panic exit code changed to 4 — no conflict with brute-force lockout
128
+ exit code 3 (Phase 2 UI)
129
+
130
+ ### Breaking Changes
131
+ - `.nyx` locker files created with v1.x are **not compatible** with v2.0.0.
132
+ The file header format changed to include a 16-byte per-file salt.
133
+ Re-encrypt files using `nyx locker decrypt` (v1.x) then
134
+ `nyx locker encrypt` (v2.0.0).
135
+ - Recovery capsules created with v1.x are **not compatible** with v2.0.0.
136
+ The HKDF key derivation for inner/outer layers changed.
137
+ Recreate capsules using `nyx recovery create-capsule`.
138
+
139
+ ---
140
+
141
+ ## [1.2.0] - 2026-05-03
142
+
143
+ ### Performance
144
+ - `wipe_memory()` passes 2+3 use `ctypes.memset` (single C-level write)
145
+ - `gc.collect()` removed from `wipe_memory()` — fixes ResourceWarning flood
146
+ - GF(256) inverse now O(1) precomputed lookup table
147
+ - HIBP audit requests now concurrent via `ThreadPoolExecutor(max_workers=5)`
148
+
149
+ ### Security
150
+ - Recovery capsule: HKDF-separated inner/outer keys
151
+ - Locker: per-file 16-byte salt embedded in `.nyx` header
152
+ - Full EFF large wordlist (7,776 words) — fixes ~27-bit entropy overstatement
153
+
154
+ ### Fixed
155
+ - Dead code removed from `intel_engine.py` (unreachable return, unused sha1)
156
+ - `strength_color()` removed from `generate.py` (replaced by `strength_badge`)
157
+ - `TYPE_CHECKING` no-op removed from `crypto_engine.py`
158
+ - `click` removed as explicit dep (transitive via `typer[all]`)
159
+ - `Config.validate()` now called on `load()`
160
+ - Inactivity monitor mock exhaustion warning resolved in test suite
161
+
162
+ ### CI
163
+ - Matrix expanded: ubuntu + windows × Python 3.12, 3.13, 3.14 (6 jobs)
164
+
165
+ ---
166
+
167
+ ## [1.1.0] - 2026-05-02
168
+
169
+ ### Added
170
+ - 9 new UI components: entropy bar, strength badge, checklist panel,
171
+ danger panel, session dashboard, audit summary panel, clipboard countdown,
172
+ update diff panel, recovery status panel
173
+ - Real integration tests: full vault lifecycle, brute-force lockout, tamper
174
+ detection (7 tests replacing empty stubs)
175
+ - `nyx vault status` → rich session dashboard
176
+ - `nyx vault health-check` → integrity checklist panel
177
+ - `nyx security audit` → summary panel appended
178
+ - `nyx backup export --plaintext` → two-step danger confirmation
179
+ - `nyx secret get --copy` → 30-second clipboard auto-clear
180
+ - `nyx recovery status` → real TOTP/capsule/share detection
181
+
182
+ ### Fixed
183
+ - `unlock --create` writes salt file (vault was uncloseable after creation)
184
+ - Empty tag list migration HMAC mismatch resolved
185
+ - `locker_key` wiped in `finally` on encrypt exception
186
+ - `_derive_argon2id` removes misleading `tmp` wipe
187
+ - `nyx secret update --password` flag removed (shell history exposure)
188
+
189
+ ### Security
190
+ - Panic exit code 4 (was 3, conflicting with brute-force lockout)
191
+
192
+ ---
193
+
194
+ ## [1.0.1] - 2026-05-01
195
+
196
+ ### Security
197
+ - `nyx vault change-password`: atomic file swap prevents vault destruction
198
+ - HMAC comparisons use `hmac.compare_digest()` — timing-safe
199
+ - `SessionManager` brute-force ladder wired into CLI unlock path
200
+ - `SessionManager._running` initialised in `__init__`
201
+ - `delete_entry` verifies HMAC before soft-deletion
202
+
203
+ ---
204
+
205
+ ## [1.0.0] - 2026-03-03
206
+
207
+ ### Added
208
+ - Initial production release
209
+ - Offline zero-knowledge architecture with Argon2id + XChaCha20-Poly1305
210
+ - 7 command groups: vault, secret, generate, security, backup, recovery, locker
211
+ - 3-layer HMAC integrity (per-entry, vault-wide, schema fingerprint)
212
+ - Shamir secret sharing, TOTP, encrypted recovery capsules
213
+ - HIBP k-anonymity breach detection
214
+ - Neon cyberpunk Rich terminal UI
215
+ - Hardened SQLite (WAL, EXCLUSIVE locking, secure_delete)
216
+ - Windows VirtualLock / Linux mlock memory protection
217
+ - 3-pass secure memory wipe (urandom → 0xFF → 0x00)
@@ -0,0 +1,12 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone.
5
+
6
+ ## Enforcement
7
+ Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
8
+
9
+ For all issues, contact **ScorpioCodeX** at `scorpiocodex0@gmail.com`.
10
+
11
+ For all issues related to Nyxora v2.0.0 and above, contact
12
+ **ScorpioCodeX** at `scorpiocodex0@gmail.com`.
@@ -0,0 +1,43 @@
1
+ # Contributing to Nyxora
2
+
3
+ Thank you for your interest in Nyxora.
4
+
5
+ Nyxora is a solo-led project (ScorpioCodeX). External contributions are
6
+ welcome but subject to strict security and style review.
7
+
8
+ ## Repository Structure
9
+
10
+ src/nyxora/
11
+ ├── cli/commands/ # Typer command modules (one per group)
12
+ ├── cli/ui.py # All Rich terminal output — no print() elsewhere
13
+ ├── core/ # Cryptographic business logic
14
+ ├── data/ # Static data files (EFF wordlist)
15
+ └── utils/ # Config, exceptions
16
+
17
+ tests/
18
+ ├── unit/ # Mocked unit tests
19
+ └── integration/ # Real on-disk vault tests (no mocks)
20
+
21
+ ## Code Guidelines
22
+
23
+ - Follow the 6-layer dependency model — no layer imports from above itself
24
+ - All sensitive `bytearray` values must be wiped with `wipe_memory()` in a
25
+ `finally` block before the function returns
26
+ - All terminal output must go through `nyxora.cli.ui` — no raw `print()`
27
+ - Never write unencrypted key material to disk or logs
28
+ - New UI output must use existing components from `ui.py` or add a new
29
+ reusable function there — no inline Rich markup in command files
30
+ - New commands must have at least one integration test in `tests/integration/`
31
+ - Maintain the neon cyberpunk aesthetic in all Rich panels and messages
32
+
33
+ ## Running Tests
34
+
35
+ pip install -e ".[dev]"
36
+ pytest tests/ -v --timeout=60
37
+
38
+ Coverage must remain above 80% (currently ~94%).
39
+
40
+ ## Submitting Changes
41
+
42
+ Open an Issue before any large PR.
43
+ Contact: scorpiocodex0@gmail.com
nyxora-2.6.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ScorpioCodeX
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.