karnel-termux 0.0.1

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 (258) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +454 -0
  3. package/install.sh +272 -0
  4. package/karnel/bin/karnel +77 -0
  5. package/karnel/cli/commands/brain.sh +1553 -0
  6. package/karnel/cli/commands/cleanup.sh +66 -0
  7. package/karnel/cli/commands/doctor.sh +1528 -0
  8. package/karnel/cli/commands/env.sh +233 -0
  9. package/karnel/cli/commands/help.sh +8 -0
  10. package/karnel/cli/commands/ia.sh +502 -0
  11. package/karnel/cli/commands/init.sh +1274 -0
  12. package/karnel/cli/commands/install.sh +718 -0
  13. package/karnel/cli/commands/list.sh +399 -0
  14. package/karnel/cli/commands/open.sh +106 -0
  15. package/karnel/cli/commands/pg.sh +719 -0
  16. package/karnel/cli/commands/reinstall.sh +663 -0
  17. package/karnel/cli/commands/show.sh +90 -0
  18. package/karnel/cli/commands/start.sh +54 -0
  19. package/karnel/cli/commands/status.sh +96 -0
  20. package/karnel/cli/commands/uninstall.sh +668 -0
  21. package/karnel/cli/commands/update.sh +723 -0
  22. package/karnel/cli/commands/upgrade.sh +40 -0
  23. package/karnel/cli/commands/version.sh +3 -0
  24. package/karnel/cli/commands/voice.sh +230 -0
  25. package/karnel/cli/karnel.sh +706 -0
  26. package/karnel/modules/ai.sh +135 -0
  27. package/karnel/modules/auto.sh +114 -0
  28. package/karnel/modules/db.sh +132 -0
  29. package/karnel/modules/deploy.sh +74 -0
  30. package/karnel/modules/dev.sh +148 -0
  31. package/karnel/modules/editor.sh +115 -0
  32. package/karnel/modules/lang.sh +124 -0
  33. package/karnel/modules/npm.sh +146 -0
  34. package/karnel/modules/shell.sh +338 -0
  35. package/karnel/modules/ui.sh +139 -0
  36. package/karnel/modules/voice.sh +118 -0
  37. package/karnel/tools/ai/all.sh +209 -0
  38. package/karnel/tools/ai/antigravity-cli/README.md +45 -0
  39. package/karnel/tools/ai/antigravity-cli/bin/agy +28 -0
  40. package/karnel/tools/ai/antigravity-cli/helper/agy_helper.c +39 -0
  41. package/karnel/tools/ai/antigravity-cli/install.sh +469 -0
  42. package/karnel/tools/ai/claude-code/README.md +45 -0
  43. package/karnel/tools/ai/claude-code/bin/claude +29 -0
  44. package/karnel/tools/ai/claude-code/helper/claude_helper.c +42 -0
  45. package/karnel/tools/ai/claude-code/install.sh +278 -0
  46. package/karnel/tools/ai/cline/install.sh +160 -0
  47. package/karnel/tools/ai/codegraph/README.md +43 -0
  48. package/karnel/tools/ai/codegraph/bin/codegraph +5 -0
  49. package/karnel/tools/ai/codegraph/install.sh +160 -0
  50. package/karnel/tools/ai/codex/README.md +44 -0
  51. package/karnel/tools/ai/codex/install.sh +104 -0
  52. package/karnel/tools/ai/command-code/README.md +62 -0
  53. package/karnel/tools/ai/command-code/install.sh +136 -0
  54. package/karnel/tools/ai/crush/README.md +17 -0
  55. package/karnel/tools/ai/crush/install.sh +89 -0
  56. package/karnel/tools/ai/ctx7/README.md +26 -0
  57. package/karnel/tools/ai/ctx7/install.sh +61 -0
  58. package/karnel/tools/ai/engram/README.md +44 -0
  59. package/karnel/tools/ai/engram/install.sh +127 -0
  60. package/karnel/tools/ai/freebuff/README.md +52 -0
  61. package/karnel/tools/ai/freebuff/bin/freebuff +28 -0
  62. package/karnel/tools/ai/freebuff/helper/freebuff_helper.c +47 -0
  63. package/karnel/tools/ai/freebuff/install.sh +303 -0
  64. package/karnel/tools/ai/gemini-cli/README.md +46 -0
  65. package/karnel/tools/ai/gemini-cli/install.sh +111 -0
  66. package/karnel/tools/ai/gentle-ai/README.md +42 -0
  67. package/karnel/tools/ai/gentle-ai/install.sh +253 -0
  68. package/karnel/tools/ai/gentle-ai/termux-patches.go +256 -0
  69. package/karnel/tools/ai/gga/README.md +49 -0
  70. package/karnel/tools/ai/gga/install.sh +134 -0
  71. package/karnel/tools/ai/hermes-agent/README.md +50 -0
  72. package/karnel/tools/ai/hermes-agent/install.sh +120 -0
  73. package/karnel/tools/ai/kilocode-cli/README.md +45 -0
  74. package/karnel/tools/ai/kilocode-cli/bin/kilocode +21 -0
  75. package/karnel/tools/ai/kilocode-cli/helper/kilocode_helper.c +47 -0
  76. package/karnel/tools/ai/kilocode-cli/install.sh +179 -0
  77. package/karnel/tools/ai/kimchi-code/README.md +53 -0
  78. package/karnel/tools/ai/kimchi-code/install.sh +221 -0
  79. package/karnel/tools/ai/kimi-code/README.md +45 -0
  80. package/karnel/tools/ai/kimi-code/install.sh +111 -0
  81. package/karnel/tools/ai/kiro/README.md +17 -0
  82. package/karnel/tools/ai/kiro/install.sh +134 -0
  83. package/karnel/tools/ai/mimocode/README.md +43 -0
  84. package/karnel/tools/ai/mimocode/bin/mimo +28 -0
  85. package/karnel/tools/ai/mimocode/helper/mimocode_helper.c +47 -0
  86. package/karnel/tools/ai/mimocode/install.sh +287 -0
  87. package/karnel/tools/ai/minimax-cli/README.md +45 -0
  88. package/karnel/tools/ai/minimax-cli/install.sh +111 -0
  89. package/karnel/tools/ai/mistral-vibe/README.md +46 -0
  90. package/karnel/tools/ai/mistral-vibe/install.sh +119 -0
  91. package/karnel/tools/ai/odysseus/README.md +35 -0
  92. package/karnel/tools/ai/odysseus/install.sh +198 -0
  93. package/karnel/tools/ai/ollama/README.md +44 -0
  94. package/karnel/tools/ai/ollama/install.sh +78 -0
  95. package/karnel/tools/ai/omni-route/README.md +111 -0
  96. package/karnel/tools/ai/omni-route/install.sh +165 -0
  97. package/karnel/tools/ai/openclaude/README.md +46 -0
  98. package/karnel/tools/ai/openclaude/install.sh +110 -0
  99. package/karnel/tools/ai/openclaw/README.md +47 -0
  100. package/karnel/tools/ai/openclaw/install.sh +112 -0
  101. package/karnel/tools/ai/opencode/README.md +51 -0
  102. package/karnel/tools/ai/opencode/bin/opencode +28 -0
  103. package/karnel/tools/ai/opencode/helper/opencode_helper.c +57 -0
  104. package/karnel/tools/ai/opencode/install.sh +290 -0
  105. package/karnel/tools/ai/openspec/README.md +34 -0
  106. package/karnel/tools/ai/openspec/install.sh +61 -0
  107. package/karnel/tools/ai/pi/README.md +46 -0
  108. package/karnel/tools/ai/pi/install.sh +104 -0
  109. package/karnel/tools/ai/qwen-code/README.md +45 -0
  110. package/karnel/tools/ai/qwen-code/install.sh +111 -0
  111. package/karnel/tools/auto/all.sh +57 -0
  112. package/karnel/tools/auto/n8n/README.md +47 -0
  113. package/karnel/tools/auto/n8n/install.sh +102 -0
  114. package/karnel/tools/db/all.sh +61 -0
  115. package/karnel/tools/db/mariadb/README.md +43 -0
  116. package/karnel/tools/db/mariadb/install.sh +65 -0
  117. package/karnel/tools/db/mongodb/README.md +42 -0
  118. package/karnel/tools/db/mongodb/install.sh +73 -0
  119. package/karnel/tools/db/postgresql/README.md +45 -0
  120. package/karnel/tools/db/postgresql/install.sh +65 -0
  121. package/karnel/tools/db/redis/README.md +46 -0
  122. package/karnel/tools/db/redis/install.sh +64 -0
  123. package/karnel/tools/db/sqlite/README.md +44 -0
  124. package/karnel/tools/db/sqlite/install.sh +65 -0
  125. package/karnel/tools/deploy/all.sh +43 -0
  126. package/karnel/tools/deploy/netlify/install.sh +41 -0
  127. package/karnel/tools/deploy/railway/install.sh +109 -0
  128. package/karnel/tools/deploy/vercel/install.sh +43 -0
  129. package/karnel/tools/dev/all.sh +77 -0
  130. package/karnel/tools/dev/bat/README.md +44 -0
  131. package/karnel/tools/dev/bat/install.sh +82 -0
  132. package/karnel/tools/dev/bc/README.md +44 -0
  133. package/karnel/tools/dev/bc/install.sh +82 -0
  134. package/karnel/tools/dev/cloudflared/README.md +43 -0
  135. package/karnel/tools/dev/cloudflared/install.sh +82 -0
  136. package/karnel/tools/dev/curl/README.md +43 -0
  137. package/karnel/tools/dev/curl/install.sh +82 -0
  138. package/karnel/tools/dev/fzf/README.md +44 -0
  139. package/karnel/tools/dev/fzf/install.sh +82 -0
  140. package/karnel/tools/dev/gh/README.md +43 -0
  141. package/karnel/tools/dev/gh/install.sh +82 -0
  142. package/karnel/tools/dev/html2text/README.md +44 -0
  143. package/karnel/tools/dev/html2text/install.sh +82 -0
  144. package/karnel/tools/dev/imagemagick/README.md +44 -0
  145. package/karnel/tools/dev/imagemagick/install.sh +82 -0
  146. package/karnel/tools/dev/jq/README.md +44 -0
  147. package/karnel/tools/dev/jq/install.sh +82 -0
  148. package/karnel/tools/dev/lsd/README.md +44 -0
  149. package/karnel/tools/dev/lsd/install.sh +82 -0
  150. package/karnel/tools/dev/make/README.md +44 -0
  151. package/karnel/tools/dev/make/install.sh +82 -0
  152. package/karnel/tools/dev/ncurses/README.md +42 -0
  153. package/karnel/tools/dev/ncurses/install.sh +82 -0
  154. package/karnel/tools/dev/openssh/README.md +43 -0
  155. package/karnel/tools/dev/openssh/install.sh +75 -0
  156. package/karnel/tools/dev/proot/README.md +43 -0
  157. package/karnel/tools/dev/proot/install.sh +82 -0
  158. package/karnel/tools/dev/shfmt/README.md +44 -0
  159. package/karnel/tools/dev/shfmt/install.sh +82 -0
  160. package/karnel/tools/dev/tmate/README.md +44 -0
  161. package/karnel/tools/dev/tmate/install.sh +82 -0
  162. package/karnel/tools/dev/tmux/README.md +43 -0
  163. package/karnel/tools/dev/tmux/install.sh +75 -0
  164. package/karnel/tools/dev/translate/README.md +44 -0
  165. package/karnel/tools/dev/translate/install.sh +82 -0
  166. package/karnel/tools/dev/tree/README.md +44 -0
  167. package/karnel/tools/dev/tree/install.sh +82 -0
  168. package/karnel/tools/dev/udocker/README.md +44 -0
  169. package/karnel/tools/dev/udocker/install.sh +82 -0
  170. package/karnel/tools/dev/wget/README.md +44 -0
  171. package/karnel/tools/dev/wget/install.sh +82 -0
  172. package/karnel/tools/editor/all.sh +59 -0
  173. package/karnel/tools/editor/code-server/README.md +42 -0
  174. package/karnel/tools/editor/code-server/install.sh +74 -0
  175. package/karnel/tools/editor/neovim/README.md +43 -0
  176. package/karnel/tools/editor/neovim/install.sh +64 -0
  177. package/karnel/tools/editor/nvchad/README.md +45 -0
  178. package/karnel/tools/editor/nvchad/install.sh +105 -0
  179. package/karnel/tools/lang/all.sh +63 -0
  180. package/karnel/tools/lang/clang/README.md +43 -0
  181. package/karnel/tools/lang/clang/install.sh +79 -0
  182. package/karnel/tools/lang/golang/README.md +43 -0
  183. package/karnel/tools/lang/golang/install.sh +79 -0
  184. package/karnel/tools/lang/nodejs/README.md +43 -0
  185. package/karnel/tools/lang/nodejs/install.sh +79 -0
  186. package/karnel/tools/lang/perl/README.md +43 -0
  187. package/karnel/tools/lang/perl/install.sh +79 -0
  188. package/karnel/tools/lang/php/README.md +43 -0
  189. package/karnel/tools/lang/php/install.sh +79 -0
  190. package/karnel/tools/lang/python/README.md +43 -0
  191. package/karnel/tools/lang/python/install.sh +79 -0
  192. package/karnel/tools/lang/rust/README.md +43 -0
  193. package/karnel/tools/lang/rust/install.sh +79 -0
  194. package/karnel/tools/npm/all.sh +90 -0
  195. package/karnel/tools/npm/live-server/README.md +43 -0
  196. package/karnel/tools/npm/live-server/install.sh +96 -0
  197. package/karnel/tools/npm/localtunnel/README.md +43 -0
  198. package/karnel/tools/npm/localtunnel/install.sh +112 -0
  199. package/karnel/tools/npm/markserv/README.md +43 -0
  200. package/karnel/tools/npm/markserv/install.sh +95 -0
  201. package/karnel/tools/npm/ncu/README.md +43 -0
  202. package/karnel/tools/npm/ncu/install.sh +95 -0
  203. package/karnel/tools/npm/nestjs/README.md +43 -0
  204. package/karnel/tools/npm/nestjs/install.sh +95 -0
  205. package/karnel/tools/npm/ngrok/README.md +44 -0
  206. package/karnel/tools/npm/ngrok/install.sh +95 -0
  207. package/karnel/tools/npm/prettier/README.md +43 -0
  208. package/karnel/tools/npm/prettier/install.sh +95 -0
  209. package/karnel/tools/npm/psqlformat/README.md +43 -0
  210. package/karnel/tools/npm/psqlformat/install.sh +95 -0
  211. package/karnel/tools/npm/turbopack/README.md +8 -0
  212. package/karnel/tools/npm/turbopack/install.sh +42 -0
  213. package/karnel/tools/npm/typescript/README.md +43 -0
  214. package/karnel/tools/npm/typescript/install.sh +95 -0
  215. package/karnel/tools/npm/vercel/README.md +43 -0
  216. package/karnel/tools/npm/vercel/install.sh +95 -0
  217. package/karnel/tools/shell/all.sh +67 -0
  218. package/karnel/tools/shell/better-npm/README.md +43 -0
  219. package/karnel/tools/shell/better-npm/install.sh +85 -0
  220. package/karnel/tools/shell/fzf-tab/README.md +44 -0
  221. package/karnel/tools/shell/fzf-tab/install.sh +85 -0
  222. package/karnel/tools/shell/history-substring/README.md +43 -0
  223. package/karnel/tools/shell/history-substring/install.sh +85 -0
  224. package/karnel/tools/shell/powerlevel10k/README.md +43 -0
  225. package/karnel/tools/shell/powerlevel10k/install.sh +85 -0
  226. package/karnel/tools/shell/you-should-use/README.md +43 -0
  227. package/karnel/tools/shell/you-should-use/install.sh +85 -0
  228. package/karnel/tools/shell/zsh-autopair/README.md +44 -0
  229. package/karnel/tools/shell/zsh-autopair/install.sh +85 -0
  230. package/karnel/tools/shell/zsh-autosuggestions/README.md +43 -0
  231. package/karnel/tools/shell/zsh-autosuggestions/install.sh +85 -0
  232. package/karnel/tools/shell/zsh-completions/README.md +43 -0
  233. package/karnel/tools/shell/zsh-completions/install.sh +85 -0
  234. package/karnel/tools/shell/zsh-defer/README.md +43 -0
  235. package/karnel/tools/shell/zsh-defer/install.sh +85 -0
  236. package/karnel/tools/shell/zsh-syntax-highlighting/README.md +43 -0
  237. package/karnel/tools/shell/zsh-syntax-highlighting/install.sh +72 -0
  238. package/karnel/tools/ui/all.sh +61 -0
  239. package/karnel/tools/ui/banner/README.md +42 -0
  240. package/karnel/tools/ui/banner/install.sh +160 -0
  241. package/karnel/tools/ui/cursor/README.md +42 -0
  242. package/karnel/tools/ui/cursor/install.sh +58 -0
  243. package/karnel/tools/ui/extra-keys/README.md +43 -0
  244. package/karnel/tools/ui/extra-keys/install.sh +62 -0
  245. package/karnel/tools/ui/font/README.md +43 -0
  246. package/karnel/tools/ui/font/install.sh +63 -0
  247. package/karnel/tools/voice/all.sh +27 -0
  248. package/karnel/tools/voice/install.sh +10 -0
  249. package/karnel/tools/voice/uninstall.sh +8 -0
  250. package/karnel/utils/banner.sh +492 -0
  251. package/karnel/utils/bootstrap.sh +25 -0
  252. package/karnel/utils/colors.sh +33 -0
  253. package/karnel/utils/dialogrc +30 -0
  254. package/karnel/utils/env.sh +53 -0
  255. package/karnel/utils/log.sh +567 -0
  256. package/karnel/utils/version.sh +205 -0
  257. package/package.json +42 -0
  258. package/scripts/npm-install.js +60 -0
