karnel-termux 4.17.33 → 4.17.35
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.
- package/README.md +21 -4
- package/docs/ARCHITECTURE/index.md +1 -1
- package/docs/cli/index.md +2 -2
- package/docs/index.md +1 -1
- package/karnel/RELEASE_COMMIT +1 -1
- package/karnel/bin/karnel +19 -0
- package/karnel/cli/commands/update.sh +12 -6
- package/karnel/cli/karnel.sh +2 -1
- package/karnel/tools/auto/n8n/install.sh +1 -1
- package/karnel/tools/deploy/railway/install.sh +9 -1
- package/karnel/tools/security/amass/install.sh +7 -3
- package/karnel/tools/security/burpsuite/install.sh +8 -2
- package/karnel/tools/security/ffuf/install.sh +6 -1
- package/karnel/tools/security/gobuster/install.sh +7 -2
- package/karnel/tools/security/subfinder/install.sh +7 -3
- package/karnel/tools/security/zap/install.sh +8 -2
- package/karnel/utils/agent_actions.sh +4 -0
- package/karnel/utils/log.sh +10 -0
- package/package.json +1 -1
- package/scripts/completion.bash +3 -3
- package/scripts/completion.zsh +3 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://github.com/israelmarques1024-dotcom/karnel-termux">
|
|
11
|
-
<img src="https://img.shields.io/badge/version-4.17.
|
|
11
|
+
<img src="https://img.shields.io/badge/version-4.17.35-0078D4?style=for-the-badge" alt="Version">
|
|
12
12
|
</a>
|
|
13
13
|
<a href="https://www.npmjs.com/package/karnel-termux">
|
|
14
14
|
<img src="https://img.shields.io/npm/v/karnel-termux?style=for-the-badge&logo=npm&color=cb3837" alt="npm">
|
|
@@ -78,7 +78,7 @@ Why it's great:
|
|
|
78
78
|
### Via checksummed GitHub release (recommended)
|
|
79
79
|
|
|
80
80
|
```bash
|
|
81
|
-
version=4.17.
|
|
81
|
+
version=4.17.35
|
|
82
82
|
tmpdir=$(mktemp -d) && trap 'rm -rf "$tmpdir"' EXIT
|
|
83
83
|
base="https://github.com/israelmarques1024-dotcom/karnel-termux/releases/download/v$version"
|
|
84
84
|
curl -fsSL "$base/karnel-termux-install.sh" -o "$tmpdir/karnel-termux-install.sh"
|
|
@@ -104,6 +104,22 @@ After installation, run:
|
|
|
104
104
|
karnel
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
+
### Noninteractive mode
|
|
108
|
+
|
|
109
|
+
Use `--auto` before or after a command to approve supported confirmations and
|
|
110
|
+
select the recommended installation method without prompting. With no tool
|
|
111
|
+
flags, the whole module is installed:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
karnel --auto install ai
|
|
115
|
+
karnel install security --auto
|
|
116
|
+
karnel --auto update ai
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`--auto` does not invent required values such as API tokens, passwords, project
|
|
120
|
+
names, or voice input. It also does not replace explicit trust and legal opt-in
|
|
121
|
+
flags such as `--unsafe` or `--accept-responsible-use`.
|
|
122
|
+
|
|
107
123
|
In a terminal, running `karnel` without a command opens a curated menu for
|
|
108
124
|
common workflows. The menu is not a complete inventory of CLI commands,
|
|
109
125
|
aliases, or options; use `karnel help` and the CLI reference for the full set.
|
|
@@ -650,8 +666,9 @@ once every 24 hours; the check can use npm or GitHub and writes state under
|
|
|
650
666
|
|
|
651
667
|
The repository CI validates Bash/Zsh syntax, ShellCheck errors, CLI smoke tests,
|
|
652
668
|
version behavior, Robin contracts, plugin lifecycle contracts, and npm package
|
|
653
|
-
contents. The
|
|
654
|
-
`actions/jekyll-build-pages
|
|
669
|
+
contents. The `Publish Docs` workflow builds the GitHub Pages documentation
|
|
670
|
+
mirror with `actions/jekyll-build-pages`; the official Vite documentation site
|
|
671
|
+
is built and deployed separately through Vercel.
|
|
655
672
|
|
|
656
673
|
These checks do not install every external tool or prove behavior on every Android
|
|
657
674
|
device. Before relying on a new installer, test it in native Termux aarch64 with
|
|
@@ -33,7 +33,7 @@ karnel-termux/
|
|
|
33
33
|
│ │ ├── dev.sh # Dev tools installer
|
|
34
34
|
│ │ └── ...
|
|
35
35
|
│ ├── tools/ # Individual tool installers
|
|
36
|
-
│ │ ├── ai/ #
|
|
36
|
+
│ │ ├── ai/ # 46 AI tools
|
|
37
37
|
│ │ ├── lang/ # 8 languages
|
|
38
38
|
│ │ ├── db/ # 5 databases
|
|
39
39
|
│ │ ├── dev/ # 22 dev tools
|
package/docs/cli/index.md
CHANGED
|
@@ -29,7 +29,7 @@ karnel install <module> --tool1 --tool2 # Install specific tools only
|
|
|
29
29
|
|-----------|-------------|
|
|
30
30
|
| `lang` | Node.js, Python, Go, Rust, C/C++, PHP, Perl, Bun |
|
|
31
31
|
| `db` | PostgreSQL, MariaDB, SQLite, MongoDB, Redis |
|
|
32
|
-
| `ai` |
|
|
32
|
+
| `ai` | 46 AI tools (OpenCode, Cactus, Hugging Face, Claude Code, KeelCode, Goose, Factory Droid, 10Router, Ollama, etc.) |
|
|
33
33
|
| `editor` | code-server (VS Code in browser), Neovim, NvChad |
|
|
34
34
|
| `dev` | gh, curl, fzf, bat, lsd, jq, tmux, openssh, snyk (22 tools) |
|
|
35
35
|
| `npm` | TypeScript, NestJS CLI, Prettier, Vercel CLI, etc. |
|
|
@@ -143,7 +143,7 @@ binary/command name, and current install status.
|
|
|
143
143
|
|-----------|-------|
|
|
144
144
|
| `lang` | 8 languages |
|
|
145
145
|
| `db` | 5 databases |
|
|
146
|
-
| `ai` |
|
|
146
|
+
| `ai` | 46 AI tools |
|
|
147
147
|
| `editor` | 3 editor components |
|
|
148
148
|
| `dev` | 22 development tools |
|
|
149
149
|
| `npm` | 11 npm global modules |
|
package/docs/index.md
CHANGED
|
@@ -9,7 +9,7 @@ layout: base
|
|
|
9
9
|
## What is Karnel?
|
|
10
10
|
|
|
11
11
|
Karnel Termux transforms your Android device into a complete development workstation.
|
|
12
|
-
With a single CLI (`karnel`), you can install and manage
|
|
12
|
+
With a single CLI (`karnel`), you can install and manage 46 AI tools, 3 editors,
|
|
13
13
|
8 languages, 5 databases, 22 dev tools, 11 npm packages, 10 shell plugins,
|
|
14
14
|
4 UI components, 4 deploy CLIs, 6 games, 2 network tools, 13 utility tools,
|
|
15
15
|
30 security tools, 1 automation tool, responsible OSINT, a second brain,
|
package/karnel/RELEASE_COMMIT
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ef4116e544713bea8b0551b4c62eeecb8dd13e0e
|
package/karnel/bin/karnel
CHANGED
|
@@ -20,6 +20,20 @@ KARNEL_PATH="$(cd "$BIN_DIR/.." 2>/dev/null && pwd)" || {
|
|
|
20
20
|
# cargar bootstrap
|
|
21
21
|
source "$KARNEL_PATH/utils/bootstrap.sh"
|
|
22
22
|
|
|
23
|
+
# --auto is global and may be supplied before or after the command. Remove it
|
|
24
|
+
# before dispatch because module lifecycle parsers treat every --flag as a tool.
|
|
25
|
+
_karnel_args=()
|
|
26
|
+
for _karnel_arg in "$@"; do
|
|
27
|
+
if [[ "$_karnel_arg" == "--auto" ]]; then
|
|
28
|
+
export KARNEL_AUTO=1
|
|
29
|
+
export KARNEL_NONINTERACTIVE=1
|
|
30
|
+
export KARNEL_REMOVE_DEFAULT=y
|
|
31
|
+
else
|
|
32
|
+
_karnel_args+=("$_karnel_arg")
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
set -- "${_karnel_args[@]}"
|
|
36
|
+
|
|
23
37
|
# Informational flags must not initialize user state or trigger update checks.
|
|
24
38
|
case "${1:-}" in
|
|
25
39
|
--help|-h|--version|help|version|list|show) KARNEL_READ_ONLY=1 ;;
|
|
@@ -129,4 +143,9 @@ fi
|
|
|
129
143
|
# cargar CLI unificado (com TUI + help)
|
|
130
144
|
import "@/cli/karnel"
|
|
131
145
|
|
|
146
|
+
if [[ "${KARNEL_AUTO:-0}" == "1" && $# -eq 0 ]]; then
|
|
147
|
+
karnel_help
|
|
148
|
+
exit 0
|
|
149
|
+
fi
|
|
150
|
+
|
|
132
151
|
karnel_main "$@"
|
|
@@ -276,11 +276,7 @@ _update_try_curl() {
|
|
|
276
276
|
return 0
|
|
277
277
|
fi
|
|
278
278
|
else
|
|
279
|
-
|
|
280
|
-
rm -f "$installer"
|
|
281
|
-
log_success "Karnel-Termux updated via curl ($tag)"
|
|
282
|
-
return 0
|
|
283
|
-
fi
|
|
279
|
+
log_error "Could not verify the immutable commit for $tag"
|
|
284
280
|
fi
|
|
285
281
|
|
|
286
282
|
rm -f "$installer"
|
|
@@ -421,7 +417,17 @@ _update_show_manual() {
|
|
|
421
417
|
|
|
422
418
|
_update_karnel_repo() {
|
|
423
419
|
local repo_dir="$KARNEL_PATH/.."
|
|
424
|
-
local old_head
|
|
420
|
+
local old_head origin
|
|
421
|
+
|
|
422
|
+
origin=$(git -C "$repo_dir" remote get-url origin 2>/dev/null) || return 1
|
|
423
|
+
case "${origin%.git}" in
|
|
424
|
+
https://github.com/israelmarques1024-dotcom/karnel-termux|git@github.com:israelmarques1024-dotcom/karnel-termux) ;;
|
|
425
|
+
*) log_error "Refusing git update from an untrusted origin: $origin"; return 1 ;;
|
|
426
|
+
esac
|
|
427
|
+
if [[ -n "$(git -C "$repo_dir" status --porcelain --untracked-files=all 2>/dev/null)" ]]; then
|
|
428
|
+
log_error "Refusing git update with uncommitted framework changes"
|
|
429
|
+
return 1
|
|
430
|
+
fi
|
|
425
431
|
|
|
426
432
|
old_head=$(git -C "$repo_dir" rev-parse HEAD 2>/dev/null)
|
|
427
433
|
|
package/karnel/cli/karnel.sh
CHANGED
|
@@ -88,7 +88,8 @@ karnel_help() {
|
|
|
88
88
|
echo
|
|
89
89
|
box "◈ KARNEL v${KARNEL_VERSION} ◈"
|
|
90
90
|
echo
|
|
91
|
-
|
|
91
|
+
log_info "Usage: karnel <command> [options]"
|
|
92
|
+
log_info "Global option: --auto Run supported confirmations and selections without prompts"
|
|
92
93
|
echo
|
|
93
94
|
separator_section "Available Commands"
|
|
94
95
|
echo
|
|
@@ -88,7 +88,15 @@ _install_railway_manual() {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
_install_railway_manual_impl() {
|
|
91
|
-
|
|
91
|
+
if [[ -e "$RAILWAY_DATA_DIR" ]] && ! _railway_data_is_karnel_owned; then
|
|
92
|
+
log_error "Refusing to replace unowned Railway data: $RAILWAY_DATA_DIR"
|
|
93
|
+
return 1
|
|
94
|
+
fi
|
|
95
|
+
if [[ -e "$PREFIX/bin/railway" || -L "$PREFIX/bin/railway" ]] && ! _railway_command_is_karnel_owned; then
|
|
96
|
+
log_error "Refusing to replace unowned railway command: $PREFIX/bin/railway"
|
|
97
|
+
return 1
|
|
98
|
+
fi
|
|
99
|
+
mkdir -p "$RAILWAY_DATA_DIR" "$PREFIX/bin"
|
|
92
100
|
|
|
93
101
|
local latest_version
|
|
94
102
|
latest_version=$(curl -fsSL --connect-timeout 10 "https://api.github.com/repos/railwayapp/cli/releases/latest" 2>/dev/null | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
_AMASS_MARKER="$PREFIX/share/karnel-installers/amass"
|
|
4
4
|
_AMASS_VERSION="4.2.0"
|
|
5
|
+
_amass_package_owned() { [[ -f "$_AMASS_MARKER" && "$(<"$_AMASS_MARKER")" == 'pkg:amass' ]]; }
|
|
5
6
|
|
|
6
7
|
_amass_arch() {
|
|
7
8
|
local arch
|
|
@@ -16,7 +17,7 @@ _amass_arch() {
|
|
|
16
17
|
|
|
17
18
|
install_amass() (
|
|
18
19
|
if command -v amass &>/dev/null; then
|
|
19
|
-
if ! installer_file_owned "$PREFIX/bin/amass" "$_AMASS_MARKER"; then
|
|
20
|
+
if ! installer_file_owned "$PREFIX/bin/amass" "$_AMASS_MARKER" && ! _amass_package_owned; then
|
|
20
21
|
log_info "amass já está instalado"
|
|
21
22
|
return 2
|
|
22
23
|
fi
|
|
@@ -25,7 +26,7 @@ install_amass() (
|
|
|
25
26
|
if [ ! -f "$_AMASS_MARKER" ] &&
|
|
26
27
|
{ pkg install -y amass 2>/dev/null || apt install -y amass 2>/dev/null; }; then
|
|
27
28
|
local bin; bin="$(command -v amass)"
|
|
28
|
-
[ -n "$bin" ] &&
|
|
29
|
+
[ -n "$bin" ] && { mkdir -p "$(dirname "$_AMASS_MARKER")" && printf '%s\n' 'pkg:amass' >"$_AMASS_MARKER"; }
|
|
29
30
|
log_success "amass instalado"
|
|
30
31
|
return 0
|
|
31
32
|
fi
|
|
@@ -66,7 +67,10 @@ install_amass() (
|
|
|
66
67
|
|
|
67
68
|
uninstall_amass() {
|
|
68
69
|
log_info "Removendo amass..."
|
|
69
|
-
if
|
|
70
|
+
if _amass_package_owned; then
|
|
71
|
+
pkg uninstall -y amass 2>/dev/null || apt remove -y amass 2>/dev/null || return 1
|
|
72
|
+
rm -f "$_AMASS_MARKER"
|
|
73
|
+
elif [ -f "$_AMASS_MARKER" ]; then
|
|
70
74
|
[ "$(sha256sum "$PREFIX/bin/amass" 2>/dev/null)" = "$(<"$_AMASS_MARKER")" ] && rm -f "$PREFIX/bin/amass"
|
|
71
75
|
rm -f "$_AMASS_MARKER"
|
|
72
76
|
fi
|
|
@@ -4,6 +4,8 @@ _BURP_DIR="$PREFIX/share/burpsuite"
|
|
|
4
4
|
_BURP_JAR="burpsuite_community.jar"
|
|
5
5
|
_BURP_VERSION="2026.7.3"
|
|
6
6
|
_BURP_SHA256="c8262dc5426f38bedc490d66c5d21b6ff77d6dc6d85cefe6a66c882690134069"
|
|
7
|
+
_BURP_PACKAGE_MARKER="$PREFIX/share/karnel-installers/burpsuite"
|
|
8
|
+
_burpsuite_package_owned() { [[ -f "$_BURP_PACKAGE_MARKER" && "$(<"$_BURP_PACKAGE_MARKER")" == 'pkg:burpsuite' ]]; }
|
|
7
9
|
|
|
8
10
|
_burpsuite_owned() {
|
|
9
11
|
installer_file_owned "$PREFIX/bin/burpsuite" "$_BURP_DIR/.karnel-wrapper"
|
|
@@ -11,7 +13,7 @@ _burpsuite_owned() {
|
|
|
11
13
|
|
|
12
14
|
install_burpsuite() (
|
|
13
15
|
if command -v burpsuite &>/dev/null; then
|
|
14
|
-
if ! _burpsuite_owned; then
|
|
16
|
+
if ! _burpsuite_owned && ! _burpsuite_package_owned; then
|
|
15
17
|
log_info "burpsuite já está instalado"
|
|
16
18
|
return 2
|
|
17
19
|
fi
|
|
@@ -20,6 +22,7 @@ install_burpsuite() (
|
|
|
20
22
|
|
|
21
23
|
if [ ! -f "$_BURP_DIR/.karnel-wrapper" ] &&
|
|
22
24
|
{ pkg install -y burpsuite 2>/dev/null || apt install -y burpsuite 2>/dev/null; }; then
|
|
25
|
+
mkdir -p "$(dirname "$_BURP_PACKAGE_MARKER")" && printf '%s\n' 'pkg:burpsuite' >"$_BURP_PACKAGE_MARKER" || return 1
|
|
23
26
|
log_success "burpsuite instalado"
|
|
24
27
|
return 0
|
|
25
28
|
fi
|
|
@@ -74,7 +77,10 @@ SCRIPT
|
|
|
74
77
|
|
|
75
78
|
uninstall_burpsuite() {
|
|
76
79
|
log_info "Removendo Burp Suite..."
|
|
77
|
-
if
|
|
80
|
+
if _burpsuite_package_owned; then
|
|
81
|
+
pkg uninstall -y burpsuite 2>/dev/null || apt remove -y burpsuite 2>/dev/null || return 1
|
|
82
|
+
rm -f "$_BURP_PACKAGE_MARKER"
|
|
83
|
+
elif [ -f "$_BURP_DIR/.karnel-wrapper" ]; then
|
|
78
84
|
[ "$(sha256sum "$PREFIX/bin/burpsuite" 2>/dev/null)" = "$(<"$_BURP_DIR/.karnel-wrapper")" ] && rm -f "$PREFIX/bin/burpsuite"
|
|
79
85
|
rm -rf "$_BURP_DIR"
|
|
80
86
|
fi
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
_FFUF_MARKER="$PREFIX/share/karnel-installers/ffuf"
|
|
4
4
|
_FFUF_VERSION="2.1.0"
|
|
5
|
+
_ffuf_package_owned() { [[ -f "$_FFUF_MARKER" && "$(<"$_FFUF_MARKER")" == 'pkg:ffuf' ]]; }
|
|
5
6
|
|
|
6
7
|
inc_ffuf_arch() {
|
|
7
8
|
local arch
|
|
@@ -48,6 +49,7 @@ install_ffuf() {
|
|
|
48
49
|
fi
|
|
49
50
|
log_info "Instalando ffuf..."
|
|
50
51
|
if pkg install -y ffuf 2>/dev/null || apt install -y ffuf 2>/dev/null; then
|
|
52
|
+
mkdir -p "$(dirname "$_FFUF_MARKER")" && printf '%s\n' 'pkg:ffuf' >"$_FFUF_MARKER" || return 1
|
|
51
53
|
log_success "ffuf instalado"
|
|
52
54
|
return 0
|
|
53
55
|
fi
|
|
@@ -61,7 +63,10 @@ install_ffuf() {
|
|
|
61
63
|
|
|
62
64
|
uninstall_ffuf() {
|
|
63
65
|
log_info "Removendo ffuf..."
|
|
64
|
-
if
|
|
66
|
+
if _ffuf_package_owned; then
|
|
67
|
+
pkg uninstall -y ffuf 2>/dev/null || apt remove -y ffuf 2>/dev/null || return 1
|
|
68
|
+
rm -f "$_FFUF_MARKER"
|
|
69
|
+
elif [ -f "$_FFUF_MARKER" ]; then
|
|
65
70
|
[ "$(sha256sum "$PREFIX/bin/ffuf" 2>/dev/null)" = "$(<"$_FFUF_MARKER")" ] && rm -f "$PREFIX/bin/ffuf"
|
|
66
71
|
rm -f "$_FFUF_MARKER"
|
|
67
72
|
fi
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
_GOBUSTER_VERSION="3.6.0"
|
|
4
4
|
_GOBUSTER_DIR="$PREFIX/share/gobuster"
|
|
5
5
|
_GOBUSTER_MARKER="$PREFIX/share/karnel-installers/gobuster"
|
|
6
|
+
_gobuster_package_owned() { [[ -f "$_GOBUSTER_MARKER" && "$(<"$_GOBUSTER_MARKER")" == 'pkg:gobuster' ]]; }
|
|
6
7
|
|
|
7
8
|
_install_gobuster_bin() (
|
|
8
9
|
local arch asset checksum tmpdir archive staged_bin
|
|
@@ -36,7 +37,7 @@ _install_gobuster_bin() (
|
|
|
36
37
|
|
|
37
38
|
install_gobuster() {
|
|
38
39
|
if command -v gobuster &>/dev/null; then
|
|
39
|
-
if ! installer_file_owned "$PREFIX/bin/gobuster" "$_GOBUSTER_MARKER"; then
|
|
40
|
+
if ! installer_file_owned "$PREFIX/bin/gobuster" "$_GOBUSTER_MARKER" && ! _gobuster_package_owned; then
|
|
40
41
|
log_info "gobuster já está instalado"
|
|
41
42
|
return 2
|
|
42
43
|
fi
|
|
@@ -44,6 +45,7 @@ install_gobuster() {
|
|
|
44
45
|
log_info "Instalando gobuster..."
|
|
45
46
|
if [ ! -f "$_GOBUSTER_MARKER" ] &&
|
|
46
47
|
{ pkg install -y gobuster 2>/dev/null || apt install -y gobuster 2>/dev/null; }; then
|
|
48
|
+
mkdir -p "$(dirname "$_GOBUSTER_MARKER")" && printf '%s\n' 'pkg:gobuster' >"$_GOBUSTER_MARKER" || return 1
|
|
47
49
|
log_success "gobuster instalado"
|
|
48
50
|
return 0
|
|
49
51
|
fi
|
|
@@ -57,7 +59,10 @@ install_gobuster() {
|
|
|
57
59
|
|
|
58
60
|
uninstall_gobuster() {
|
|
59
61
|
log_info "Removendo gobuster..."
|
|
60
|
-
if
|
|
62
|
+
if _gobuster_package_owned; then
|
|
63
|
+
pkg uninstall -y gobuster 2>/dev/null || apt remove -y gobuster 2>/dev/null || return 1
|
|
64
|
+
rm -f "$_GOBUSTER_MARKER"
|
|
65
|
+
elif [ -f "$_GOBUSTER_MARKER" ]; then
|
|
61
66
|
[ "$(sha256sum "$PREFIX/bin/gobuster" 2>/dev/null)" = "$(<"$_GOBUSTER_MARKER")" ] && rm -f "$PREFIX/bin/gobuster"
|
|
62
67
|
rm -f "$_GOBUSTER_MARKER"
|
|
63
68
|
fi
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
_SUBFINDER_MARKER="$PREFIX/share/karnel-installers/subfinder"
|
|
4
4
|
_SUBFINDER_VERSION="2.6.6"
|
|
5
|
+
_subfinder_package_owned() { [[ -f "$_SUBFINDER_MARKER" && "$(<"$_SUBFINDER_MARKER")" == 'pkg:subfinder' ]]; }
|
|
5
6
|
|
|
6
7
|
_subfinder_arch() {
|
|
7
8
|
local arch
|
|
@@ -16,7 +17,7 @@ _subfinder_arch() {
|
|
|
16
17
|
|
|
17
18
|
install_subfinder() (
|
|
18
19
|
if command -v subfinder &>/dev/null; then
|
|
19
|
-
if ! installer_file_owned "$PREFIX/bin/subfinder" "$_SUBFINDER_MARKER"; then
|
|
20
|
+
if ! installer_file_owned "$PREFIX/bin/subfinder" "$_SUBFINDER_MARKER" && ! _subfinder_package_owned; then
|
|
20
21
|
log_info "subfinder já está instalado"
|
|
21
22
|
return 2
|
|
22
23
|
fi
|
|
@@ -25,7 +26,7 @@ install_subfinder() (
|
|
|
25
26
|
if [ ! -f "$_SUBFINDER_MARKER" ] &&
|
|
26
27
|
{ pkg install -y subfinder 2>/dev/null || apt install -y subfinder 2>/dev/null; }; then
|
|
27
28
|
local bin; bin="$(command -v subfinder)"
|
|
28
|
-
[ -n "$bin" ] &&
|
|
29
|
+
[ -n "$bin" ] && { mkdir -p "$(dirname "$_SUBFINDER_MARKER")" && printf '%s\n' 'pkg:subfinder' >"$_SUBFINDER_MARKER"; }
|
|
29
30
|
log_success "subfinder instalado"
|
|
30
31
|
return 0
|
|
31
32
|
fi
|
|
@@ -65,7 +66,10 @@ install_subfinder() (
|
|
|
65
66
|
|
|
66
67
|
uninstall_subfinder() {
|
|
67
68
|
log_info "Removendo subfinder..."
|
|
68
|
-
if
|
|
69
|
+
if _subfinder_package_owned; then
|
|
70
|
+
pkg uninstall -y subfinder 2>/dev/null || apt remove -y subfinder 2>/dev/null || return 1
|
|
71
|
+
rm -f "$_SUBFINDER_MARKER"
|
|
72
|
+
elif [ -f "$_SUBFINDER_MARKER" ]; then
|
|
69
73
|
[ "$(sha256sum "$PREFIX/bin/subfinder" 2>/dev/null)" = "$(<"$_SUBFINDER_MARKER")" ] && rm -f "$PREFIX/bin/subfinder"
|
|
70
74
|
rm -f "$_SUBFINDER_MARKER"
|
|
71
75
|
fi
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
_ZAP_DIR="$PREFIX/share/zap"
|
|
4
4
|
_ZAP_VERSION="2.16.1"
|
|
5
5
|
_ZAP_SHA256="5b2eb8319b085121a6e8ad50d69d67dbef8c867166f71a937bfc888d247a2ac1"
|
|
6
|
+
_ZAP_PACKAGE_MARKER="$PREFIX/share/karnel-installers/zaproxy"
|
|
7
|
+
_zap_package_owned() { [[ -f "$_ZAP_PACKAGE_MARKER" && "$(<"$_ZAP_PACKAGE_MARKER")" == 'pkg:zaproxy' ]]; }
|
|
6
8
|
|
|
7
9
|
_zap_owned() {
|
|
8
10
|
installer_file_owned "$PREFIX/bin/zap" "$_ZAP_DIR/.karnel-wrapper"
|
|
@@ -10,7 +12,7 @@ _zap_owned() {
|
|
|
10
12
|
|
|
11
13
|
install_zap() (
|
|
12
14
|
if command -v zap &>/dev/null; then
|
|
13
|
-
if ! _zap_owned; then
|
|
15
|
+
if ! _zap_owned && ! _zap_package_owned; then
|
|
14
16
|
log_info "zap já está instalado"
|
|
15
17
|
return 2
|
|
16
18
|
fi
|
|
@@ -19,6 +21,7 @@ install_zap() (
|
|
|
19
21
|
|
|
20
22
|
if [ ! -f "$_ZAP_DIR/.karnel-wrapper" ] &&
|
|
21
23
|
{ pkg install -y zaproxy 2>/dev/null || apt install -y zaproxy 2>/dev/null; }; then
|
|
24
|
+
mkdir -p "$(dirname "$_ZAP_PACKAGE_MARKER")" && printf '%s\n' 'pkg:zaproxy' >"$_ZAP_PACKAGE_MARKER" || return 1
|
|
22
25
|
log_success "zap instalado"
|
|
23
26
|
return 0
|
|
24
27
|
fi
|
|
@@ -102,7 +105,10 @@ SCRIPT
|
|
|
102
105
|
|
|
103
106
|
uninstall_zap() {
|
|
104
107
|
log_info "Removendo ZAP..."
|
|
105
|
-
if
|
|
108
|
+
if _zap_package_owned; then
|
|
109
|
+
pkg uninstall -y zaproxy 2>/dev/null || apt remove -y zaproxy 2>/dev/null || return 1
|
|
110
|
+
rm -f "$_ZAP_PACKAGE_MARKER"
|
|
111
|
+
elif [ -f "$_ZAP_DIR/.karnel-wrapper" ]; then
|
|
106
112
|
[ "$(sha256sum "$PREFIX/bin/zap" 2>/dev/null)" = "$(<"$_ZAP_DIR/.karnel-wrapper")" ] && rm -f "$PREFIX/bin/zap"
|
|
107
113
|
rm -rf "$_ZAP_DIR"
|
|
108
114
|
fi
|
|
@@ -1306,6 +1306,10 @@ agent_server_stop() {
|
|
|
1306
1306
|
# ------------------------------------------------------------
|
|
1307
1307
|
agent_confirm() {
|
|
1308
1308
|
local prompt="$1" var="$2" _val
|
|
1309
|
+
if [[ "${KARNEL_AUTO:-0}" == "1" ]]; then
|
|
1310
|
+
read -r "$var" <<<"y"
|
|
1311
|
+
return 0
|
|
1312
|
+
fi
|
|
1309
1313
|
while true; do
|
|
1310
1314
|
printf ' %b%b [%b]%b\n' "$D_YELLOW" "$prompt" "${D_GREEN}y${GRAY}/${D_RED}n${NC}" "$NC" >&2
|
|
1311
1315
|
printf ' > ' >&2
|
package/karnel/utils/log.sh
CHANGED
|
@@ -277,6 +277,11 @@ read_confirm() {
|
|
|
277
277
|
local var="$2"
|
|
278
278
|
local _val
|
|
279
279
|
|
|
280
|
+
if [[ "${KARNEL_AUTO:-0}" == "1" ]]; then
|
|
281
|
+
read -r "$var" <<<"y"
|
|
282
|
+
return 0
|
|
283
|
+
fi
|
|
284
|
+
|
|
280
285
|
if [[ ! -t 0 ]]; then
|
|
281
286
|
read -r "$var" <<<"n"
|
|
282
287
|
return 1
|
|
@@ -310,6 +315,11 @@ read_confirm_default() {
|
|
|
310
315
|
local var="$3"
|
|
311
316
|
local _val
|
|
312
317
|
|
|
318
|
+
if [[ "${KARNEL_AUTO:-0}" == "1" ]]; then
|
|
319
|
+
read -r "$var" <<<"y"
|
|
320
|
+
return 0
|
|
321
|
+
fi
|
|
322
|
+
|
|
313
323
|
if [[ ! -t 0 ]]; then
|
|
314
324
|
read -r "$var" <<<"$default"
|
|
315
325
|
[[ "$default" == "y" ]] && return 0 || return 1
|
package/package.json
CHANGED
package/scripts/completion.bash
CHANGED
|
@@ -44,7 +44,7 @@ _karnel_completions() {
|
|
|
44
44
|
local ai_tools="10router qwen-code gemini-cli claude-code mistral-vibe openclaude openclaw ollama codex opencode mimocode engram codegraph pi antigravity-cli minimax-cli gentle-ai gga hermes-agent kimi-code command-code codebuff freebuff kilocode-cli kiro crush cline odysseus kimchi-code omni-route ctx7 openspec supercode-cli puter keelcode copilot-termux qoder ampcode cursor-cli oh-my-pi goose droid cactus cactus-needle hugging-face walkie"
|
|
45
45
|
|
|
46
46
|
if [[ $cword -eq 1 ]]; then
|
|
47
|
-
COMPREPLY=($(compgen -W "$commands --help --version" -- "$cur"))
|
|
47
|
+
COMPREPLY=($(compgen -W "$commands --auto --help --version" -- "$cur"))
|
|
48
48
|
return
|
|
49
49
|
fi
|
|
50
50
|
|
|
@@ -53,14 +53,14 @@ _karnel_completions() {
|
|
|
53
53
|
if [[ $cword -eq 2 ]]; then
|
|
54
54
|
COMPREPLY=($(compgen -W "$install_targets" -- "$cur"))
|
|
55
55
|
else
|
|
56
|
-
COMPREPLY=($(compgen -W "$(_karnel_tool_flags "${words[2]}")" -- "$cur"))
|
|
56
|
+
COMPREPLY=($(compgen -W "$(_karnel_tool_flags "${words[2]}") --auto" -- "$cur"))
|
|
57
57
|
fi
|
|
58
58
|
;;
|
|
59
59
|
update)
|
|
60
60
|
if [[ $cword -eq 2 ]]; then
|
|
61
61
|
COMPREPLY=($(compgen -W "$update_targets" -- "$cur"))
|
|
62
62
|
else
|
|
63
|
-
COMPREPLY=($(compgen -W "$(_karnel_tool_flags "${words[2]}")" -- "$cur"))
|
|
63
|
+
COMPREPLY=($(compgen -W "$(_karnel_tool_flags "${words[2]}") --auto" -- "$cur"))
|
|
64
64
|
fi
|
|
65
65
|
;;
|
|
66
66
|
show)
|
package/scripts/completion.zsh
CHANGED
|
@@ -98,15 +98,16 @@ _karnel() {
|
|
|
98
98
|
|
|
99
99
|
if (( CURRENT == 2 )); then
|
|
100
100
|
_karnel_commands
|
|
101
|
+
compadd -- --auto
|
|
101
102
|
return
|
|
102
103
|
fi
|
|
103
104
|
|
|
104
105
|
case "$command" in
|
|
105
106
|
install|uninstall|reinstall)
|
|
106
|
-
if (( CURRENT == 3 )); then _karnel_modules; compadd -- supabase; else _karnel_tool_flags "${words[3]}"; fi
|
|
107
|
+
if (( CURRENT == 3 )); then _karnel_modules; compadd -- supabase; else _karnel_tool_flags "${words[3]}"; compadd -- --auto; fi
|
|
107
108
|
;;
|
|
108
109
|
update)
|
|
109
|
-
if (( CURRENT == 3 )); then _karnel_modules; compadd -- supabase karnel; else _karnel_tool_flags "${words[3]}"; fi
|
|
110
|
+
if (( CURRENT == 3 )); then _karnel_modules; compadd -- supabase karnel; else _karnel_tool_flags "${words[3]}"; compadd -- --auto; fi
|
|
110
111
|
;;
|
|
111
112
|
show)
|
|
112
113
|
if (( CURRENT == 3 )); then _karnel_modules; compadd -- backup restore; else _karnel_tool_flags "${words[3]}"; fi
|