karnel-termux 4.13.10 → 4.14.0

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 (133) hide show
  1. package/README.md +12 -6
  2. package/docs/ARCHITECTURE.md +1 -1
  3. package/docs/CHANGELOG.md +23 -0
  4. package/docs/README.md +1 -1
  5. package/docs/cli/README.md +11 -7
  6. package/install.sh +8 -2
  7. package/karnel/bin/karnel +1 -1
  8. package/karnel/cli/commands/ia.sh +7 -7
  9. package/karnel/cli/commands/install.sh +11 -8
  10. package/karnel/cli/commands/list.sh +31 -14
  11. package/karnel/cli/commands/open.sh +4 -0
  12. package/karnel/cli/commands/reinstall.sh +1 -185
  13. package/karnel/cli/commands/supabase.sh +1 -1
  14. package/karnel/cli/karnel.sh +9 -45
  15. package/karnel/modules/ai.sh +9 -32
  16. package/karnel/modules/auto.sh +0 -4
  17. package/karnel/modules/db.sh +0 -4
  18. package/karnel/modules/deploy.sh +0 -4
  19. package/karnel/modules/dev.sh +0 -4
  20. package/karnel/modules/editor.sh +0 -4
  21. package/karnel/modules/games.sh +0 -4
  22. package/karnel/modules/lang.sh +0 -4
  23. package/karnel/modules/network.sh +0 -4
  24. package/karnel/modules/npm.sh +0 -4
  25. package/karnel/modules/osint.sh +0 -4
  26. package/karnel/modules/shell.sh +3 -5
  27. package/karnel/modules/ui.sh +0 -4
  28. package/karnel/modules/utils.sh +0 -4
  29. package/karnel/tools/ai/all.sh +43 -21
  30. package/karnel/tools/ai/ampcode/install.sh +2 -2
  31. package/karnel/tools/ai/antigravity-cli/install.sh +5 -3
  32. package/karnel/tools/ai/cactus/README.md +36 -0
  33. package/karnel/tools/ai/cactus/install.sh +171 -0
  34. package/karnel/tools/ai/claude-code/README.md +2 -3
  35. package/karnel/tools/ai/claude-code/install.sh +3 -3
  36. package/karnel/tools/ai/codegraph/install.sh +37 -9
  37. package/karnel/tools/ai/codex/install.sh +1 -1
  38. package/karnel/tools/ai/command-code/install.sh +34 -5
  39. package/karnel/tools/ai/cursor-cli/install.sh +49 -5
  40. package/karnel/tools/ai/droid/README.md +2 -1
  41. package/karnel/tools/ai/droid/install.sh +9 -45
  42. package/karnel/tools/ai/engram/install.sh +1 -1
  43. package/karnel/tools/ai/gemini-cli/install.sh +1 -1
  44. package/karnel/tools/ai/goose/install.sh +30 -14
  45. package/karnel/tools/ai/hermes-agent/README.md +1 -1
  46. package/karnel/tools/ai/hermes-agent/install.sh +1 -1
  47. package/karnel/tools/ai/hugging-face/README.md +34 -0
  48. package/karnel/tools/ai/hugging-face/install.sh +129 -0
  49. package/karnel/tools/ai/keelcode/README.md +15 -0
  50. package/karnel/tools/ai/keelcode/install.sh +50 -5
  51. package/karnel/tools/ai/kilocode-cli/install.sh +74 -28
  52. package/karnel/tools/ai/kimi-code/install.sh +1 -1
  53. package/karnel/tools/ai/kiro/install.sh +16 -6
  54. package/karnel/tools/ai/mimocode/install.sh +5 -3
  55. package/karnel/tools/ai/minimax-cli/install.sh +1 -1
  56. package/karnel/tools/ai/mistral-vibe/install.sh +1 -1
  57. package/karnel/tools/ai/odysseus/install.sh +98 -25
  58. package/karnel/tools/ai/oh-my-pi/install.sh +47 -19
  59. package/karnel/tools/ai/ollama/install.sh +1 -1
  60. package/karnel/tools/ai/omni-route/README.md +4 -5
  61. package/karnel/tools/ai/omni-route/install.sh +39 -23
  62. package/karnel/tools/ai/openclaude/install.sh +1 -1
  63. package/karnel/tools/ai/openclaw/install.sh +1 -1
  64. package/karnel/tools/ai/opencode/README.md +4 -5
  65. package/karnel/tools/ai/opencode/install.sh +3 -3
  66. package/karnel/tools/ai/pi/install.sh +1 -1
  67. package/karnel/tools/ai/puter/install.sh +13 -20
  68. package/karnel/tools/ai/qoder/install.sh +2 -2
  69. package/karnel/tools/ai/qwen-code/install.sh +1 -1
  70. package/karnel/tools/deploy/netlify/install.sh +18 -2
  71. package/karnel/tools/deploy/railway/install.sh +109 -15
  72. package/karnel/tools/editor/code-server/install.sh +7 -3
  73. package/karnel/tools/editor/nvchad/install.sh +7 -3
  74. package/karnel/tools/games/arcade/install.sh +8 -15
  75. package/karnel/tools/games/buzz/install.sh +8 -16
  76. package/karnel/tools/games/ctfgod/install.sh +8 -15
  77. package/karnel/tools/games/detective/install.sh +8 -15
  78. package/karnel/tools/games/pet-friends/install.sh +8 -15
  79. package/karnel/tools/games/tamagotchi/install.sh +8 -15
  80. package/karnel/tools/lang/bun/install.sh +111 -31
  81. package/karnel/tools/network/dark/install.sh +8 -15
  82. package/karnel/tools/network/dedsec-network/install.sh +8 -15
  83. package/karnel/tools/npm/turbopack/README.md +1 -1
  84. package/karnel/tools/npm/turbopack/bin/next-turbopack +2 -2
  85. package/karnel/tools/npm/turbopack/bin/node-glibc.sh +1 -1
  86. package/karnel/tools/npm/turbopack/bin/precheck-native.js +0 -1
  87. package/karnel/tools/npm/turbopack/install.sh +92 -31
  88. package/karnel/tools/plugins/install.sh +18 -1
  89. package/karnel/tools/security/amass/install.sh +24 -13
  90. package/karnel/tools/security/burpsuite/install.sh +5 -2
  91. package/karnel/tools/security/dnsrecon/install.sh +5 -2
  92. package/karnel/tools/security/enum4linux/install.sh +5 -2
  93. package/karnel/tools/security/ffuf/install.sh +23 -9
  94. package/karnel/tools/security/gobuster/install.sh +22 -11
  95. package/karnel/tools/security/masscan/install.sh +13 -7
  96. package/karnel/tools/security/metasploit/install.sh +9 -5
  97. package/karnel/tools/security/nikto/install.sh +5 -2
  98. package/karnel/tools/security/sqlmap/install.sh +5 -2
  99. package/karnel/tools/security/subfinder/install.sh +23 -9
  100. package/karnel/tools/security/theharvester/install.sh +5 -2
  101. package/karnel/tools/security/whatweb/install.sh +5 -2
  102. package/karnel/tools/security/zap/install.sh +41 -22
  103. package/karnel/tools/ui/banner/README.md +1 -2
  104. package/karnel/tools/ui/banner/install.sh +24 -16
  105. package/karnel/tools/ui/cursor/install.sh +14 -5
  106. package/karnel/tools/ui/extra-keys/README.md +1 -2
  107. package/karnel/tools/ui/extra-keys/install.sh +14 -5
  108. package/karnel/tools/ui/font/install.sh +12 -3
  109. package/karnel/tools/utils/applaunch/install.sh +7 -14
  110. package/karnel/tools/utils/fconv/install.sh +7 -15
  111. package/karnel/tools/utils/filecheck/install.sh +7 -15
  112. package/karnel/tools/utils/notes/install.sh +7 -15
  113. package/karnel/tools/utils/passman/install.sh +7 -15
  114. package/karnel/tools/utils/qrcode/install.sh +7 -15
  115. package/karnel/tools/utils/splash/install.sh +7 -15
  116. package/karnel/tools/utils/superfile/install.sh +41 -13
  117. package/karnel/tools/utils/treex/install.sh +7 -15
  118. package/karnel/tools/utils/websites/install.sh +7 -15
  119. package/karnel/tools/utils/zork/install.sh +55 -13
  120. package/karnel/utils/downloaded-python.sh +50 -0
  121. package/karnel/utils/log.sh +0 -143
  122. package/karnel/utils/tools.sh +8 -1
  123. package/karnel/utils/uninstall.sh +10 -0
  124. package/package.json +1 -1
  125. package/scripts/npm-install.js +5 -3
  126. package/karnel/tools/games/arcade/arcade.py +0 -193
  127. package/karnel/tools/games/buzz/buzz.py +0 -1264
  128. package/karnel/tools/games/ctfgod/ctfgod.py +0 -1576
  129. package/karnel/tools/games/detective/detective.py +0 -2091
  130. package/karnel/tools/games/pet-friends/pet-friends.py +0 -42677
  131. package/karnel/tools/games/tamagotchi/tamagotchi.py +0 -1224
  132. package/karnel/tools/network/dark/dark.py +0 -709
  133. package/karnel/tools/network/dedsec-network/dedsec-network.py +0 -709
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.13.10-0078D4?style=for-the-badge" alt="Version">
11
+ <img src="https://img.shields.io/badge/version-4.14.0-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">
@@ -33,7 +33,7 @@
33
33
 
