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.
- package/README.md +12 -6
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/CHANGELOG.md +23 -0
- package/docs/README.md +1 -1
- package/docs/cli/README.md +11 -7
- package/install.sh +8 -2
- package/karnel/bin/karnel +1 -1
- package/karnel/cli/commands/ia.sh +7 -7
- package/karnel/cli/commands/install.sh +11 -8
- package/karnel/cli/commands/list.sh +31 -14
- package/karnel/cli/commands/open.sh +4 -0
- package/karnel/cli/commands/reinstall.sh +1 -185
- package/karnel/cli/commands/supabase.sh +1 -1
- package/karnel/cli/karnel.sh +9 -45
- package/karnel/modules/ai.sh +9 -32
- package/karnel/modules/auto.sh +0 -4
- package/karnel/modules/db.sh +0 -4
- package/karnel/modules/deploy.sh +0 -4
- package/karnel/modules/dev.sh +0 -4
- package/karnel/modules/editor.sh +0 -4
- package/karnel/modules/games.sh +0 -4
- package/karnel/modules/lang.sh +0 -4
- package/karnel/modules/network.sh +0 -4
- package/karnel/modules/npm.sh +0 -4
- package/karnel/modules/osint.sh +0 -4
- package/karnel/modules/shell.sh +3 -5
- package/karnel/modules/ui.sh +0 -4
- package/karnel/modules/utils.sh +0 -4
- package/karnel/tools/ai/all.sh +43 -21
- package/karnel/tools/ai/ampcode/install.sh +2 -2
- package/karnel/tools/ai/antigravity-cli/install.sh +5 -3
- package/karnel/tools/ai/cactus/README.md +36 -0
- package/karnel/tools/ai/cactus/install.sh +171 -0
- package/karnel/tools/ai/claude-code/README.md +2 -3
- package/karnel/tools/ai/claude-code/install.sh +3 -3
- package/karnel/tools/ai/codegraph/install.sh +37 -9
- package/karnel/tools/ai/codex/install.sh +1 -1
- package/karnel/tools/ai/command-code/install.sh +34 -5
- package/karnel/tools/ai/cursor-cli/install.sh +49 -5
- package/karnel/tools/ai/droid/README.md +2 -1
- package/karnel/tools/ai/droid/install.sh +9 -45
- package/karnel/tools/ai/engram/install.sh +1 -1
- package/karnel/tools/ai/gemini-cli/install.sh +1 -1
- package/karnel/tools/ai/goose/install.sh +30 -14
- package/karnel/tools/ai/hermes-agent/README.md +1 -1
- package/karnel/tools/ai/hermes-agent/install.sh +1 -1
- package/karnel/tools/ai/hugging-face/README.md +34 -0
- package/karnel/tools/ai/hugging-face/install.sh +129 -0
- package/karnel/tools/ai/keelcode/README.md +15 -0
- package/karnel/tools/ai/keelcode/install.sh +50 -5
- package/karnel/tools/ai/kilocode-cli/install.sh +74 -28
- package/karnel/tools/ai/kimi-code/install.sh +1 -1
- package/karnel/tools/ai/kiro/install.sh +16 -6
- package/karnel/tools/ai/mimocode/install.sh +5 -3
- package/karnel/tools/ai/minimax-cli/install.sh +1 -1
- package/karnel/tools/ai/mistral-vibe/install.sh +1 -1
- package/karnel/tools/ai/odysseus/install.sh +98 -25
- package/karnel/tools/ai/oh-my-pi/install.sh +47 -19
- package/karnel/tools/ai/ollama/install.sh +1 -1
- package/karnel/tools/ai/omni-route/README.md +4 -5
- package/karnel/tools/ai/omni-route/install.sh +39 -23
- package/karnel/tools/ai/openclaude/install.sh +1 -1
- package/karnel/tools/ai/openclaw/install.sh +1 -1
- package/karnel/tools/ai/opencode/README.md +4 -5
- package/karnel/tools/ai/opencode/install.sh +3 -3
- package/karnel/tools/ai/pi/install.sh +1 -1
- package/karnel/tools/ai/puter/install.sh +13 -20
- package/karnel/tools/ai/qoder/install.sh +2 -2
- package/karnel/tools/ai/qwen-code/install.sh +1 -1
- package/karnel/tools/deploy/netlify/install.sh +18 -2
- package/karnel/tools/deploy/railway/install.sh +109 -15
- package/karnel/tools/editor/code-server/install.sh +7 -3
- package/karnel/tools/editor/nvchad/install.sh +7 -3
- package/karnel/tools/games/arcade/install.sh +8 -15
- package/karnel/tools/games/buzz/install.sh +8 -16
- package/karnel/tools/games/ctfgod/install.sh +8 -15
- package/karnel/tools/games/detective/install.sh +8 -15
- package/karnel/tools/games/pet-friends/install.sh +8 -15
- package/karnel/tools/games/tamagotchi/install.sh +8 -15
- package/karnel/tools/lang/bun/install.sh +111 -31
- package/karnel/tools/network/dark/install.sh +8 -15
- package/karnel/tools/network/dedsec-network/install.sh +8 -15
- package/karnel/tools/npm/turbopack/README.md +1 -1
- package/karnel/tools/npm/turbopack/bin/next-turbopack +2 -2
- package/karnel/tools/npm/turbopack/bin/node-glibc.sh +1 -1
- package/karnel/tools/npm/turbopack/bin/precheck-native.js +0 -1
- package/karnel/tools/npm/turbopack/install.sh +92 -31
- package/karnel/tools/plugins/install.sh +18 -1
- package/karnel/tools/security/amass/install.sh +24 -13
- package/karnel/tools/security/burpsuite/install.sh +5 -2
- package/karnel/tools/security/dnsrecon/install.sh +5 -2
- package/karnel/tools/security/enum4linux/install.sh +5 -2
- package/karnel/tools/security/ffuf/install.sh +23 -9
- package/karnel/tools/security/gobuster/install.sh +22 -11
- package/karnel/tools/security/masscan/install.sh +13 -7
- package/karnel/tools/security/metasploit/install.sh +9 -5
- package/karnel/tools/security/nikto/install.sh +5 -2
- package/karnel/tools/security/sqlmap/install.sh +5 -2
- package/karnel/tools/security/subfinder/install.sh +23 -9
- package/karnel/tools/security/theharvester/install.sh +5 -2
- package/karnel/tools/security/whatweb/install.sh +5 -2
- package/karnel/tools/security/zap/install.sh +41 -22
- package/karnel/tools/ui/banner/README.md +1 -2
- package/karnel/tools/ui/banner/install.sh +24 -16
- package/karnel/tools/ui/cursor/install.sh +14 -5
- package/karnel/tools/ui/extra-keys/README.md +1 -2
- package/karnel/tools/ui/extra-keys/install.sh +14 -5
- package/karnel/tools/ui/font/install.sh +12 -3
- package/karnel/tools/utils/applaunch/install.sh +7 -14
- package/karnel/tools/utils/fconv/install.sh +7 -15
- package/karnel/tools/utils/filecheck/install.sh +7 -15
- package/karnel/tools/utils/notes/install.sh +7 -15
- package/karnel/tools/utils/passman/install.sh +7 -15
- package/karnel/tools/utils/qrcode/install.sh +7 -15
- package/karnel/tools/utils/splash/install.sh +7 -15
- package/karnel/tools/utils/superfile/install.sh +41 -13
- package/karnel/tools/utils/treex/install.sh +7 -15
- package/karnel/tools/utils/websites/install.sh +7 -15
- package/karnel/tools/utils/zork/install.sh +55 -13
- package/karnel/utils/downloaded-python.sh +50 -0
- package/karnel/utils/log.sh +0 -143
- package/karnel/utils/tools.sh +8 -1
- package/karnel/utils/uninstall.sh +10 -0
- package/package.json +1 -1
- package/scripts/npm-install.js +5 -3
- package/karnel/tools/games/arcade/arcade.py +0 -193
- package/karnel/tools/games/buzz/buzz.py +0 -1264
- package/karnel/tools/games/ctfgod/ctfgod.py +0 -1576
- package/karnel/tools/games/detective/detective.py +0 -2091
- package/karnel/tools/games/pet-friends/pet-friends.py +0 -42677
- package/karnel/tools/games/tamagotchi/tamagotchi.py +0 -1224
- package/karnel/tools/network/dark/dark.py +0 -709
- 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.
|
|
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
|
-
- **
|
|
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` |
|
|
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
|
|
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 (
|
|
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/ #
|
|
550
|
+
│ │ ├── ai/ # 43 AI tools
|
|
545
551
|
│ │ ├── lang/ # 8 languages
|
|
546
552
|
│ │ ├── db/ # 5 databases
|
|
547
553
|
│ │ ├── dev/ # 22 dev tools
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -27,7 +27,7 @@ karnel-termux/
|
|
|
27
27
|
│ │ ├── dev.sh # Dev tools installer
|
|
28
28
|
│ │ └── ...
|
|
29
29
|
│ ├── tools/ # Individual tool installers
|
|
30
|
-
│ │ ├── ai/ #
|
|
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
|
|
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
|
package/docs/cli/README.md
CHANGED
|
@@ -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` |
|
|
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` |
|
|
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`
|
|
80
|
-
|
|
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` |
|
|
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`
|
|
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
|
-
|
|
445
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
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" "$(
|
|
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" "$(
|
|
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" "$(
|
|
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" "$(
|
|
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
|
-
|
|
502
|
-
|
|
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
|
-
|
|
512
|
-
|
|
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
|
-
|
|
520
|
-
|
|
521
|
-
|
|
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
|
-
|
|
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
|
|
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"
|