renance-dt 3.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.
- renance_dt-3.0.0/PKG-INFO +100 -0
- renance_dt-3.0.0/README.md +82 -0
- renance_dt-3.0.0/dt_cli/__init__.py +1 -0
- renance_dt-3.0.0/dt_cli/cli.py +149 -0
- renance_dt-3.0.0/dt_cli/commands/__init__.py +1 -0
- renance_dt-3.0.0/dt_cli/commands/check.py +60 -0
- renance_dt-3.0.0/dt_cli/commands/crypto.py +36 -0
- renance_dt-3.0.0/dt_cli/commands/deploy.py +81 -0
- renance_dt-3.0.0/dt_cli/commands/dev.py +36 -0
- renance_dt-3.0.0/dt_cli/commands/extra.py +171 -0
- renance_dt-3.0.0/dt_cli/commands/files.py +201 -0
- renance_dt-3.0.0/dt_cli/commands/git.py +235 -0
- renance_dt-3.0.0/dt_cli/commands/hacker.py +105 -0
- renance_dt-3.0.0/dt_cli/commands/media.py +150 -0
- renance_dt-3.0.0/dt_cli/commands/net.py +93 -0
- renance_dt-3.0.0/dt_cli/commands/phone.py +93 -0
- renance_dt-3.0.0/dt_cli/commands/pro.py +103 -0
- renance_dt-3.0.0/dt_cli/commands/system.py +220 -0
- renance_dt-3.0.0/dt_cli/commands/utils.py +121 -0
- renance_dt-3.0.0/dt_cli/config.py +58 -0
- renance_dt-3.0.0/pyproject.toml +26 -0
- renance_dt-3.0.0/renance_dt.egg-info/PKG-INFO +100 -0
- renance_dt-3.0.0/renance_dt.egg-info/SOURCES.txt +26 -0
- renance_dt-3.0.0/renance_dt.egg-info/dependency_links.txt +1 -0
- renance_dt-3.0.0/renance_dt.egg-info/entry_points.txt +2 -0
- renance_dt-3.0.0/renance_dt.egg-info/requires.txt +9 -0
- renance_dt-3.0.0/renance_dt.egg-info/top_level.txt +1 -0
- renance_dt-3.0.0/setup.cfg +4 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: renance-dt
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: Renance DevTools - One command to rule them all
|
|
5
|
+
Author-email: Renance <hello@renance.dev>
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.8
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: click>=8.1.0
|
|
10
|
+
Requires-Dist: colorama>=0.4.6
|
|
11
|
+
Requires-Dist: requests>=2.31.0
|
|
12
|
+
Requires-Dist: qrcode[pil]>=7.4.0
|
|
13
|
+
Requires-Dist: pillow>=10.0.0
|
|
14
|
+
Requires-Dist: psutil>=5.9.0
|
|
15
|
+
Requires-Dist: speedtest-cli>=2.1.3
|
|
16
|
+
Requires-Dist: mss>=9.0.1
|
|
17
|
+
Requires-Dist: pyjokes>=0.6.0
|
|
18
|
+
|
|
19
|
+
# 🚀 Renance DevTools (renance-dt) v3.0
|
|
20
|
+
|
|
21
|
+
<div align="center">
|
|
22
|
+
<h3><a href="https://renance-devtools.vercel.app">🌐 Official Website & Interactive Tutorial</a></h3>
|
|
23
|
+
<p><b>Everything you need in one command.</b></p>
|
|
24
|
+
|
|
25
|
+
[](https://pypi.org/project/renance-dt/)
|
|
26
|
+
[](https://opensource.org/licenses/MIT)
|
|
27
|
+
[](https://pypi.org/project/renance-dt/)
|
|
28
|
+
[](mailto:hello@renance.dev)
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## ⚡ Quick Start
|
|
34
|
+
|
|
35
|
+
### 1. Global Installation (Recommended)
|
|
36
|
+
Install globally via pip to use the `dt` command from anywhere:
|
|
37
|
+
```bash
|
|
38
|
+
pip install renance-dt
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Automatic Setup
|
|
42
|
+
Configure your system PATH automatically:
|
|
43
|
+
```bash
|
|
44
|
+
dt setup
|
|
45
|
+
```
|
|
46
|
+
> **Note:** Please restart your terminal after running setup.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 📥 Local Installation (Source Code)
|
|
51
|
+
|
|
52
|
+
If you have downloaded the source code, follow these steps:
|
|
53
|
+
|
|
54
|
+
### 🪟 Windows
|
|
55
|
+
1. Open the **`dt-cli`** directory.
|
|
56
|
+
2. Double-click **`install.bat`** or run: `.\install.bat`
|
|
57
|
+
|
|
58
|
+
### 🍎 macOS / 🐧 Linux / 📱 Termux
|
|
59
|
+
1. Navigate to the **`dt-cli`** directory.
|
|
60
|
+
2. Run: `chmod +x install.sh && ./install.sh`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 🛠️ 14 Power Categories (200+ Commands)
|
|
65
|
+
|
|
66
|
+
Renance DevTools is a massive ecosystem. Run `dt help` to see the full dashboard.
|
|
67
|
+
|
|
68
|
+
### 📁 1. High-Speed Files (`dt fcp`, `dt search`, `dt organize`)
|
|
69
|
+
* **`dt fcp`**: Multi-threaded copy engine for moving massive folders up to 5x faster.
|
|
70
|
+
* **`dt search`**: Recursive "super-search" inside file contents.
|
|
71
|
+
* **`dt clean`**: Deep-clean build artifacts and temp files.
|
|
72
|
+
|
|
73
|
+
### 🎬 2. Media Processing (`dt join`, `dt shrink`, `dt music`)
|
|
74
|
+
* **`dt shrink`**: Compress videos for WhatsApp or Web.
|
|
75
|
+
* **`dt music`**: Extract high-quality MP3s from any video file.
|
|
76
|
+
* **`dt gif`**: Convert video clips into optimized GIFs.
|
|
77
|
+
|
|
78
|
+
### 🐙 3. Smart Git Workflow (`dt gac`, `dt repo`, `dt pr`)
|
|
79
|
+
* **`dt gac`**: The ultimate Add-Commit-Push flow in one command.
|
|
80
|
+
* **`dt repo`**: Create a GitHub repository directly from your terminal.
|
|
81
|
+
* **`dt pr`**: Create Pull Requests without leaving the CLI.
|
|
82
|
+
|
|
83
|
+
### 🕶️ 4. Hacker Mode (`dt matrix`, `dt vault`, `dt sniff`)
|
|
84
|
+
* **`dt matrix`**: Iconic falling green code effect.
|
|
85
|
+
* **`dt vault`**: Encrypt/Decrypt sensitive files with password protection.
|
|
86
|
+
* **`dt port-scan`**: Elite network diagnostic and port scanner.
|
|
87
|
+
|
|
88
|
+
### 📱 5. Phone Remote (`dt serve-phone`, `dt torch`, `dt sms`)
|
|
89
|
+
* **`dt serve-phone`**: Instantly serve local files to your phone via QR code.
|
|
90
|
+
* **`dt torch`**: Control your Android device's flashlight (via Termux).
|
|
91
|
+
* **`dt sms`**: Send messages directly from your terminal.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 📖 Official Tutorial
|
|
96
|
+
For the full interactive command dashboard and detailed usage guides, visit the official site:
|
|
97
|
+
👉 **[renance-devtools.vercel.app](https://renance-devtools.vercel.app)**
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
Built with ❤️ by **Resolutefemi**
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# 🚀 Renance DevTools (renance-dt) v3.0
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<h3><a href="https://renance-devtools.vercel.app">🌐 Official Website & Interactive Tutorial</a></h3>
|
|
5
|
+
<p><b>Everything you need in one command.</b></p>
|
|
6
|
+
|
|
7
|
+
[](https://pypi.org/project/renance-dt/)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
[](https://pypi.org/project/renance-dt/)
|
|
10
|
+
[](mailto:hello@renance.dev)
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## ⚡ Quick Start
|
|
16
|
+
|
|
17
|
+
### 1. Global Installation (Recommended)
|
|
18
|
+
Install globally via pip to use the `dt` command from anywhere:
|
|
19
|
+
```bash
|
|
20
|
+
pip install renance-dt
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Automatic Setup
|
|
24
|
+
Configure your system PATH automatically:
|
|
25
|
+
```bash
|
|
26
|
+
dt setup
|
|
27
|
+
```
|
|
28
|
+
> **Note:** Please restart your terminal after running setup.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 📥 Local Installation (Source Code)
|
|
33
|
+
|
|
34
|
+
If you have downloaded the source code, follow these steps:
|
|
35
|
+
|
|
36
|
+
### 🪟 Windows
|
|
37
|
+
1. Open the **`dt-cli`** directory.
|
|
38
|
+
2. Double-click **`install.bat`** or run: `.\install.bat`
|
|
39
|
+
|
|
40
|
+
### 🍎 macOS / 🐧 Linux / 📱 Termux
|
|
41
|
+
1. Navigate to the **`dt-cli`** directory.
|
|
42
|
+
2. Run: `chmod +x install.sh && ./install.sh`
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 🛠️ 14 Power Categories (200+ Commands)
|
|
47
|
+
|
|
48
|
+
Renance DevTools is a massive ecosystem. Run `dt help` to see the full dashboard.
|
|
49
|
+
|
|
50
|
+
### 📁 1. High-Speed Files (`dt fcp`, `dt search`, `dt organize`)
|
|
51
|
+
* **`dt fcp`**: Multi-threaded copy engine for moving massive folders up to 5x faster.
|
|
52
|
+
* **`dt search`**: Recursive "super-search" inside file contents.
|
|
53
|
+
* **`dt clean`**: Deep-clean build artifacts and temp files.
|
|
54
|
+
|
|
55
|
+
### 🎬 2. Media Processing (`dt join`, `dt shrink`, `dt music`)
|
|
56
|
+
* **`dt shrink`**: Compress videos for WhatsApp or Web.
|
|
57
|
+
* **`dt music`**: Extract high-quality MP3s from any video file.
|
|
58
|
+
* **`dt gif`**: Convert video clips into optimized GIFs.
|
|
59
|
+
|
|
60
|
+
### 🐙 3. Smart Git Workflow (`dt gac`, `dt repo`, `dt pr`)
|
|
61
|
+
* **`dt gac`**: The ultimate Add-Commit-Push flow in one command.
|
|
62
|
+
* **`dt repo`**: Create a GitHub repository directly from your terminal.
|
|
63
|
+
* **`dt pr`**: Create Pull Requests without leaving the CLI.
|
|
64
|
+
|
|
65
|
+
### 🕶️ 4. Hacker Mode (`dt matrix`, `dt vault`, `dt sniff`)
|
|
66
|
+
* **`dt matrix`**: Iconic falling green code effect.
|
|
67
|
+
* **`dt vault`**: Encrypt/Decrypt sensitive files with password protection.
|
|
68
|
+
* **`dt port-scan`**: Elite network diagnostic and port scanner.
|
|
69
|
+
|
|
70
|
+
### 📱 5. Phone Remote (`dt serve-phone`, `dt torch`, `dt sms`)
|
|
71
|
+
* **`dt serve-phone`**: Instantly serve local files to your phone via QR code.
|
|
72
|
+
* **`dt torch`**: Control your Android device's flashlight (via Termux).
|
|
73
|
+
* **`dt sms`**: Send messages directly from your terminal.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 📖 Official Tutorial
|
|
78
|
+
For the full interactive command dashboard and detailed usage guides, visit the official site:
|
|
79
|
+
👉 **[renance-devtools.vercel.app](https://renance-devtools.vercel.app)**
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
Built with ❤️ by **Resolutefemi**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.0.0"
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
try:
|
|
2
|
+
import click
|
|
3
|
+
except ImportError:
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
if "setup" not in sys.argv:
|
|
7
|
+
print("❌ Error: Renance DevTools dependencies not found.")
|
|
8
|
+
print("To fix this, please run the installer in the project folder:")
|
|
9
|
+
print(" Windows: install.bat")
|
|
10
|
+
print(" Unix: bash install.sh")
|
|
11
|
+
sys.exit(1)
|
|
12
|
+
|
|
13
|
+
from colorama import Fore, Style
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
from .commands.files import send, clean, organize, find, big, duplicate, tree, backup, where, fcp
|
|
17
|
+
from .commands.media import join, music, shrink, clip, gif, extract, compress
|
|
18
|
+
from .commands.check import check, doctor
|
|
19
|
+
from .commands.git import gac, repo, undo, pr, branch_clean, stash_all, changelog, sync, git_install, gh_login
|
|
20
|
+
from .commands.deploy import ship, login, logout, live, env_push, logs
|
|
21
|
+
from .commands.system import ports, kill_port, wifi, ip, battery, space, info, health, update_all, setup, update
|
|
22
|
+
from .commands.phone import serve_phone, torch, storage, sms, hotspot, wifi_scan, record_audio, backup_photos
|
|
23
|
+
from .commands.utils import up, qr, todo, note, timer, convert, weather, paste, pomo, shorten, status
|
|
24
|
+
from .commands.net import ping, myip, dns, scan_network, speed, whois, ip_info
|
|
25
|
+
from .commands.crypto import passgen, hash, b64encode, b64decode
|
|
26
|
+
from .commands.dev import ignore, license, readme
|
|
27
|
+
from .commands.hacker import matrix, port_scan, sniff, vault
|
|
28
|
+
from .commands.pro import screenshot, joke, json_fmt, kill_all, search, links, rename
|
|
29
|
+
from .commands.extra import extra_cmds
|
|
30
|
+
|
|
31
|
+
@click.group(invoke_without_command=True)
|
|
32
|
+
@click.pass_context
|
|
33
|
+
def cli(ctx):
|
|
34
|
+
if ctx.invoked_subcommand is None:
|
|
35
|
+
show_help()
|
|
36
|
+
|
|
37
|
+
def show_help():
|
|
38
|
+
from .config import IS_TERMUX
|
|
39
|
+
platform = "📱 Termux" if IS_TERMUX else "💻"
|
|
40
|
+
click.echo(f"\n{Fore.CYAN}{Style.BRIGHT}🚀 Renance DevTools v3.0 {platform}{Style.RESET_ALL}")
|
|
41
|
+
click.echo(f"{Fore.WHITE}Built with ❤️ by Resolutefemi\n{Style.RESET_ALL}")
|
|
42
|
+
|
|
43
|
+
all_commands = sorted(cli.list_commands(None))
|
|
44
|
+
|
|
45
|
+
categories = {
|
|
46
|
+
"📁 Files": ["fcp", "send", "clean", "organize", "find", "big", "duplicate", "tree", "backup", "where", "search", "rename", "touch2", "mkdir2", "rm2", "ls2", "pwd2", "size", "ext", "basename", "dirname", "exists", "isdir", "isfile", "count_files", "count_dirs", "md5_file", "sha1_file", "sha256_file"],
|
|
47
|
+
"🎬 Media": ["join", "music", "shrink", "clip", "gif", "extract", "compress", "screenshot", "links", "coffee"],
|
|
48
|
+
"🌐 Network": ["speed", "status", "ping", "dns", "whois", "scan-network", "myip", "ip2", "ip-info", "ip_loc", "http_get", "http_head", "http_options", "url_parse"],
|
|
49
|
+
"🕶️ Hacker": ["matrix", "vault", "port-scan", "sniff", "kill-all", "mac_addr", "ipv4_gen", "port_gen", "user_agent", "password", "pin", "port_check"],
|
|
50
|
+
"🚀 Deploy": ["deploy", "login", "logout", "live", "env-push", "logs"],
|
|
51
|
+
"🐙 Git": ["git-install", "gh", "gac", "repo", "pr", "undo", "sync", "changelog", "branch-clean", "stash-all"],
|
|
52
|
+
"💻 System": ["ports", "kill-port", "ip", "battery", "space", "info", "health", "update", "update-all", "setup", "cpu_count", "env_var", "path_list", "mem_total", "mem_avail", "disk_io", "net_io", "uptime", "whoami2", "clear2", "date2", "sleep2"],
|
|
53
|
+
"📱 Phone": ["serve-phone", "torch", "storage", "sms", "hotspot", "wifi-scan", "record-audio", "backup-photos", "wifi"],
|
|
54
|
+
"🛠️ Utils": ["shorten", "pomo", "weather", "qr", "todo", "note", "timer", "convert", "paste", "up", "json", "lorem", "hex_color", "rgb_color", "json_mock", "base64_img", "tz", "timestamp", "days_until", "week_num"],
|
|
55
|
+
"🔐 Crypto": ["passgen", "hash", "b64enc", "b64encode", "b64dec", "b64decode", "hexenc", "hexdec", "rot13", "morse", "uuid"],
|
|
56
|
+
"👨💻 Dev": ["ignore", "license", "readme", "check", "doctor", "github"],
|
|
57
|
+
"🧮 Math": ["add", "sub", "mul", "div", "mod", "pow", "sqrt", "sin", "cos", "tan", "log", "log10", "ceil", "floor", "round", "abs", "fact", "c2f", "f2c", "bmi", "mortgage", "tip", "tax", "bin2dec", "dec2bin", "hex2dec", "dec2hex", "oct2dec", "dec2oct", "kg2lb", "lb2kg", "m2ft", "ft2m"],
|
|
58
|
+
"🔤 Text": ["upper", "lower", "title", "reverse", "length", "wordcount", "slugify", "camelcase", "snakecase", "kebabcase", "urlenc", "urldec", "echo2"],
|
|
59
|
+
"🎲 Fun": ["random", "randint", "choice", "shuffle", "coin", "dice", "magic8", "rps", "catfact", "dogfact", "chuck", "yesno", "nationalize", "genderize", "bored", "bitcoin", "riddles", "advice", "quote", "trump", "kanye", "pokefact", "name_gen", "joke"]
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
import shutil
|
|
63
|
+
term_cols, _ = shutil.get_terminal_size()
|
|
64
|
+
col_width = 18
|
|
65
|
+
num_cols = max(1, term_cols // col_width)
|
|
66
|
+
|
|
67
|
+
displayed_cmds = set()
|
|
68
|
+
|
|
69
|
+
for cat_name, cmd_list in categories.items():
|
|
70
|
+
# Filter to only include commands that actually exist in cli
|
|
71
|
+
cmds = [c for c in cmd_list if c in all_commands]
|
|
72
|
+
if cmds:
|
|
73
|
+
click.echo(f"{Fore.MAGENTA}{Style.BRIGHT}{cat_name}{Style.RESET_ALL}")
|
|
74
|
+
for i in range(0, len(cmds), num_cols):
|
|
75
|
+
chunk = cmds[i:i + num_cols]
|
|
76
|
+
line = "".join(f"{Fore.GREEN}{cmd:<{col_width}}{Style.RESET_ALL}" for cmd in chunk)
|
|
77
|
+
click.echo(line)
|
|
78
|
+
click.echo("") # Empty line between categories
|
|
79
|
+
displayed_cmds.update(cmds)
|
|
80
|
+
|
|
81
|
+
# Catch any missing commands
|
|
82
|
+
remaining = sorted(list(set(all_commands) - displayed_cmds - {"help", "about"}))
|
|
83
|
+
if remaining:
|
|
84
|
+
click.echo(f"{Fore.MAGENTA}{Style.BRIGHT}📦 Uncategorized{Style.RESET_ALL}")
|
|
85
|
+
for i in range(0, len(remaining), num_cols):
|
|
86
|
+
chunk = remaining[i:i + num_cols]
|
|
87
|
+
line = "".join(f"{Fore.GREEN}{cmd:<{col_width}}{Style.RESET_ALL}" for cmd in chunk)
|
|
88
|
+
click.echo(line)
|
|
89
|
+
click.echo("")
|
|
90
|
+
|
|
91
|
+
click.echo(f"{Fore.YELLOW}Total Commands: {len(all_commands)}{Style.RESET_ALL}")
|
|
92
|
+
click.echo(f"{Fore.YELLOW}Usage: dt COMMAND [ARGS]...{Style.RESET_ALL}")
|
|
93
|
+
click.echo(f"{Fore.CYAN}Run 'dt about' for project information.\n{Style.RESET_ALL}")
|
|
94
|
+
|
|
95
|
+
@click.command()
|
|
96
|
+
def help_cmd():
|
|
97
|
+
"""Show the interactive help dashboard"""
|
|
98
|
+
show_help()
|
|
99
|
+
|
|
100
|
+
@click.command()
|
|
101
|
+
def about():
|
|
102
|
+
"""About Renance DevTools"""
|
|
103
|
+
click.echo(f"\n{Fore.CYAN}{Style.BRIGHT}🚀 Renance DevTools (renance-dt) v3.0{Style.RESET_ALL}")
|
|
104
|
+
click.echo(f"{Fore.GREEN}Built by: {Fore.WHITE}Resolutefemi")
|
|
105
|
+
click.echo(f"{Fore.GREEN}Email: {Fore.WHITE}hello@renance.dev")
|
|
106
|
+
click.echo(f"{Fore.GREEN}Status: {Fore.WHITE}Production Ready")
|
|
107
|
+
click.echo(f"\n{Fore.YELLOW}Renance DevTools is a unified CLI ecosystem designed to bridge the gap between")
|
|
108
|
+
click.echo(f"standard OS tools and developer needs. From multi-threaded copying to")
|
|
109
|
+
click.echo(f"one-click deployments and hacker-style diagnostics, it is the only")
|
|
110
|
+
click.echo(f"command you will ever need.{Style.RESET_ALL}\n")
|
|
111
|
+
|
|
112
|
+
# Register all commands
|
|
113
|
+
commands_list = [
|
|
114
|
+
send, clean, organize, find, big, duplicate, tree, backup, where, fcp,
|
|
115
|
+
join, music, shrink, clip, gif, extract, compress,
|
|
116
|
+
check, doctor,
|
|
117
|
+
gac, repo, undo, pr, branch_clean, stash_all, changelog, sync, git_install, gh_login,
|
|
118
|
+
ship, login, logout, live, env_push, logs,
|
|
119
|
+
ports, kill_port, wifi, ip, battery, space, info, health, update_all, setup, update,
|
|
120
|
+
serve_phone, torch, storage, sms, hotspot, wifi_scan, record_audio, backup_photos,
|
|
121
|
+
up, qr, todo, note, timer, convert, weather, paste, pomo, shorten, status,
|
|
122
|
+
ping, myip, dns, scan_network, speed, whois, ip_info,
|
|
123
|
+
passgen, hash, b64encode, b64decode,
|
|
124
|
+
ignore, license, readme, help_cmd, about,
|
|
125
|
+
matrix, port_scan, sniff, vault,
|
|
126
|
+
screenshot, joke, json_fmt, kill_all, search, links, rename
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
commands_list.extend(extra_cmds)
|
|
130
|
+
|
|
131
|
+
for cmd in commands_list:
|
|
132
|
+
# Rename commands for better CLI naming
|
|
133
|
+
if cmd == help_cmd:
|
|
134
|
+
cli.add_command(cmd, name='help')
|
|
135
|
+
elif cmd == ship:
|
|
136
|
+
cli.add_command(cmd, name='deploy')
|
|
137
|
+
elif cmd == json_fmt:
|
|
138
|
+
cli.add_command(cmd, name='json')
|
|
139
|
+
elif cmd == kill_all:
|
|
140
|
+
cli.add_command(cmd, name='kill-all')
|
|
141
|
+
elif cmd == port_scan:
|
|
142
|
+
cli.add_command(cmd, name='port-scan')
|
|
143
|
+
elif cmd == scan_network:
|
|
144
|
+
cli.add_command(cmd, name='scan-network')
|
|
145
|
+
else:
|
|
146
|
+
cli.add_command(cmd)
|
|
147
|
+
|
|
148
|
+
if __name__ == "__main__":
|
|
149
|
+
cli()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Commands module
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import click, sys, subprocess, os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from ..config import Colors
|
|
4
|
+
|
|
5
|
+
@click.command()
|
|
6
|
+
def check():
|
|
7
|
+
"""Run basic project checks"""
|
|
8
|
+
click.echo(f"{Colors.CYAN}Running basic checks...{Colors.RESET}")
|
|
9
|
+
|
|
10
|
+
if Path('package.json').exists():
|
|
11
|
+
click.echo(f"{Colors.GREEN}✅ Node.js project detected{Colors.RESET}")
|
|
12
|
+
elif Path('requirements.txt').exists():
|
|
13
|
+
click.echo(f"{Colors.GREEN}✅ Python project detected{Colors.RESET}")
|
|
14
|
+
elif Path('Cargo.toml').exists():
|
|
15
|
+
click.echo(f"{Colors.GREEN}✅ Rust project detected{Colors.RESET}")
|
|
16
|
+
elif Path('go.mod').exists():
|
|
17
|
+
click.echo(f"{Colors.GREEN}✅ Go project detected{Colors.RESET}")
|
|
18
|
+
else:
|
|
19
|
+
click.echo(f"{Colors.YELLOW}⚠️ No specific project configuration found (Node/Python/Rust/Go){Colors.RESET}")
|
|
20
|
+
|
|
21
|
+
if Path('.git').exists():
|
|
22
|
+
click.echo(f"{Colors.GREEN}✅ Git initialized{Colors.RESET}")
|
|
23
|
+
else:
|
|
24
|
+
click.echo(f"{Colors.YELLOW}⚠️ Git not initialized{Colors.RESET}")
|
|
25
|
+
|
|
26
|
+
@click.command()
|
|
27
|
+
def doctor():
|
|
28
|
+
"""Run comprehensive system diagnostic"""
|
|
29
|
+
click.echo(f"{Colors.CYAN}Running diagnostics...{Colors.RESET}")
|
|
30
|
+
tools = ['git', 'node', 'python', 'pip', 'ffmpeg']
|
|
31
|
+
all_good = True
|
|
32
|
+
for tool in tools:
|
|
33
|
+
try:
|
|
34
|
+
subprocess.run([tool, '-version' if tool == 'ffmpeg' else '--version'], capture_output=True, check=True)
|
|
35
|
+
click.echo(f"{Colors.GREEN}✅ {tool} is installed{Colors.RESET}")
|
|
36
|
+
except (FileNotFoundError, subprocess.CalledProcessError):
|
|
37
|
+
click.echo(f"{Colors.RED}❌ {tool} is missing or not working{Colors.RESET}")
|
|
38
|
+
if tool == 'ffmpeg':
|
|
39
|
+
click.echo(f"{Colors.YELLOW} 👉 Tip: Install ffmpeg from ffmpeg.org or via package manager (choco install ffmpeg on Windows).{Colors.RESET}")
|
|
40
|
+
all_good = False
|
|
41
|
+
|
|
42
|
+
click.echo(f"\n{Colors.CYAN}Checking Python Dependencies...{Colors.RESET}")
|
|
43
|
+
deps = ['click', 'colorama', 'requests', 'qrcode', 'PIL', 'psutil', 'speedtest', 'mss', 'pyjokes']
|
|
44
|
+
for dep in deps:
|
|
45
|
+
try:
|
|
46
|
+
if dep == 'PIL':
|
|
47
|
+
import PIL
|
|
48
|
+
elif dep == 'speedtest':
|
|
49
|
+
import speedtest
|
|
50
|
+
else:
|
|
51
|
+
__import__(dep)
|
|
52
|
+
click.echo(f"{Colors.GREEN}✅ {dep} is available{Colors.RESET}")
|
|
53
|
+
except ImportError:
|
|
54
|
+
click.echo(f"{Colors.RED}❌ {dep} is missing{Colors.RESET}")
|
|
55
|
+
all_good = False
|
|
56
|
+
|
|
57
|
+
if all_good:
|
|
58
|
+
click.echo(f"\n{Colors.CYAN}✅ Everything looks good!{Colors.RESET}")
|
|
59
|
+
else:
|
|
60
|
+
click.echo(f"\n{Colors.YELLOW}⚠️ Some tools or dependencies are missing. Run 'install.bat' to fix Python dependencies.{Colors.RESET}")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import click, random, string, hashlib, base64
|
|
2
|
+
from ..config import Colors
|
|
3
|
+
|
|
4
|
+
@click.command()
|
|
5
|
+
@click.option('--length', default=16, help='Length of password')
|
|
6
|
+
def passgen(length):
|
|
7
|
+
"""Generate a strong password"""
|
|
8
|
+
chars = string.ascii_letters + string.digits + "!@#$%^&*"
|
|
9
|
+
pwd = ''.join(random.choice(chars) for _ in range(length))
|
|
10
|
+
click.echo(f"{Colors.GREEN}Generated Password: {pwd}{Colors.RESET}")
|
|
11
|
+
|
|
12
|
+
@click.command()
|
|
13
|
+
@click.argument('text')
|
|
14
|
+
def hash(text):
|
|
15
|
+
"""Generate MD5 and SHA256 hashes"""
|
|
16
|
+
md5 = hashlib.md5(text.encode()).hexdigest()
|
|
17
|
+
sha256 = hashlib.sha256(text.encode()).hexdigest()
|
|
18
|
+
click.echo(f"{Colors.CYAN}MD5: {md5}{Colors.RESET}")
|
|
19
|
+
click.echo(f"{Colors.CYAN}SHA256: {sha256}{Colors.RESET}")
|
|
20
|
+
|
|
21
|
+
@click.command()
|
|
22
|
+
@click.argument('text')
|
|
23
|
+
def b64encode(text):
|
|
24
|
+
"""Base64 encode text"""
|
|
25
|
+
encoded = base64.b64encode(text.encode()).decode()
|
|
26
|
+
click.echo(f"{Colors.GREEN}{encoded}{Colors.RESET}")
|
|
27
|
+
|
|
28
|
+
@click.command()
|
|
29
|
+
@click.argument('data')
|
|
30
|
+
def b64decode(data):
|
|
31
|
+
"""Base64 decode text"""
|
|
32
|
+
try:
|
|
33
|
+
decoded = base64.b64decode(data).decode()
|
|
34
|
+
click.echo(f"{Colors.GREEN}{decoded}{Colors.RESET}")
|
|
35
|
+
except:
|
|
36
|
+
click.echo(f"{Colors.RED}Invalid Base64 data{Colors.RESET}")
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import click, subprocess, os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from ..config import Colors
|
|
4
|
+
|
|
5
|
+
@click.command()
|
|
6
|
+
def ship():
|
|
7
|
+
"""Deploy application (Vercel/Netlify/Render)"""
|
|
8
|
+
click.echo(f"{Colors.CYAN}🚀 Renance Deployment Engine{Colors.RESET}")
|
|
9
|
+
provider = click.prompt(f"{Colors.BLUE}Choose provider (1: Vercel, 2: Netlify, 3: Render){Colors.RESET}", type=click.Choice(['1','2','3']))
|
|
10
|
+
|
|
11
|
+
use_shell = os.name == 'nt'
|
|
12
|
+
|
|
13
|
+
if provider == '1': # Vercel
|
|
14
|
+
# Check login
|
|
15
|
+
click.echo(f"{Colors.CYAN}Checking Vercel authentication... (this may take a moment on first run){Colors.RESET}")
|
|
16
|
+
# Using --yes to bypass "Need to install..." prompt which causes hangs
|
|
17
|
+
check = subprocess.run(['npx', '--yes', 'vercel', 'whoami'], shell=use_shell, capture_output=True)
|
|
18
|
+
|
|
19
|
+
if check.returncode != 0:
|
|
20
|
+
click.echo(f"{Colors.YELLOW}You are not logged in or Vercel is not initialized.{Colors.RESET}")
|
|
21
|
+
subprocess.run(['npx', '--yes', 'vercel', 'login'], shell=use_shell)
|
|
22
|
+
|
|
23
|
+
name = click.prompt(f"{Colors.BLUE}Project Name (leave blank for auto){Colors.RESET}", default="")
|
|
24
|
+
click.echo(f"{Colors.CYAN}Deploying to Vercel...{Colors.RESET}")
|
|
25
|
+
cmd = ['npx', '--yes', 'vercel', '--prod']
|
|
26
|
+
if name: cmd.extend(['--name', name])
|
|
27
|
+
subprocess.run(cmd, shell=use_shell)
|
|
28
|
+
|
|
29
|
+
elif provider == '2': # Netlify
|
|
30
|
+
# Check login
|
|
31
|
+
click.echo(f"{Colors.CYAN}Checking Netlify authentication...{Colors.RESET}")
|
|
32
|
+
check = subprocess.run(['npx', '--yes', 'netlify-cli', 'status'], shell=use_shell, capture_output=True)
|
|
33
|
+
if b"Not logged in" in check.stdout or check.returncode != 0:
|
|
34
|
+
click.echo(f"{Colors.YELLOW}You are not logged in to Netlify.{Colors.RESET}")
|
|
35
|
+
subprocess.run(['npx', '--yes', 'netlify-cli', 'login'], shell=use_shell)
|
|
36
|
+
|
|
37
|
+
name = click.prompt(f"{Colors.BLUE}Site Name (leave blank for auto){Colors.RESET}", default="")
|
|
38
|
+
click.echo(f"{Colors.CYAN}Deploying to Netlify...{Colors.RESET}")
|
|
39
|
+
cmd = ['npx', '--yes', 'netlify-cli', 'deploy', '--prod']
|
|
40
|
+
if name: cmd.extend(['--site', name])
|
|
41
|
+
subprocess.run(cmd, shell=use_shell)
|
|
42
|
+
|
|
43
|
+
elif provider == '3': # Render
|
|
44
|
+
hook = click.prompt(f"{Colors.BLUE}Enter Render Deploy Hook URL{Colors.RESET}", default="")
|
|
45
|
+
if hook:
|
|
46
|
+
subprocess.run(['curl', '-X', 'POST', hook], shell=use_shell)
|
|
47
|
+
click.echo(f"\n{Colors.GREEN}✅ Deployment triggered on Render!{Colors.RESET}")
|
|
48
|
+
else:
|
|
49
|
+
click.echo(f"{Colors.YELLOW}Render requires a Deploy Hook.{Colors.RESET}")
|
|
50
|
+
|
|
51
|
+
@click.command()
|
|
52
|
+
def login():
|
|
53
|
+
"""Login to provider"""
|
|
54
|
+
click.echo(f"{Colors.CYAN}Logging in to Vercel...{Colors.RESET}")
|
|
55
|
+
subprocess.run(['npx', 'vercel', 'login'], shell=os.name == 'nt')
|
|
56
|
+
|
|
57
|
+
@click.command()
|
|
58
|
+
def logout():
|
|
59
|
+
"""Logout from provider"""
|
|
60
|
+
click.echo(f"{Colors.CYAN}Logging out of Vercel...{Colors.RESET}")
|
|
61
|
+
subprocess.run(['npx', 'vercel', 'logout'], shell=os.name == 'nt')
|
|
62
|
+
click.echo(f"{Colors.GREEN}✅ Logged out{Colors.RESET}")
|
|
63
|
+
|
|
64
|
+
@click.command()
|
|
65
|
+
def live():
|
|
66
|
+
"""Check live status"""
|
|
67
|
+
click.echo(f"{Colors.CYAN}Checking deployment status...{Colors.RESET}")
|
|
68
|
+
subprocess.run(['npx', 'vercel', 'ls'], shell=os.name == 'nt')
|
|
69
|
+
|
|
70
|
+
@click.command()
|
|
71
|
+
def env_push():
|
|
72
|
+
"""Push environment variables"""
|
|
73
|
+
click.echo(f"{Colors.CYAN}Pushing .env to Vercel...{Colors.RESET}")
|
|
74
|
+
subprocess.run(['npx', 'vercel', 'env', 'pull'], shell=os.name == 'nt')
|
|
75
|
+
click.echo(f"{Colors.GREEN}✅ Done{Colors.RESET}")
|
|
76
|
+
|
|
77
|
+
@click.command()
|
|
78
|
+
def logs():
|
|
79
|
+
"""View application logs"""
|
|
80
|
+
click.echo(f"{Colors.CYAN}Tailing Vercel logs...{Colors.RESET}")
|
|
81
|
+
subprocess.run(['npx', 'vercel', 'logs'], shell=os.name == 'nt')
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import click, os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from ..config import Colors
|
|
4
|
+
|
|
5
|
+
@click.command()
|
|
6
|
+
@click.argument('lang', type=click.Choice(['node', 'python', 'go', 'rust', 'flutter']))
|
|
7
|
+
def ignore(lang):
|
|
8
|
+
"""Generate .gitignore for a language"""
|
|
9
|
+
import requests
|
|
10
|
+
url = f"https://raw.githubusercontent.com/github/gitignore/master/{lang.capitalize()}.gitignore"
|
|
11
|
+
try:
|
|
12
|
+
res = requests.get(url)
|
|
13
|
+
Path('.gitignore').write_text(res.text)
|
|
14
|
+
click.echo(f"{Colors.GREEN}✅ .gitignore for {lang} created{Colors.RESET}")
|
|
15
|
+
except:
|
|
16
|
+
click.echo(f"{Colors.RED}Could not fetch gitignore{Colors.RESET}")
|
|
17
|
+
|
|
18
|
+
@click.command()
|
|
19
|
+
def license():
|
|
20
|
+
"""Add MIT License to project"""
|
|
21
|
+
name = click.prompt("Your Name")
|
|
22
|
+
year = os.datetime.now().year if hasattr(os, 'datetime') else 2026
|
|
23
|
+
mit = f"""MIT License
|
|
24
|
+
|
|
25
|
+
Copyright (c) {year} {name}
|
|
26
|
+
|
|
27
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy..."""
|
|
28
|
+
Path('LICENSE').write_text(mit)
|
|
29
|
+
click.echo(f"{Colors.GREEN}✅ LICENSE (MIT) created{Colors.RESET}")
|
|
30
|
+
|
|
31
|
+
@click.command()
|
|
32
|
+
def readme():
|
|
33
|
+
"""Generate a beautiful README template"""
|
|
34
|
+
content = "# Project Name\n\n## Description\n...\n\n## Installation\n```bash\n...\n```"
|
|
35
|
+
Path('README.md').write_text(content)
|
|
36
|
+
click.echo(f"{Colors.GREEN}✅ README.md created{Colors.RESET}")
|