Files
hackingtool/pyproject.toml
Hardik Zinzu 4a9c3d0075 feat: interactive TUI, self-update & native settings; apply community bug fixes
Interactive terminal UI (Textual, default on a TTY)
- Category browser with live tool counts; type to search EVERY tool across all
  categories; up/down move, Enter open, left/Esc back; `/` opens a command palette.
- Tool screen gates Run/Install/Uninstall behind a confirm, dropping to a real
  TTY so a tool can't crash the UI; Open-repo is http(s)-guarded.
- The engine is unchanged; `--classic` keeps the full prompt_toolkit REPL and the
  headless `--engagement` orchestrator is untouched.

Update awareness + self-update helper
- Cached-daily GitHub Releases check (offline-safe, opt-out via
  HACKINGTOOL_NO_UPDATE_CHECK / update_check config); shows an "update available"
  line on the main screen via a background worker (never blocks first render).
- `/update` detects the install method (pipx/pip/apt/docker/source) and shows the
  exact upgrade command to copy - it never runs it.

Native settings + config hygiene
- `/update`/`/config` run as in-TUI screens instead of suspending to
  prompt_toolkit (which raised "event loop already running" nested under Textual).
- Sponsor feed URL moved from user config to a fixed code constant (SPONSORS_URL);
  update_check is now a proper bool toggle.

Docker / README
- Docker image references aligned to hardikzinzu/hackingtool.
- README refreshed for the interactive UI; first screenshot replaced with the new UI.

Community-reported bug fixes (verified still present in current code)
- Data safety: atomic JSON/YAML writes (#773, #765); malformed config.json no
  longer crashes load/import (#775); UTF-8 for catalog/settings IO (#766);
  findings parsers skip non-object/typed records instead of aborting (#768);
  pipeline decodes invalid bytes and salvages timed-out evidence (#771, #770).
- AI layer: reject null/non-text provider responses (#778); auto-mode connection
  test honors the Ollama fallback (#779); settings stay responsive during the AI
  probe (#780); one findings snapshot per AI report (#772).
- CLI/REPL: `@nmap`/`@sqlmap` resolve canonically instead of fuzzy mis-hits (#767);
  bare `/` no longer crashes the REPL (#761); bad/incomplete args exit non-zero
  instead of opening the menu (#763); search/tag result #99 is reachable (#762);
  background pane creation failures are reported, not shown as "started" (#777);
  config/API-key save failures surface without closing settings (#776).
- Misc: .dockerignore keeps README.md for the build (#781); PortScan prompt markup
  fixed (#698); uninstall command lines use [warning] not [error] (#666, #663);
  untrusted-output fence can't be broken out of + script import fix (#757).
2026-10-15 19:01:16 +05:30

57 lines
2.2 KiB
TOML

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "hackingtool"
dynamic = ["version"] # single-sourced from constants.VERSION
description = "All-in-one hacking tool launcher for security researchers and pentesters"
readme = "README.md"
requires-python = ">=3.10" # floor: code uses 3.10 union syntax; no upper cap so newer Pythons work
license = { text = "MIT" }
authors = [{ name = "Z4nzu" }]
keywords = ["security", "pentesting", "hacking", "recon", "osint", "cli"]
dependencies = ["rich>=13.0.0", "pyyaml>=6.0", "platformdirs>=4.0", "prompt_toolkit>=3.0.0", "python-dotenv>=1.0.0", "textual>=8.2"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Information Technology",
"License :: OSI Approved :: MIT License",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Security",
]
[project.urls]
Homepage = "https://github.com/Z4nzu/hackingtool"
Repository = "https://github.com/Z4nzu/hackingtool"
Issues = "https://github.com/Z4nzu/hackingtool/issues"
[project.scripts]
hackingtool = "hackingtool.cli:main"
# Dev tooling for local checks + CI (single source: `scripts/check.sh`).
# `uv run --group dev <tool>` auto-installs these into the project env.
[dependency-groups]
dev = ["pytest>=8", "ruff>=0.6"]
# src-layout: the whole app lives in src/hackingtool/ (PyPA-standard). The YAML
# catalog + pipelines ship as package data so `catalog/*.yaml` is available at
# runtime from an installed wheel (registry.py resolves them via __file__).
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
hackingtool = ["catalog/*.yaml", "pipelines/*.yaml", "skill/*.md", "tui/*.tcss", "sponsors.yaml"]
[tool.setuptools.dynamic]
version = { attr = "hackingtool.constants.VERSION" }