34
34
  Created by **Israel Marques**.
35
35
 
36
- - **41 AI agents** for coding — Claude, Gemini, OpenCode, KeelCode, Qoder, Ollama, Goose, Factory Droid, Cline, Puter, OmniRoute and more
36
+ - **43 AI tools** — Claude, Gemini, OpenCode, Cactus, Hugging Face, Ollama, KeelCode, Goose, Factory Droid and more
37
37
  - **8 languages** — Node.js, Python, Go, Rust, C/C++, PHP, Perl, Bun
38
38
  - **5 databases** — PostgreSQL, MariaDB, SQLite, MongoDB, Redis
39
39
  - **22 dev tools** — gh, curl, fzf, bat, lsd, jq, tmux, openssh, snyk and more
@@ -115,7 +115,7 @@ karnel
115
115
  |--------|-------------|--------------|
116
116
  | `lang` | Node.js, Python, Go, Rust, C/C++, PHP, Perl, Bun | `karnel install lang` |
117
117
  | `db` | PostgreSQL, MariaDB, SQLite, MongoDB, Redis | `karnel install db` |
118
- | `ai` | 41 AI agents for coding, including KeelCode | `karnel install ai` |
118
+ | `ai` | 43 AI tools, agents, and local inference clients | `karnel install ai` |
119
119
  | `editor` | code-server (VS Code in browser), Neovim, NvChad | `karnel install editor` |
