mirror of
https://github.com/Z4nzu/hackingtool.git
synced 2026-11-04 05:02:29 +00:00
Docs: fix version/count drift and label TUI vs --classic
- logo.svg version v2.0.0 -> v3.1.0; add test_logo_version.py guard so the static SVG label can't drift from constants.VERSION again. - Reconcile counts across README/TOOLS/HOW-TO-USE to the app's real numbers: 219 tools / 21 categories / 44 archived / 63 tags in use (was 215/21/59/63). - Frame the default TUI vs the --classic REPL: mark /find, /goal, recommend, tags/search and background panes as --classic (Phase 2 brings them to the TUI).
This commit is contained in:
1 parent
266153e3fc
commit
e3824c8a26
5 files changed
+36
-13
No files matched your search
@@ -4,7 +4,7 @@
|
||||
|
||||
### AI-guided, all-in-one toolkit for authorized security testing
|
||||
|
||||
**215 curated tools across 21 categories** — recon, OSINT, web, wireless, phishing,
|
||||
**219 curated tools across 21 categories** — recon, OSINT, web, wireless, phishing,
|
||||
forensics, post-exploitation and more — with an **AI layer that turns plain English
|
||||
into the right tool and the exact command**.
|
||||
|
||||
@@ -34,7 +34,7 @@ students — all working **legally, on systems they own or are authorised to tes
|
||||
|
||||
<br/>
|
||||
|
||||
    
|
||||
    