@@ -0,0 +1,718 @@
1
+ #!/usr/bin/env bash
2
+
3
+ import "@/utils/log"
4
+ import "@/utils/colors"
5
+
6
+ # Generic tool installer helper
7
+ _install_tool() {
8
+ local tool_name="$1"
9
+ local install_func="$2"
10
+ local display_name="${3:-$tool_name}"
11
+
12
+ if command -v "$tool_name" &>/dev/null; then
13
+ log_info "$display_name is already installed"
14
+ return 2
15
+ fi
16
+
17
+ $install_func
18
+ return $?
19
+ }
20
+
21
+ # Generic module installer with progress tracking
22
+ _install_tools_in_module() {
23
+ local module="$1"
24
+ local action="${2:-install}"
25
+ shift 2
26
+ local -a tools=("$@")
27
+
28
+ local success_count=0
29
+ local failed_count=0
30
+ local total=${#tools[@]}
31
+ local current=0
32
+
33
+ progress_start "$total" "${action^}ing tools..."
34
+
35
+ for tool in "${tools[@]}"; do
36
+ ((current++))
37
+
38
+ local func_name="${action}_${tool//-/_}"
39
+ loading "${action^}ing ${tool}" "$func_name"
40
+ case $? in
41
+ 0|2) ((success_count++)) ;;
42
+ 1) ((failed_count++)) ;;
43
+ esac
44
+
45
+ progress_update "$current" "$total"
46
+ done
47
+
48
+ progress_done "$total"
49
+ if [[ $success_count -gt 0 ]]; then
50
+ log_success "$success_count tool(s) ${action}ed"
51
+ fi
52
+ if [[ $failed_count -gt 0 ]]; then
53
+ log_warn "$failed_count tool(s) failed to ${action}"
54
+ fi
55
+ echo
56
+
57
+ return 0
58
+ }
59
+
60
+ install_main() {
61
+
62
+ if [[ $# -eq 0 ]]; then
63
+ echo
64
+ box "Karnel Install"
65
+ echo
66
+ log_info "Usage: karnel install <target>"
67
+ log_info "Usage: karnel install <target> --tool1 --tool2"
68
+ echo
69
+ log_info "Available targets:"
70
+ echo
71
+ list_item "lang - Language packages (Node.js, Python, Perl, PHP, Rust, C, C++, Go)"
72
+ list_item "db - Databases (PostgreSQL, MariaDB, SQLite, MongoDB)"
73
+ list_item "ai - AI tools (OpenCode, Gentle AI, Claude Code, etc.)"
74
+ list_item "editor - Code editor (code-server)"
75
+ list_item "dev - Development tools"
76
+ list_item "npm - Node.js global modules (npm packages)"
77
+ list_item "shell - ZSH + Oh My Zsh + plugins"
78
+ list_item "ui - Termux UI (font, cursor, extra-keys, banner)"
79
+ list_item "auto - Automation Tools (n8n)"
80
+ list_item "deploy - Deploy CLIs (Vercel, Railway, Netlify)"
81
+
82
+ echo
83
+ log_info "Install specific tools with flags:"
84
+ echo
85
+ list_item "karnel install ai --qwen-code --ollama"
86
+ list_item "karnel install db --postgresql --sqlite"
87
+ list_item "karnel install dev --gh --fzf --jq"
88
+ list_item "Run ${D_CYAN}karnel list <target>${NC} to see all available tools"
89
+ echo
90
+ return
91
+ fi
92
+
93
+ # Separate module target from tool flags
94
+ local module_target=""
95
+ local -a tool_flags=()
96
+ local -a invalid_args=()
97
+
98
+ for arg in "$@"; do
99
+ if [[ "$arg" == --* ]]; then
100
+ # Remove -- prefix
101
+ local flag="${arg#--}"
102
+ tool_flags+=("$flag")
103
+ elif [[ -z "$module_target" ]]; then
104
+ module_target="$arg"
105
+ else
106
+ # Extra argument without -- is invalid
107
+ invalid_args+=("$arg")
108
+ fi
109
+ done
110
+
111
+ # If there are invalid arguments, show error and abort
112
+ if [[ ${#invalid_args[@]} -gt 0 ]]; then
113
+ log_error "Invalid arguments: ${invalid_args[*]}"
114
+ echo
115
+ log_info "To install specific tools, use -- before the name:"
116
+ log_info " ${D_CYAN}karnel install $module_target --${invalid_args[0]}${NC}"
117
+ echo
118
+ log_info "Correct example: ${D_CYAN}karnel install ai --opencode --ollama${NC}"
119
+ return 1
120
+ fi
121
+
122
+ # If no module target specified, show error
123
+ if [[ -z "$module_target" ]]; then
124
+ log_error "No target specified"
125
+ echo "Run 'karnel install' to see available targets"
126
+ return 1
127
+ fi
128
+
129
+ # If no tool flags, install entire module (original behavior)
130
+ if [[ ${#tool_flags[@]} -eq 0 ]]; then
131
+ _install_full_module "$module_target"
132
+ else
133
+ # Install specific tools
134
+ _install_specific_tools "$module_target" "${tool_flags[@]}"
135
+ fi
136
+ }
137
+
138
+ # Install entire module (original behavior)
139
+ _install_full_module() {
140
+ local target="$1"
141
+
142
+ case "$target" in
143
+ db)
144
+ import "@/modules/db"
145
+ install_db
146
+ ;;
147
+ ai)
148
+ import "@/modules/ai"
149
+ install_ai
150
+ ;;
151
+ editor)
152
+ import "@/modules/editor"
153
+ install_editor
154
+ ;;
155
+ lang)
156
+ import "@/modules/lang"
157
+ install_lang
158
+ ;;
159
+ dev)
160
+ import "@/modules/dev"
161
+ install_dev
162
+ ;;
163
+ npm)
164
+ import "@/modules/npm"
165
+ install_npm
166
+ ;;
167
+ shell)
168
+ import "@/modules/shell"
169
+ install_shell
170
+ ;;
171
+ ui)
172
+ import "@/modules/ui"
173
+ setup_ui
174
+ ;;
175
+ auto)
176
+ import "@/modules/auto"
177
+ install_auto
178
+ ;;
179
+ deploy)
180
+ import "@/modules/deploy"
181
+ install_deploy
182
+ ;;
183
+ voice)
184
+ import "@/modules/voice"
185
+ install_voice
186
+ ;;
187
+ *)
188
+ log_warn "Unknown install target: $target"
189
+ echo "Run 'karnel install' to see available targets"
190
+ ;;
191
+ esac
192
+ }
193
+
194
+ # Install specific tools within a module
195
+ _install_specific_tools() {
196
+ local module="$1"
197
+ shift
198
+ local -a tools=("$@")
199
+
200
+ case "$module" in
201
+ ai)
202
+ import "@/tools/ai/all"
203
+ local installed_count=0
204
+ local failed_count=0
205
+
206
+ # These entries MUST stay in sync with AI_TOOLS_REGISTRY in karnel/tools/ai/all.sh
207
+ # To add a new tool: 1) create install.sh 2) add to AI_TOOLS_REGISTRY 3) add case here
208
+ # Import the registry for _validate_tool_installed
209
+ local -A _tool_binaries=()
210
+ local _entry _id _name _bins
211
+ for _entry in "${AI_TOOLS_REGISTRY[@]}"; do
212
+ IFS=':' read -r _id _name _bins <<< "$_entry"
213
+ _tool_binaries["$_id"]="$_bins"
214
+ done
215
+
216
+ for tool in "${tools[@]}"; do
217
+ local func_name="install_${tool//-/_}"
218
+ local tool_display="${tool//-/_}"
219
+
220
+ if declare -f "$func_name" &>/dev/null; then
221
+ "$func_name"
222
+ local func_rc=$?
223
+
224
+ case $func_rc in
225
+ 0)
226
+ # Post-install validation: command -v for binaries
227
+ local bins="${_tool_binaries[$tool]:-$tool}"
228
+ local found_bin=""
229
+ local _bin
230
+ IFS=',' read -ra _bin_list <<< "$bins"
231
+ for _bin in "${_bin_list[@]}"; do
232
+ if command -v "$_bin" &>/dev/null; then
233
+ # Check if it is a stub
234
+ local _bin_path
235
+ _bin_path=$(command -v "$_bin")
236
+ if [ -f "$_bin_path" ] && [ -x "$_bin_path" ]; then
237
+ if ! grep -qiE "offline|unreachable|not.available|stub|indisponivel|inacessivel" "$_bin_path" 2>/dev/null || [ "$(head -c 2 "$_bin_path")" != "#!" ]; then
238
+ found_bin="$_bin"
239
+ break
240
+ fi
241
+ fi
242
+ fi
243
+ done
244
+ if [ -n "$found_bin" ]; then
245
+ ((installed_count++))
246
+ else
247
+ log_warn "$tool: binary not found in PATH after installation"
248
+ ((failed_count++))
249
+ fi
250
+ ;;
251
+ 1)
252
+ ((failed_count++))
253
+ ;;
254
+ 2)
255
+ # Already installed (skipped)
256
+ ((installed_count++))
257
+ ;;
258
+ esac
259
+ else
260
+ log_warn "Function not found: $func_name"
261
+ ((failed_count++))
262
+ fi
263
+ done
264
+
265
+ echo
266
+ if [[ $installed_count -gt 0 ]]; then
267
+ log_success "$installed_count AI tool(s) installed"
268
+ fi
269
+ if [[ $failed_count -gt 0 ]]; then
270
+ log_warn "$failed_count tool(s) failed to install"
271
+ fi
272
+ echo
273
+ ;;
274
+ db)
275
+ import "@/tools/db/all"
276
+ local installed_count=0
277
+ local failed_count=0
278
+
279
+ for tool in "${tools[@]}"; do
280
+ case "$tool" in
281
+ postgresql)
282
+ install_postgresql
283
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
284
+ ;;
285
+ mariadb)
286
+ install_mariadb
287
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
288
+ ;;
289
+ sqlite)
290
+ install_sqlite
291
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
292
+ ;;
293
+ mongodb)
294
+ install_mongodb
295
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
296
+ ;;
297
+ *)
298
+ log_warn "Unknown database: --$tool"
299
+ ;;
300
+ esac
301
+ done
302
+
303
+ echo
304
+ if [[ $installed_count -gt 0 ]]; then
305
+ log_success "$installed_count database(s) installed"
306
+ fi
307
+ if [[ $failed_count -gt 0 ]]; then
308
+ log_warn "$failed_count database(s) failed to install"
309
+ fi
310
+ echo
311
+ ;;
312
+ dev)
313
+ import "@/tools/dev/all"
314
+ local installed_count=0
315
+ local failed_count=0
316
+
317
+ for tool in "${tools[@]}"; do
318
+ case "$tool" in
319
+ gh)
320
+ install_gh
321
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
322
+ ;;
323
+ wget)
324
+ install_wget
325
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
326
+ ;;
327
+ curl)
328
+ install_curl
329
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
330
+ ;;
331
+ lsd)
332
+ install_lsd
333
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
334
+ ;;
335
+ bat)
336
+ install_bat
337
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
338
+ ;;
339
+ proot)
340
+ install_proot
341
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
342
+ ;;
343
+ ncurses)
344
+ install_ncurses
345
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
346
+ ;;
347
+ tmate)
348
+ install_tmate
349
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
350
+ ;;
351
+ cloudflared)
352
+ install_cloudflared
353
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
354
+ ;;
355
+ translate)
356
+ install_translate
357
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
358
+ ;;
359
+ html2text)
360
+ install_html2text
361
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
362
+ ;;
363
+ jq)
364
+ install_jq
365
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
366
+ ;;
367
+ bc)
368
+ install_bc
369
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
370
+ ;;
371
+ tree)
372
+ install_tree
373
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
374
+ ;;
375
+ fzf)
376
+ install_fzf
377
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
378
+ ;;
379
+ imagemagick)
380
+ install_imagemagick
381
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
382
+ ;;
383
+ shfmt)
384
+ install_shfmt
385
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
386
+ ;;
387
+ make)
388
+ install_make
389
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
390
+ ;;
391
+ udocker)
392
+ install_udocker
393
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
394
+ ;;
395
+ *)
396
+ log_warn "Unknown tool: --$tool"
397
+ ;;
398
+ esac
399
+ done
400
+
401
+ echo
402
+ if [[ $installed_count -gt 0 ]]; then
403
+ log_success "$installed_count tool(s) installed"
404
+ fi
405
+ if [[ $failed_count -gt 0 ]]; then
406
+ log_warn "$failed_count tool(s) failed to install"
407
+ fi
408
+ echo
409
+ ;;
410
+ npm)
411
+ import "@/tools/npm/all"
412
+ local installed_count=0
413
+ local failed_count=0
414
+
415
+ for tool in "${tools[@]}"; do
416
+ case "$tool" in
417
+ typescript)
418
+ install_typescript
419
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
420
+ ;;
421
+ nestjs)
422
+ install_nestjs
423
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
424
+ ;;
425
+ prettier)
426
+ install_prettier
427
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
428
+ ;;
429
+ live-server)
430
+ install_live_server
431
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
432
+ ;;
433
+ localtunnel)
434
+ install_localtunnel
435
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
436
+ ;;
437
+ vercel)
438
+ install_vercel
439
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
440
+ ;;
441
+ markserv)
442
+ install_markserv
443
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
444
+ ;;
445
+ psqlformat)
446
+ install_psqlformat
447
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
448
+ ;;
449
+ ncu)
450
+ install_ncu
451
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
452
+ ;;
453
+ ngrok)
454
+ install_ngrok
455
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
456
+ ;;
457
+ turbopack)
458
+ install_turbopack
459
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
460
+ ;;
461
+ *)
462
+ log_warn "Unknown node module: --$tool"
463
+ ;;
464
+ esac
465
+ done
466
+
467
+ echo
468
+ if [[ $installed_count -gt 0 ]]; then
469
+ log_success "$installed_count Node.js module(s) installed"
470
+ fi
471
+ if [[ $failed_count -gt 0 ]]; then
472
+ log_warn "$failed_count module(s) failed to install"
473
+ fi
474
+ echo
475
+ ;;
476
+ lang)
477
+ import "@/tools/lang/all"
478
+ local installed_count=0
479
+ local failed_count=0
480
+
481
+ for tool in "${tools[@]}"; do
482
+ case "$tool" in
483
+ nodejs)
484
+ install_nodejs
485
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
486
+ ;;
487
+ python)
488
+ install_python
489
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
490
+ ;;
491
+ perl)
492
+ install_perl
493
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
494
+ ;;
495
+ php)
496
+ install_php
497
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
498
+ ;;
499
+ rust)
500
+ install_rust
501
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
502
+ ;;
503
+ clang)
504
+ install_clang
505
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
506
+ ;;
507
+ golang)
508
+ install_golang
509
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
510
+ ;;
511
+ *)
512
+ log_warn "Unknown language: --$tool"
513
+ ;;
514
+ esac
515
+ done
516
+
517
+ echo
518
+ if [[ $installed_count -gt 0 ]]; then
519
+ log_success "$installed_count language(s) installed"
520
+ fi
521
+ if [[ $failed_count -gt 0 ]]; then
522
+ log_warn "$failed_count language(s) failed to install"
523
+ fi
524
+ echo
525
+ ;;
526
+ shell)
527
+ import "@/tools/shell/all"
528
+ local installed_count=0
529
+ local failed_count=0
530
+
531
+ for tool in "${tools[@]}"; do
532
+ case "$tool" in
533
+ powerlevel10k)
534
+ install_powerlevel10k
535
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
536
+ ;;
537
+ zsh-defer)
538
+ install_zsh_defer
539
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
540
+ ;;
541
+ zsh-autosuggestions)
542
+ install_zsh_autosuggestions
543
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
544
+ ;;
545
+ zsh-syntax-highlighting)
546
+ install_zsh_syntax_highlighting
547
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
548
+ ;;
549
+ history-substring)
550
+ install_history_substring
551
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
552
+ ;;
553
+ zsh-completions)
554
+ install_zsh_completions
555
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
556
+ ;;
557
+ fzf-tab)
558
+ install_fzf_tab
559
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
560
+ ;;
561
+ you-should-use)
562
+ install_you_should_use
563
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
564
+ ;;
565
+ zsh-autopair)
566
+ install_zsh_autopair
567
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
568
+ ;;
569
+ better-npm)
570
+ install_better_npm
571
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
572
+ ;;
573
+ *)
574
+ log_warn "Unknown plugin: --$tool"
575
+ ;;
576
+ esac
577
+ done
578
+
579
+ echo
580
+ if [[ $installed_count -gt 0 ]]; then
581
+ log_success "$installed_count plugin(s) installed"
582
+ fi
583
+ if [[ $failed_count -gt 0 ]]; then
584
+ log_warn "$failed_count plugin(s) failed to install"
585
+ fi
586
+ echo
587
+ ;;
588
+ editor)
589
+ import "@/tools/editor/all"
590
+ local installed_count=0
591
+ local failed_count=0
592
+
593
+ for tool in "${tools[@]}"; do
594
+ case "$tool" in
595
+ code-server)
596
+ import "@/tools/editor/code-server"
597
+ install_code_server
598
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
599
+ ;;
600
+ *)
601
+ log_warn "Unknown editor component: --$tool"
602
+ ;;
603
+ esac
604
+ done
605
+
606
+ echo
607
+ if [[ $installed_count -gt 0 ]]; then
608
+ log_success "$installed_count editor component(s) installed"
609
+ fi
610
+ if [[ $failed_count -gt 0 ]]; then
611
+ log_warn "$failed_count component(s) failed to install"
612
+ fi
613
+ echo
614
+ ;;
615
+ ui)
616
+ import "@/tools/ui/all"
617
+ local installed_count=0
618
+ local failed_count=0
619
+
620
+ for tool in "${tools[@]}"; do
621
+ case "$tool" in
622
+ font)
623
+ install_font
624
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
625
+ ;;
626
+ extra-keys)
627
+ install_extra_keys
628
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
629
+ ;;
630
+ cursor)
631
+ install_cursor
632
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
633
+ ;;
634
+ banner)
635
+ install_banner
636
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
637
+ ;;
638
+ *)
639
+ log_warn "Unknown UI component: --$tool"
640
+ ;;
641
+ esac
642
+ done
643
+
644
+ echo
645
+ if [[ $installed_count -gt 0 ]]; then
646
+ log_success "$installed_count UI component(s) installed"
647
+ fi
648
+ if [[ $failed_count -gt 0 ]]; then
649
+ log_warn "$failed_count component(s) failed to install"
650
+ fi
651
+ echo
652
+ ;;
653
+ auto)
654
+ import "@/tools/auto/all"
655
+ local installed_count=0
656
+ local failed_count=0
657
+
658
+ for tool in "${tools[@]}"; do
659
+ case "$tool" in
660
+ n8n)
661
+ install_n8n
662
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
663
+ ;;
664
+ *)
665
+ log_warn "Unknown automation tool: --$tool"
666
+ ;;
667
+ esac
668
+ done
669
+
670
+ echo
671
+ if [[ $installed_count -gt 0 ]]; then
672
+ log_success "$installed_count automation tool(s) installed"
673
+ fi
674
+ if [[ $failed_count -gt 0 ]]; then
675
+ log_warn "$failed_count tool(s) failed to install"
676
+ fi
677
+ echo
678
+ ;;
679
+ deploy)
680
+ import "@/tools/deploy/all"
681
+ local installed_count=0
682
+ local failed_count=0
683
+
684
+ for tool in "${tools[@]}"; do
685
+ case "$tool" in
686
+ vercel)
687
+ install_vercel
688
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
689
+ ;;
690
+ railway)
691
+ install_railway
692
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
693
+ ;;
694
+ netlify)
695
+ install_netlify
696
+ case $? in 0|2) ((installed_count++));; 1) ((failed_count++));; esac
697
+ ;;
698
+ *)
699
+ log_warn "Unknown deploy tool: --$tool"
700
+ ;;
701
+ esac
702
+ done
703
+
704
+ echo
705
+ if [[ $installed_count -gt 0 ]]; then
706
+ log_success "$installed_count deploy CLI(s) installed"
707
+ fi
708
+ if [[ $failed_count -gt 0 ]]; then
709
+ log_warn "$failed_count CLI(s) failed to install"
710
+ fi
711
+ echo
712
+ ;;
713
+ *)
714
+ log_warn "Unknown install target: $module"
715
+ echo "Run 'karnel install' to see available targets"
716
+ ;;
717
+ esac
718
+ }