120
120
  | `dev` | gh, curl, fzf, bat, lsd, jq and more | `karnel install dev` |
121
121
  | `npm` | TypeScript, NestJS CLI, Prettier and more | `karnel install npm` |
@@ -166,6 +166,10 @@ user's permissions. They are not sandboxed. Registry plugins have reviewed
166
166
  metadata and are staged, validated, and atomically activated, but you should
167
167
  still review code you do not trust.
168
168
 
169
+ Each Karnel release pins and verifies one reviewed registry snapshot. New
170
+ registry entries become available after updating Karnel to a release that
171
+ includes that snapshot.
172
+
169
173
  Installing an arbitrary GitHub repository requires both `--unsafe` and an
170
174
  interactive confirmation:
171
175
 
@@ -255,7 +259,7 @@ See the bundled reference with `karnel show osint --robin`.
255
259
 
256
260
  ---
257
261
 
258
- ## AI Agents (41)
262
+ ## AI Tools (43)
259
263
 
260
264
  ```bash
261
265
  karnel install ai # Install all
@@ -274,6 +278,8 @@ karnel install ai --opencode --ollama # Install specific agents
274
278
  | **OpenClaude** | `--openclaude` | Open source Claude Code alternative |
275
279
  | **OpenClaw** | `--openclaw` | Personal AI assistant |
276
280
  | **Ollama** | `--ollama` | Run open source LLMs locally |
281
+ | **Cactus** | `--cactus` | On-device ARM64 inference through an isolated Ubuntu runtime |
282
+ | **Hugging Face** | `--hugging-face` | Official Hugging Face Hub CLI (`hf`) |
277
283
  | **Codex CLI** | `--codex` | OpenAI coding agent |
278
284
  | **OpenCode** | `--opencode` | Open source terminal agent |
279
285
  | **MiMoCode** | `--mimocode` | Fast open source AI agent |
@@ -304,7 +310,7 @@ karnel install ai --opencode --ollama # Install specific agents
304
310
  | **Cursor CLI** | `--cursor-cli` | Official Cursor AI agent adapted for Termux (glibc) |
305
311
  | **Oh-My-Pi** | `--oh-my-pi` | Enhanced Pi agent with native Rust addons |
306
312
  | **Goose CLI** | `--goose` | AI agent framework by Block (native Termux musl) |
307
- | **Factory Droid** | `--droid` | Enterprise AI agent (via proot-distro Ubuntu) |
313
+ | **Factory Droid** | `--droid` | Enterprise AI agent (Ubuntu proot-distro with pinned npm package) |
308
314
  | **Supercode CLI** | `--supercode-cli` | Supercode CLI — official npm package |
309
315
  | **Puter CLI** | `--puter` | Puter CLI for sites and workers |
310
316
  | **KeelCode** | `--keelcode` | Hosted coding-agent CLI |
@@ -541,7 +547,7 @@ karnel/
541
547
  │ │ └── karnel.sh # Main CLI (with TUI)
542
548
  │ ├── modules/ # Module orchestrators
543
549
  │ ├── tools/ # Tool installers
544
- │ │ ├── ai/ # 41 AI agents
550
+ │ │ ├── ai/ # 43 AI tools
545
551
  │ │ ├── lang/ # 8 languages
546
552
  │ │ ├── db/ # 5 databases
547
553
  │ │ ├── dev/ # 22 dev tools
@@ -27,7 +27,7 @@ karnel-termux/
27
27
  │ │ ├── dev.sh # Dev tools installer
28
28
  │ │ └── ...
29
29
  │ ├── tools/ # Individual tool installers
30
- │ │ ├── ai/ # 41 AI agents
30
+ │ │ ├── ai/ # 43 AI tools
31
31
  │ │ ├── lang/ # 8 languages
32
32
  │ │ ├── db/ # 5 databases
33
33
  │ │ ├── dev/ # 22 dev tools
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Documentation Changelog
2
2
 
3
+ ## 4.14.0 - 2026-08-14
4
+
5
+ - Added tested Cactus 2.0.1 support on ARM64 through Ubuntu Proot with an
6
+ isolated compatible Python runtime.
7
+ - Added the official Hugging Face `hf` CLI in an isolated native Termux
8
+ environment, using HTTP transport when the optional Xet Android wheel is
9
+ unavailable.
10
+ - Made the AI registry authoritative for TUI selection, route discovery, and
11
+ lifecycle dispatch, with contracts covering all 43 registered tools.
12
+ - Fixed AI reinstall and uninstall error propagation, unknown status handling,
13
+ binary alias summaries, ownership checks, and stale tool counts.
14
+
15
+ ## 4.13.11 - 2026-08-10
16
+
17
+ - Hardened installers to preserve user-managed commands and data, with atomic
18
+ staging for downloaded payloads and native binaries.
19
+ - Added verified plugin registry snapshots, npm release pinning, and regression
20
+ contracts for installers, ownership, and package postinstall behavior.
21
+ - Added Android-compatible Railway installation through Ubuntu Proot and
22
+ verified Railway and Netlify CLI installation on Termux.
23
+ - Synchronized CLI, GitHub README, npm metadata, and site documentation.
24
+ - Corrected the portable npm postinstall fixture used by release validation.
25
+
3
26
  ## 4.13.10 - 2026-08-06
4
27
 
5
28
  - Included root documentation in the npm package and synchronized help, TUI, and release assets.
package/docs/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  ## What is Karnel?
15
15
 
16
16
  Karnel Termux transforms your Android device into a complete development workstation.
17
- With a single CLI (`karnel`), you can install and manage 41 AI agents, 8 languages,
17
+ With a single CLI (`karnel`), you can install and manage 43 AI tools, 8 languages,
18
18
  5 databases, 22 dev tools, 12 utility tools, 2 network tools, 6 games, responsible OSINT, and more.
19
19
 
20
20
  ## Sections
@@ -22,7 +22,7 @@ karnel install <module> --tool1 --tool2 # Install specific tools only
22
22
  |-----------|-------------|
23
23
  | `lang` | Node.js, Python, Go, Rust, C/C++, PHP, Perl, Bun |
24
24
  | `db` | PostgreSQL, MariaDB, SQLite, MongoDB, Redis |
25
- | `ai` | 41 AI agents (OpenCode, Claude Code, KeelCode, Codebuff, Freebuff, Qoder, AMP Code, Cursor CLI, Oh-My-Pi, Goose, Factory Droid, Puter, Ollama, etc.) |
25
+ | `ai` | 43 AI tools (OpenCode, Cactus, Hugging Face, Claude Code, KeelCode, Goose, Factory Droid, Ollama, etc.) |
26
26
  | `editor` | code-server (VS Code in browser), Neovim, NvChad |
27
27
  | `dev` | gh, curl, fzf, bat, lsd, jq, tmux, openssh, snyk (22 tools) |
28
28
  | `npm` | TypeScript, NestJS CLI, Prettier, Vercel CLI, etc. |
@@ -36,13 +36,13 @@ karnel install <module> --tool1 --tool2 # Install specific tools only
36
36
  | `osint` | Robin v2.8 — dark web OSINT via Tor + LLM |
37
37
  | `voice` | Speech-to-agent via Termux:API |
38
38
  | `security`| Nmap, Hydra, SQLMap, Metasploit, and 26 other tools |
39
- | `plugin` | Install plugins from the official registry |
39
+ | `plugin` | Built-in manager for plugins from the official registry |
40
40
 
41
41
  ### Per-module tool flags
42
42
 
43
43
  | Module | Flags |
44
44
  |-----------|-------|
45
- | `ai` | `--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` |
45
+ | `ai` | `--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`, `--hugging-face` |
46
46
  | `db` | `--postgresql`, `--mariadb`, `--sqlite`, `--mongodb`, `--redis` |
47
47
  | `dev` | `--gh`, `--wget`, `--curl`, `--lsd`, `--bat`, `--proot`, `--ncurses`, `--tmate`, `--openssh`, `--tmux`, `--cloudflared`, `--translate`, `--html2text`, `--jq`, `--bc`, `--tree`, `--fzf`, `--imagemagick`, `--shfmt`, `--make`, `--udocker`, `--snyk` |
48
48
  | `lang` | `--bun`, `--nodejs`, `--python`, `--perl`, `--php`, `--rust`, `--clang`, `--golang` |
@@ -76,8 +76,8 @@ karnel uninstall <module> --tool1 --tool2
76
76
 
77
77
  Same modules and flags as `install`. Removes installed packages and binaries.
78
78
  User configuration is preserved by default; Karnel asks for confirmation before
79
- removing configuration paths it manages. `ui --extra-keys` is a legacy
80
- exception: it replaces and removes `~/.termux/termux.properties` directly.
79
+ removing configuration paths it manages. `ui --extra-keys` adds and removes
80
+ only its marked block in `~/.termux/termux.properties`.
81
81
 
82
82
  ```bash