|
||||
|
||||
<br/>
|
||||
|
||||
@@ -77,7 +77,7 @@ students — all working **legally, on systems they own or are authorised to tes
|
||||
plans an objective step by step, then summarizes findings and drafts an engagement
|
||||
report. Bring your own key or run a local model — nothing auto-executes and nothing
|
||||
is fabricated.
|
||||
- **🗂 215 curated tools, one interactive console** — type to search every tool, then
|
||||
- **🗂 219 curated tools, one interactive console** — type to search every tool, then
|
||||
install and run across 21 categories without hunting down Git repos; a fixed tag
|
||||
taxonomy (63 tags in use) makes every tool discoverable.
|
||||
- **🔎 It knows what it doesn't have** — `/find` searches your catalog first, then the
|
||||
@@ -98,7 +98,7 @@ students — all working **legally, on systems they own or are authorised to tes
|
||||
|
||||
## Tool Categories
|
||||
|
||||
**215 tools across 21 categories** — the full list, with links and tags, is in
|
||||
**219 tools across 21 categories** — the full list, with links and tags, is in
|
||||
**[docs/TOOLS.md](docs/TOOLS.md)**.
|
||||
|
||||
<div align="center">
|
||||
@@ -119,9 +119,9 @@ students — all working **legally, on systems they own or are authorised to tes
|
||||
|
||||
</div>
|
||||
|
||||
<sub>59 further entries are archived (unmaintained or dead upstream) and hidden unless
|
||||
<sub>44 further entries are archived (unmaintained or dead upstream) and hidden unless
|
||||
you set `show_archived true` via `/config`. The in-app header counts 22 categories /
|
||||
217 tools because it also counts the built-in Update / Uninstall menu.</sub>
|
||||
219 tools because it also counts the built-in Update / Uninstall menu.</sub>
|
||||
|
||||
---
|
||||
|
||||
@@ -328,9 +328,15 @@ falls back to the classic numbered menu, where `/` or `s` searches, `t` filters
|
||||
|
||||
## Features
|
||||
|
||||
> **Where these live today.** `/find`, `/goal`, plain-English recommendations,
|
||||
> `/tags`/`/search` and background panes currently run in the **`--classic`** REPL
|
||||
> (`hackingtool --classic`). The default TUI browses and type-searches the whole
|
||||
> catalog and runs tools; wiring these AI/search features into it is Phase 2. The
|
||||
> screenshots below showing a `/` command prompt are the `--classic` REPL.
|
||||
|
||||
### 🔎 `/find` — a tool for a need you don't have yet
|
||||
|
||||
Searches the 215 curated tools first, then the GitHub search API, and ranks the
|
||||
Searches the 219 curated tools first, then the GitHub search API, and ranks the
|
||||
results explainably. **Suggest-only** — it never clones, installs or runs anything —
|
||||
and it makes **zero model calls**.
|
||||
|
||||
|
||||
+9
-3
@@ -7,6 +7,12 @@ and something you get back — no prior knowledge of the codebase needed.
|
||||
> written permission to test it. hackingtool never runs a step without asking you
|
||||
> first, and never invents results.
|
||||
|
||||
> **TUI vs `--classic`.** The default `hackingtool` is an interactive TUI: browse
|
||||
> categories, type to search every tool, `↑↓`/`Enter`/`Esc` to move, `/` for the
|
||||
> command palette. The `/…`, `@…` and plain-English **grammar** taught below
|
||||
> (sections 2, 4, 5, 8) is the **`--classic`** REPL — launch it with
|
||||
> `hackingtool --classic`. Bringing these into the default TUI is Phase 2.
|
||||
|
||||
- [1. First run](#1-first-run)
|
||||
- [2. Learn the grammar in 60 seconds](#2-learn-the-grammar-in-60-seconds)
|
||||
- [3. Open and install a tool](#3-open-and-install-a-tool)
|
||||
@@ -47,9 +53,9 @@ and something you get back — no prior knowledge of the codebase needed.
|
||||
| `~/.hackingtool/history` | your `↑`/`↓` command history |
|
||||
|
||||
4. You land on the banner + prompt. The header line tells you what you have:
|
||||
OS, IP, and `22 categories · 217 active · 59 archived` (that count includes
|
||||
OS, IP, and `22 categories · 219 active · 44 archived` (that count includes
|
||||
the built-in Update/Uninstall menu; the tool catalog itself is
|
||||
[21 categories / 215 tools](TOOLS.md)).
|
||||
[21 categories / 219 tools](TOOLS.md)).
|
||||
|
||||
5. Type `/help` for the command card, and `q` (or `/quit`, `Ctrl-D`) to leave.
|
||||
|
||||
@@ -109,7 +115,7 @@ metapackages), hackingtool reuses that binary instead of re-cloning it.
|
||||
|
||||
## 4. Find a tool that isn't in the catalog (`/find`)
|
||||
|
||||
`/find` answers "what should I use for X?" — first from the 215 curated tools,
|
||||
`/find` answers "what should I use for X?" — first from the 219 curated tools,
|
||||
then from the GitHub search API, ranked with a reason for each hit. It is
|
||||
**suggest-only**: it never clones, installs or runs anything, and it makes **zero
|
||||
model calls**.
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
# Tool catalog
|
||||
|
||||
Every tool hackingtool can install, launch, or point you at — **215 active tools
|
||||
across 21 categories**, plus 59 archived entries kept out of this list (they are
|
||||
Every tool hackingtool can install, launch, or point you at — **219 active tools
|
||||
across 21 categories**, plus 44 archived entries kept out of this list (they are
|
||||
unmaintained or dead upstream and are hidden in the app unless you set
|
||||
`show_archived true` via `/config`).
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="200" viewBox="0 0 600 200"><defs><linearGradient id="bgGrad" x1="0%" x2="100%" y1="0%" y2="100%"><stop offset="0%" style="stop-color:#0d1117;stop-opacity:1"/><stop offset="100%" style="stop-color:#161b22;stop-opacity:1"/></linearGradient><linearGradient id="accentGrad" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" style="stop-color:#7b61ff"/><stop offset="50%" style="stop-color:#ff61dc"/><stop offset="100%" style="stop-color:#7b61ff"/></linearGradient><linearGradient id="greenGrad" x1="0%" x2="0%" y1="0%" y2="100%"><stop offset="0%" style="stop-color:#0f8"/><stop offset="100%" style="stop-color:#0c6"/></linearGradient><filter id="glow"><feGaussianBlur result="blur" stdDeviation="2"/><feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge></filter><filter id="softGlow"><feGaussianBlur result="blur" stdDeviation="4"/><feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs><rect width="600" height="200" fill="url(#bgGrad)" rx="16"/><rect width="598" height="198" x="1" y="1" fill="none" stroke="url(#accentGrad)" stroke-width="1.5" opacity=".6" rx="15"/><circle cx="28" cy="22" r="5" fill="#FF5F56"/><circle cx="46" cy="22" r="5" fill="#FFBD2E"/><circle cx="64" cy="22" r="5" fill="#27C93F"/><text x="300" y="26" fill="#8b949e" font-family="'SF Mono','Fira Code','Cascadia Code',monospace" font-size="11" text-anchor="middle">hackingtool — v2.0.0</text><g filter="url(#glow)" transform="translate(42, 58)"><path fill="none" stroke="url(#greenGrad)" stroke-width="2.5" d="M40 0 L75 15 L75 55 Q75 85 40 100 Q5 85 5 55 L5 15 Z"/><path fill="#0F8" d="M40 6 L70 19 L70 53 Q70 80 40 93 Q10 80 10 53 L10 19 Z" opacity=".08"/><ellipse cx="40" cy="40" fill="none" stroke="#0F8" stroke-width="2" rx="18" ry="16"/><ellipse cx="33" cy="38" fill="#0F8" opacity=".9" rx="4" ry="5"/><ellipse cx="47" cy="38" fill="#0F8" opacity=".9" rx="4" ry="5"/><path fill="none" stroke="#0F8" stroke-width="1.5" d="M38 47 L40 50 L42 47"/><path fill="none" stroke="#0F8" stroke-width="1.5" d="M28 52 Q40 62 52 52"/><line x1="34" x2="34" y1="52" y2="57" stroke="#0F8" stroke-width="1.2"/><line x1="40" x2="40" y1="53" y2="58" stroke="#0F8" stroke-width="1.2"/><line x1="46" x2="46" y1="52" y2="57" stroke="#0F8" stroke-width="1.2"/><line x1="15" x2="65" y1="72" y2="88" stroke="#0F8" stroke-linecap="round" stroke-width="2"/><line x1="65" x2="15" y1="72" y2="88" stroke="#0F8" stroke-linecap="round" stroke-width="2"/><circle cx="15" cy="72" r="3" fill="#0F8" opacity=".7"/><circle cx="65" cy="72" r="3" fill="#0F8" opacity=".7"/><circle cx="15" cy="88" r="3" fill="#0F8" opacity=".7"/><circle cx="65" cy="88" r="3" fill="#0F8" opacity=".7"/></g><text x="160" y="105" fill="url(#accentGrad)" filter="url(#softGlow)" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="52" font-weight="bold" letter-spacing="3">HACKING</text><text x="160" y="148" fill="#0F8" filter="url(#glow)" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="40" font-weight="bold" letter-spacing="8">TOOL</text><text x="160" y="178" fill="#8b949e" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="12" letter-spacing="1">All-in-One Security Research Framework</text><rect width="12" height="20" x="530" y="135" fill="#0F8" opacity=".8"><animate attributeName="opacity" dur="1.2s" repeatCount="indefinite" values="0.8;0;0.8"/></rect><path fill="none" stroke="#7B61FF" stroke-width="1" d="M16 40 L16 16 L40 16" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M584 40 L584 16 L560 16" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M16 160 L16 184 L40 184" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M584 160 L584 184 L560 184" opacity=".3"/><text x="540" y="60" fill="#0F8" font-family="monospace" font-size="10" opacity=".15">01101</text><text x="545" y="75" fill="#0F8" font-family="monospace" font-size="10" opacity=".12">10010</text><text x="548" y="90" fill="#0F8" font-family="monospace" font-size="10" opacity=".09">11001</text><text x="542" y="105" fill="#0F8" font-family="monospace" font-size="10" opacity=".06">01110</text></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="200" viewBox="0 0 600 200"><defs><linearGradient id="bgGrad" x1="0%" x2="100%" y1="0%" y2="100%"><stop offset="0%" style="stop-color:#0d1117;stop-opacity:1"/><stop offset="100%" style="stop-color:#161b22;stop-opacity:1"/></linearGradient><linearGradient id="accentGrad" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" style="stop-color:#7b61ff"/><stop offset="50%" style="stop-color:#ff61dc"/><stop offset="100%" style="stop-color:#7b61ff"/></linearGradient><linearGradient id="greenGrad" x1="0%" x2="0%" y1="0%" y2="100%"><stop offset="0%" style="stop-color:#0f8"/><stop offset="100%" style="stop-color:#0c6"/></linearGradient><filter id="glow"><feGaussianBlur result="blur" stdDeviation="2"/><feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge></filter><filter id="softGlow"><feGaussianBlur result="blur" stdDeviation="4"/><feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs><rect width="600" height="200" fill="url(#bgGrad)" rx="16"/><rect width="598" height="198" x="1" y="1" fill="none" stroke="url(#accentGrad)" stroke-width="1.5" opacity=".6" rx="15"/><circle cx="28" cy="22" r="5" fill="#FF5F56"/><circle cx="46" cy="22" r="5" fill="#FFBD2E"/><circle cx="64" cy="22" r="5" fill="#27C93F"/><text x="300" y="26" fill="#8b949e" font-family="'SF Mono','Fira Code','Cascadia Code',monospace" font-size="11" text-anchor="middle">hackingtool — v3.1.0</text><g filter="url(#glow)" transform="translate(42, 58)"><path fill="none" stroke="url(#greenGrad)" stroke-width="2.5" d="M40 0 L75 15 L75 55 Q75 85 40 100 Q5 85 5 55 L5 15 Z"/><path fill="#0F8" d="M40 6 L70 19 L70 53 Q70 80 40 93 Q10 80 10 53 L10 19 Z" opacity=".08"/><ellipse cx="40" cy="40" fill="none" stroke="#0F8" stroke-width="2" rx="18" ry="16"/><ellipse cx="33" cy="38" fill="#0F8" opacity=".9" rx="4" ry="5"/><ellipse cx="47" cy="38" fill="#0F8" opacity=".9" rx="4" ry="5"/><path fill="none" stroke="#0F8" stroke-width="1.5" d="M38 47 L40 50 L42 47"/><path fill="none" stroke="#0F8" stroke-width="1.5" d="M28 52 Q40 62 52 52"/><line x1="34" x2="34" y1="52" y2="57" stroke="#0F8" stroke-width="1.2"/><line x1="40" x2="40" y1="53" y2="58" stroke="#0F8" stroke-width="1.2"/><line x1="46" x2="46" y1="52" y2="57" stroke="#0F8" stroke-width="1.2"/><line x1="15" x2="65" y1="72" y2="88" stroke="#0F8" stroke-linecap="round" stroke-width="2"/><line x1="65" x2="15" y1="72" y2="88" stroke="#0F8" stroke-linecap="round" stroke-width="2"/><circle cx="15" cy="72" r="3" fill="#0F8" opacity=".7"/><circle cx="65" cy="72" r="3" fill="#0F8" opacity=".7"/><circle cx="15" cy="88" r="3" fill="#0F8" opacity=".7"/><circle cx="65" cy="88" r="3" fill="#0F8" opacity=".7"/></g><text x="160" y="105" fill="url(#accentGrad)" filter="url(#softGlow)" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="52" font-weight="bold" letter-spacing="3">HACKING</text><text x="160" y="148" fill="#0F8" filter="url(#glow)" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="40" font-weight="bold" letter-spacing="8">TOOL</text><text x="160" y="178" fill="#8b949e" font-family="'SF Mono','Fira Code','Cascadia Code','Courier New',monospace" font-size="12" letter-spacing="1">All-in-One Security Research Framework</text><rect width="12" height="20" x="530" y="135" fill="#0F8" opacity=".8"><animate attributeName="opacity" dur="1.2s" repeatCount="indefinite" values="0.8;0;0.8"/></rect><path fill="none" stroke="#7B61FF" stroke-width="1" d="M16 40 L16 16 L40 16" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M584 40 L584 16 L560 16" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M16 160 L16 184 L40 184" opacity=".3"/><path fill="none" stroke="#7B61FF" stroke-width="1" d="M584 160 L584 184 L560 184" opacity=".3"/><text x="540" y="60" fill="#0F8" font-family="monospace" font-size="10" opacity=".15">01101</text><text x="545" y="75" fill="#0F8" font-family="monospace" font-size="10" opacity=".12">10010</text><text x="548" y="90" fill="#0F8" font-family="monospace" font-size="10" opacity=".09">11001</text><text x="542" y="105" fill="#0F8" font-family="monospace" font-size="10" opacity=".06">01110</text></svg>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,11 @@
|
||||
"""Guard: the static logo.svg version label must match constants.VERSION (single source)."""
|
||||
from pathlib import Path
|
||||
|
||||
from hackingtool.constants import VERSION
|
||||
|
||||
_LOGO = Path(__file__).resolve().parents[1] / "images" / "logo.svg"
|
||||
|
||||
|
||||
def test_logo_svg_version_matches_constants():
|
||||
assert f"hackingtool — v{VERSION}" in _LOGO.read_text(encoding="utf-8"), (
|
||||
f"images/logo.svg version label is stale; bump it to v{VERSION}")
|
||||
Reference in new issue
Block a user