83
83
  karnel uninstall ai --opencode --ollama
@@ -136,7 +136,7 @@ binary/command name, and current install status.
136
136
  |-----------|-------|
137
137
  | `lang` | 8 languages |
138
138
  | `db` | 5 databases |
139
- | `ai` | 41 AI agents |
139
+ | `ai` | 43 AI tools |
140
140
  | `editor` | 3 editor components |
141
141
  | `dev` | 22 development tools |
142
142
  | `npm` | 11 npm global modules |
@@ -205,6 +205,7 @@ Opens the official documentation page for a module using
205
205
  | `ui` | Termux UI |
206
206
  | `auto` | Automation tools |
207
207
  | `deploy` | Deploy CLIs |
208
+ | `supabase` | Supabase CLI |
208
209
  | `games` | Games |
209
210
  | `cleanup` | Cache cleanup |
210
211
  | `network` | Network tools |
@@ -778,7 +779,10 @@ The main tool modules work with `install`, `uninstall`, `reinstall`, `update`,
778
779
  `list`, `show`, and `open`:
779
780
 
780
781
  `ai` `auto` `db` `deploy` `dev` `editor` `games` `lang` `network` `npm`
781
- `osint` `security` `shell` `ui` `utils` `voice`
782
+ `osint` `security` `shell` `ui` `utils`
783
+
784
+ `voice` works with `install`, `uninstall`, `reinstall`, `update`, `list`, and
785
+ `open`; it has no per-tool README for `show`.
782
786
 
783
787
  `plugin` works with `install`, `uninstall`, `reinstall`, `update`, `list`, and
784
788
  `open`, but does not expose tool documentation through `show`.
package/install.sh CHANGED
@@ -207,6 +207,12 @@ clone_repo() {
207
207
  log_info "Developer installation detected"
208
208
  log_ok "Using local repository"
209
209
  elif [[ -d "$KARNEL_REPO/.git" ]]; then
210
+ local origin_url
211
+ origin_url="$(git -C "$KARNEL_REPO" remote get-url origin 2>/dev/null)"
212
+ if [[ "$origin_url" != "$REPO" && "$origin_url" != "${REPO%.git}" ]]; then
213
+ log_fail "Existing Karnel repository has an unexpected origin"
214
+ return 1
215
+ fi
210
216
  progress_bar 3 10
211
217
  if [[ -n "$RELEASE_REF" ]]; then
212
218
  if ! git -C "$KARNEL_REPO" fetch --depth=1 origin "refs/tags/$BRANCH" &>/dev/null ||
@@ -215,7 +221,7 @@ clone_repo() {
215
221
  return 1
216
222
  fi
217
223
  else
218
- if ! git -C "$KARNEL_REPO" pull origin "$BRANCH" &>/dev/null; then
224
+ if ! git -c core.hooksPath=/dev/null -C "$KARNEL_REPO" pull origin "$BRANCH" &>/dev/null; then
219
225
  log_fail "Failed to update existing repository"
220
226
  return 1
221
227
  fi
@@ -224,7 +230,6 @@ clone_repo() {
224
230
  echo
225
231
  log_ok "Repository updated"
226
232
  else
227
- _INSTALL_CREATED_KARNEL_REPO=true
228
233
  progress_bar 0 10
229
234
  git clone --depth=1 -b "$BRANCH" "$REPO" "$KARNEL_REPO" &>/dev/null &
230
235
  local pid=$!
@@ -235,6 +240,7 @@ clone_repo() {
235
240
  sleep 0.5
236
241
  done
237
242
  wait "$pid" || { log_fail "Failed to clone repository"; _cleanup_failed; exit 1; }
243
+ _INSTALL_CREATED_KARNEL_REPO=true
238
244
  progress_bar 10 10
239
245
  echo
240
246
  log_ok "Repository cloned"
package/karnel/bin/karnel CHANGED
@@ -75,7 +75,7 @@ show_update_notification() {
75
75
  echo
76
76
  log_warn "New version available: ${D_GREEN}$new_version${D_NC} (current: ${D_CYAN}$KARNEL_VERSION${D_NC})"
77
77
  echo
78
- list_item "Run: ${D_CYAN}karnel update${D_NC} to update"
78
+ list_item "Run: ${D_CYAN}karnel update karnel${D_NC} to update"
79
79
  echo
80
80
  fi
81
81
  }
@@ -441,8 +441,12 @@ ia_routes() {
441
441
 
442
442
  local -a routes=()
443
443
 
444
- # Collect all available AI CLIs (em sincronia com AI_TOOLS_REGISTRY em tools/ai/all.sh)
445
- for cmd in qwen gemini claude vibe openclaude openclaw ollama codex opencode mimo engram codegraph pi agy mmx gentle-ai gga hermes kimi command-code codebuff freebuff kilocode kiro cline crush odysseus kimchi omni-route ctx7 openspec copilot amp cursor omp goose droid supercode puter; do
444
+ import "@/tools/ai/all"
445
+ local entry binaries cmd
446
+ for entry in "${AI_TOOLS_REGISTRY[@]}"; do
447
+ binaries="${entry##*:}"
448
+ IFS=',' read -ra route_commands <<< "$binaries"
449
+ for cmd in "${route_commands[@]}"; do
446
450
  if command -v "$cmd" &>/dev/null; then
447
451
  local path
448
452
  path=$(command -v "$cmd")
@@ -450,13 +454,9 @@ ia_routes() {
450
454
  else
451
455
  routes+=("$cmd|not installed|missing")
452
456
  fi
457
+ done
453
458
  done
454
459
 
455
- if [[ ${#routes[@]} -eq 0 ]]; then
456
- log_warn "No AI CLIs found"
457
- return 0
458
- fi
459
-
460
460
  table_start "CLI" "Path" "Status"
461
461
  for route in "${routes[@]}"; do
462
462
  local cli
@@ -188,9 +188,7 @@ _install_specific_tools() {
188
188
  local failed_count=0
189
189
  local skipped_count=0
190
190
 
191
- # These entries MUST stay in sync with AI_TOOLS_REGISTRY in karnel/tools/ai/all.sh
192
- # To add a new tool: 1) create install.sh 2) add to AI_TOOLS_REGISTRY 3) add case here
193
- # Import the registry for _validate_tool_installed
191
+ # The registry is authoritative for accepted flags and post-install binaries.
194
192
  local -A _tool_binaries=()
195
193
  local _entry _id _name _bins
196
194
  for _entry in "${AI_TOOLS_REGISTRY[@]}"; do
@@ -200,7 +198,12 @@ _install_specific_tools() {
200
198
 
201
199
  for tool in "${tools[@]}"; do
202
200
  local func_name="install_${tool//-/_}"
203
- local tool_display="${tool//-/_}"
201
+
202
+ if [[ -z "${_tool_binaries[$tool]+registered}" ]]; then
203
+ log_warn "Unknown AI tool: --$tool"
204
+ ((failed_count++))
205
+ continue
206
+ fi
204
207
 
205
208
  if declare -f "$func_name" &>/dev/null; then
206
209
  "$func_name"
@@ -233,13 +236,13 @@ _install_specific_tools() {
233
236
  ((failed_count++))
234
237
  fi
235
238
  ;;
236
- *)
237
- ((failed_count++))
238
- ;;
239
- 2)
239
+ 2)
240
240
  # Already installed (skipped)
241
241
  ((skipped_count++))
242
242
  ;;
243
+ *)
244
+ ((failed_count++))
245
+ ;;
243
246
  esac
244
247
  else
245
248
  log_warn "Function not found: $func_name"
@@ -197,7 +197,7 @@ _list_ai() {
197
197
  table_row "Cline CLI" "--cline" "cline" "$(_check_cmd "cline")"
198
198
  table_row "Odysseus" "--odysseus" "odysseus" "$(_check_cmd "odysseus")"
199
199
  table_row "Kimchi CLI" "--kimchi-code" "kimchi" "$(_check_cmd "kimchi")"
200
- table_row "omniRoute" "--omni-route" "omni-route" "$(_check_cmd "omni-route")"
200
+ table_row "omniRoute" "--omni-route" "omni-route" "$(_check_omni_route)"
201
201
  table_row "Context7 Docs" "--ctx7" "ctx7" "$(_check_cmd "ctx7")"
202
202
  table_row "OpenSpec SDD" "--openspec" "openspec" "$(_check_cmd "openspec")"
203
203
  table_row "Qoder" "--qoder" "qodercli" "$(_check_cmd "qodercli")"
@@ -206,6 +206,8 @@ _list_ai() {
206
206
  table_row "Oh-My-Pi" "--oh-my-pi" "omp" "$(_check_cmd "omp")"
207
207
  table_row "Goose CLI" "--goose" "goose" "$(_check_cmd "goose")"
208
208
  table_row "Factory Droid" "--droid" "droid" "$(_check_cmd "droid")"
209
+ table_row "Cactus" "--cactus" "cactus" "$(_check_cmd "cactus")"
210
+ table_row "Hugging Face" "--hugging-face" "hf" "$(_check_cmd "hf")"
209
211
  table_row "Copilot-Termux" "--copilot-termux" "copilot" "$(_check_cmd "copilot")"
210
212
  table_row "Supercode CLI" "--supercode-cli" "supercode" "$(_check_cmd "supercode")"
211
213
  table_row "Puter CLI" "--puter" "puter" "$(_check_cmd "puter")"
@@ -229,7 +231,7 @@ _list_editor() {
229
231
  table_start "Component" "Install Flag" "Status"
230
232
  table_row "code-server" "--code-server" "$(_check_cmd "code-server")"
231
233
  table_row "neovim" "--neovim" "$(_check_cmd "nvim")"
232
- table_row "nvchad" "--nvchad" "$(_check_cmd "nvim")"
234
+ table_row "nvchad" "--nvchad" "$(_check_nvchad)"
233
235
  table_end
234
236
 
235
237
  echo
@@ -364,9 +366,9 @@ _list_ui() {
364
366
  echo
365
367
 
366
368
  table_start "Component" "Install Flag" "Status"
367
- table_row "Meslo Nerd Font" "--font" "$(_check_file "$HOME/.termux/font.ttf")"
369
+ table_row "Meslo Nerd Font" "--font" "$(_check_font)"
368
370
  table_row "Extra Keys" "--extra-keys" "$(_check_extra_keys)"
369
- table_row "Cursor Color" "--cursor" "$(_check_file "$HOME/.termux/colors.properties")"
371
+ table_row "Cursor Color" "--cursor" "$(_check_cursor)"
370
372
  table_row "Startup Banner" "--banner" "$(_grep_config "$HOME/.zshrc" "# ===== Karnel Banner =====" "$HOME/.bashrc")"
371
373
  table_end
372
374
 
@@ -474,6 +476,22 @@ _check_cmd() {
474
476
  fi
475
477
  }
476
478
 
479
+ _check_omni_route() {
480
+ if command -v omni-route &>/dev/null && omni-route --version &>/dev/null 2>&1; then
481
+ echo -e "${D_GREEN}installed${NC}"
482
+ else
483
+ echo -e "${D_RED}not installed${NC}"
484
+ fi
485
+ }
486
+
487
+ _check_nvchad() {
488
+ if [[ -d "$KARNEL_DATA/nvchad-termux/.git" && -d "$HOME/.config/nvim" ]]; then
489
+ echo -e "${D_GREEN}installed${NC}"
490
+ else
491
+ echo -e "${D_RED}not installed${NC}"
492
+ fi
493
+ }
494
+
477
495
  # Check if any of the comma-separated commands exists
478
496
  _check_cmd_any() {
479
497
  local bin_list="$1"
@@ -498,28 +516,27 @@ _check_pkg() {
498
516
  fi
499
517
  }
500
518
 
501
- # Check if directory exists
502
- _check_dir() {
503
- local dir="$1"
504
- if [[ -d "$dir" ]]; then
519
+ _check_robin() {
520
+ if _robin_is_installed; then
505
521
  echo -e "${D_GREEN}installed${NC}"
506
522
  else
507
523
  echo -e "${D_RED}not installed${NC}"
508
524
  fi
509
525
  }
510
526
 
511
- _check_robin() {
512
- if _robin_is_installed; then
527
+ _check_font() {
528
+ local font_source
529
+ font_source="$(dirname "$KARNEL_PATH")/assets/fonts/font.ttf"
530
+ if [[ -f "$font_source" ]] && cmp -s "$font_source" "$HOME/.termux/font.ttf"; then
513
531
  echo -e "${D_GREEN}installed${NC}"
514
532
  else
515
533
  echo -e "${D_RED}not installed${NC}"
516
534
  fi
517
535
  }
518
536
 
519
- # Check if file exists
520
- _check_file() {
521
- local file="$1"
522
- if [[ -f "$file" ]]; then
537
+ _check_cursor() {
538
+ if grep -qF '# Karnel cursor begin' "$HOME/.termux/colors.properties" 2>/dev/null &&
539
+ grep -qF '# Karnel cursor end' "$HOME/.termux/colors.properties" 2>/dev/null; then
523
540
  echo -e "${D_GREEN}installed${NC}"
524
541
  else
525
542
  echo -e "${D_RED}not installed${NC}"
@@ -48,6 +48,9 @@ open_main() {
48
48
  deploy)
49
49
  url="$OPEN_BASE_URL/karnel/deploy"
50
50
  ;;
51
+ supabase)
52
+ url="$OPEN_BASE_URL/karnel/supabase"
53
+ ;;
51
54
  cleanup)
52
55
  url="$OPEN_BASE_URL/karnel/cleanup"
53
56
  ;;
@@ -129,6 +132,7 @@ open_help() {
129
132
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "ui" "Termux UI"
130
133
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "auto" "Automation tools"
131
134
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "deploy" "Deploy CLIs"
135
+ printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "supabase" "Supabase CLI"
132
136
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "games" "Games"
133
137
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "cleanup" "Cache cleanup"
134
138
  printf " ${D_GREEN}%-14s${NC} ${D_DIM}%s${NC}\n" "network" "Network tools"
@@ -182,191 +182,7 @@ _reinstall_specific_tools() {
182
182
 
183
183
  case "$module" in
184
184
  ai)
185
- import "@/tools/ai/all"
186
- local reinstalled_count=0
187
- local failed_count=0
188
-
189
- for tool in "${tools[@]}"; do
190
- case "$tool" in
191
- qwen-code)
192
- reinstall_qwen_code
193
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
194
- ;;
195
- gemini-cli)
196
- reinstall_gemini_cli
197
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
198
- ;;
199
- claude-code)
200
- reinstall_claude_code
201
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
202
- ;;
203
- mistral-vibe)
204
- reinstall_mistral_vibe
205
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
206
- ;;
207
- openclaude)
208
- reinstall_openclaude
209
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
210
- ;;
211
- openclaw)
212
- reinstall_openclaw
213
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
214
- ;;
215
- ollama)
216
- reinstall_ollama
217
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
218
- ;;
219
- codex)
220
- reinstall_codex
221
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
222
- ;;
223
- opencode)
224
- reinstall_opencode
225
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
226
- ;;
227
- kilocode-cli)
228
- reinstall_kilocode_cli
229
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
230
- ;;
231
- kimchi-code)
232
- reinstall_kimchi_code
233
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
234
- ;;
235
- mimocode)
236
- reinstall_mimocode
237
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
238
- ;;
239
- engram)
240
- reinstall_engram
241
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
242
- ;;
243
- codegraph)
244
- reinstall_codegraph
245
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
246
- ;;
247
- pi)
248
- reinstall_pi
249
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
250
- ;;
251
- antigravity-cli)
252
- reinstall_antigravity_cli
253
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
254
- ;;
255
- minimax-cli)
256
- reinstall_minimax_cli
257
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
258
- ;;
259
- gentle-ai)
260
- reinstall_gentle_ai
261
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
262
- ;;
263
- gga)
264
- reinstall_gga
265
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
266
- ;;
267
- hermes-agent)
268
- reinstall_hermes_agent
269
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
270
- ;;
271
- kimi-code)
272
- reinstall_kimi_code
273
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
274
- ;;
275
- command-code)
276
- reinstall_command_code
277
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
278
- ;;
279
- codebuff)
280
- reinstall_codebuff
281
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
282
- ;;
283
- freebuff)
284
- reinstall_freebuff
285
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
286
- ;;
287
- ctx7)
288
- reinstall_ctx7
289
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
290
- ;;
291
- openspec)
292
- reinstall_openspec
293
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
294
- ;;
295
- supercode-cli)
296
- reinstall_supercode_cli
297
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
298
- ;;
299
- puter)
300
- reinstall_puter
301
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
302
- ;;
303
- keelcode)
304
- reinstall_keelcode
305
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
306
- ;;
307
- qoder)
308
- reinstall_qoder
309
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
310
- ;;
311
- ampcode)
312
- reinstall_ampcode
313
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
314
- ;;
315
- cursor-cli)
316
- reinstall_cursor_cli
317
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
318
- ;;
319
- oh-my-pi)
320
- reinstall_oh_my_pi
321
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
322
- ;;
323
- goose)
324
- reinstall_goose
325
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
326
- ;;
327
- droid)
328
- reinstall_droid
329
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
330
- ;;
331
- copilot-termux)
332
- reinstall_copilot_termux
333
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
334
- ;;
335
- kiro)
336
- reinstall_kiro
337
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
338
- ;;
339
- crush)
340
- reinstall_crush
341
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
342
- ;;
343
- cline)
344
- reinstall_cline
345
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
346
- ;;
347
- odysseus)
348
- reinstall_odysseus
349
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
350
- ;;
351
- omni-route)
352
- reinstall_omni_route
353
- case $? in 0) ((reinstalled_count++));; 1) ((failed_count++));; esac
354
- ;;
355
- *)
356
- log_warn "Unknown AI tool: --$tool"
357
- ((failed_count++))
358
- ;;
359
- esac
360
- done
361
-
362
- echo
363
- if [[ $reinstalled_count -gt 0 ]]; then
364
- log_success "$reinstalled_count AI tool(s) reinstalled"
365
- fi
366
- if [[ $failed_count -gt 0 ]]; then
367
- log_warn "$failed_count tool(s) failed to reinstall"
368
- fi
369
- echo
185
+ _batch_tool_action "ai" "reinstall" "${tools[@]}" || return 1
370
186
  ;;
371
187
  db)
372
188
  import "@/tools/db/all"
@@ -199,7 +199,7 @@ supabase_remote() {
199
199
  log_info "For full local development, use a Linux host:"
200
200
  echo
201
201
  list_item "1. SSH into a Linux VPS, Codespaces, or local Linux machine"
202
- list_item "2. Install Docker: ${D_CYAN}curl -fsSL https://get.docker.com | sh${NC}"
202
+ list_item "2. Install Docker using the official Linux installation guide"
203
203
  list_item "3. Install Supabase CLI on that machine"
204
204
  list_item "4. Clone your project there"
205
205
  list_item "5. Run ${D_CYAN}supabase start${NC} for local stack"