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,706 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Importar funciones de log y colores para el help
4
+ import "@/utils/log"
5
+ import "@/utils/colors"
6
+
7
+ karnel_main() {
8
+ local cmd="$1"
9
+ shift || true
10
+
11
+ # si no se pasa comando
12
+ if [[ -z "$cmd" ]]; then
13
+ if [[ -t 0 ]]; then
14
+ karnel_tui
15
+ else
16
+ karnel_help
17
+ fi
18
+ return
19
+ fi
20
+
21
+ # special case: --version
22
+ if [[ "$cmd" == "--version" ]]; then
23
+ import "@/cli/commands/version"
24
+ version_main
25
+ return
26
+ fi
27
+
28
+ # reject any command name that is not a plain identifier (path-traversal guard)
29
+ if [[ "$cmd" != */* && "$cmd" != *".."* && "$cmd" != .* && "$cmd" =~ ^[a-zA-Z0-9_-]+$ ]]; then
30
+ :
31
+ else
32
+ log_error "Command not found: $cmd"
33
+ echo
34
+ karnel_help
35
+ exit 1
36
+ fi
37
+
38
+ local command_file="$KARNEL_PATH/cli/commands/$cmd.sh"
39
+
40
+ # verificar si existe el comando
41
+ if [[ -f "$command_file" ]]; then
42
+ import "@/cli/commands/$cmd"
43
+ "${cmd}_main" "$@"
44
+ else
45
+ log_error "Command not found: $cmd"
46
+ echo
47
+ karnel_help
48
+ exit 1
49
+ fi
50
+ }
51
+
52
+ karnel_help() {
53
+ echo
54
+ box "◈ KARNEL v${KARNEL_VERSION} ◈"
55
+ echo
56
+ log_info "Usage: karnel <command> [options]"
57
+ echo
58
+ separator_section "Available Commands"
59
+ echo
60
+ printf " ${D_CYAN}%-12s${NC} %s\n" "--version" "Show current version"
61
+ printf " ${D_CYAN}%-12s${NC} %s\n" "brain" "Second brain — save and search memories"
62
+ printf " ${D_CYAN}%-12s${NC} %s\n" "cleanup" "Clean caches, logs, and temp files"
63
+ printf " ${D_CYAN}%-12s${NC} %s\n" "env" "Manage environment variables"
64
+ printf " ${D_CYAN}%-12s${NC} %s\n" "install" "Install modules and packages"
65
+ printf " ${D_CYAN}%-12s${NC} %s\n" "show" "Show tool documentation"
66
+ printf " ${D_CYAN}%-12s${NC} %s\n" "update" "Update modules or framework"
67
+ printf " ${D_CYAN}%-12s${NC} %s\n" "uninstall" "Remove installed modules"
68
+ printf " ${D_CYAN}%-12s${NC} %s\n" "reinstall" "Uninstall + install modules"
69
+ printf " ${D_CYAN}%-12s${NC} %s\n" "open" "Open documentation in browser"
70
+ printf " ${D_CYAN}%-12s${NC} %s\n" "list" "List available tools in modules"
71
+ printf " ${D_CYAN}%-12s${NC} %s\n" "pg" "PostgreSQL database manager"
72
+ printf " ${D_CYAN}%-12s${NC} %s\n" "status" "Quick system overview"
73
+ printf " ${D_CYAN}%-12s${NC} %s\n" "doctor" "Diagnose and fix environment"
74
+ printf " ${D_CYAN}%-12s${NC} %s\n" "doctor --quick" "Quick diagnostics (skip slow checks)"
75
+ printf " ${D_CYAN}%-12s${NC} %s\n" "cleanup" "Clean caches, logs, and temp files"
76
+ printf " ${D_CYAN}%-12s${NC} %s\n" "upgrade" "Upgrade Karnel framework"
77
+ printf " ${D_CYAN}%-12s${NC} %s\n" "init" "Configure existing projects"
78
+ printf " ${D_CYAN}%-12s${NC} %s\n" "start" "Start services (editor, etc.)"
79
+ printf " ${D_CYAN}%-12s${NC} %s\n" "voice" "Speech-to-agent via microphone"
80
+ printf " ${D_CYAN}%-12s${NC} %s\n" "ia" "AI agent manager — sessions, install, routes"
81
+ echo
82
+ separator_section "Quick Start"
83
+ echo
84
+ list_item "Run: ${D_CYAN}karnel${NC} to see available commands"
85
+ list_item "Run: ${D_CYAN}karnel open${NC} for official documentation"
86
+ list_item "Run: ${D_CYAN}karnel install <module>${NC} to install modules"
87
+ echo
88
+ separator_section "Module Targets"
89
+ echo
90
+ log_info "Install, update, reinstall, uninstall, list, show or open:"
91
+ echo
92
+ printf " ${D_GREEN}%-10s${NC} %s\n" "lang" "Node, Python, Perl, PHP, Rust, C/C++, Go"
93
+ printf " ${D_GREEN}%-10s${NC} %s\n" "db" "PostgreSQL, MariaDB, SQLite, MongoDB"
94
+ printf " ${D_GREEN}%-10s${NC} %s\n" "ai" "OpenCode, Gentle AI, Claude Code, etc."
95
+ printf " ${D_GREEN}%-10s${NC} %s\n" "editor" "code-server (VS Code in browser)"
96
+ printf " ${D_GREEN}%-10s${NC} %s\n" "dev" "GitHub CLI, wget, curl, fzf, etc."
97
+ printf " ${D_GREEN}%-10s${NC} %s\n" "npm" "Node.js global npm packages"
98
+ printf " ${D_GREEN}%-10s${NC} %s\n" "shell" "ZSH + Oh My Zsh + 10 plugins"
99
+ printf " ${D_GREEN}%-10s${NC} %s\n" "ui" "Font, Cursor, Extra-keys, Banner"
100
+ printf " ${D_GREEN}%-10s${NC} %s\n" "auto" "Automation Tools (n8n)"
101
+ printf " ${D_GREEN}%-10s${NC} %s\n" "deploy" "Vercel, Railway, Netlify CLIs"
102
+
103
+ echo
104
+ separator_section "Help"
105
+ echo
106
+ list_item "Run ${D_CYAN}karnel <command>${NC} for command-specific help"
107
+ list_item "Example: ${D_CYAN}karnel pg${NC}, ${D_CYAN}karnel init${NC}"
108
+ list_item "Docs: ${D_CYAN}karnel open${NC} — israel marques 🇧🇷 (12y)"
109
+ echo
110
+ }
111
+
112
+ # =====================
113
+ # TUI Functions (dialog/whiptail)
114
+ # =====================
115
+
116
+ karnel_tui() {
117
+ local TUI_BIN=""
118
+ if command -v dialog &>/dev/null; then
119
+ TUI_BIN="dialog"
120
+ elif command -v whiptail &>/dev/null; then
121
+ TUI_BIN="whiptail"
122
+ fi
123
+
124
+ if [[ -z "$TUI_BIN" ]] || [[ ! -t 0 ]] || [[ ! -w /dev/tty ]]; then
125
+ karnel_fallback_tui
126
+ return
127
+ fi
128
+
129
+ _tui_main_menu
130
+ }
131
+
132
+ _dialog_menu() {
133
+ local title="$1"
134
+ local prompt="$2"
135
+ shift 2
136
+ local options=("$@")
137
+ local choice
138
+ local menu_height=20
139
+ local menu_width=65
140
+ local list_height=$(( ${#options[@]} / 2 ))
141
+ if (( list_height > 18 )); then list_height=18; fi
142
+ if (( list_height < 6 )); then list_height=6; fi
143
+ if [[ "$TUI_BIN" == "dialog" ]]; then
144
+ choice=$(dialog --clear --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --menu "$prompt" $menu_height $menu_width $list_height "${options[@]}" 2>&1 >/dev/tty)
145
+ else
146
+ choice=$(whiptail --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --menu "$prompt" $menu_height $menu_width $list_height "${options[@]}" 2>&1 >/dev/tty)
147
+ fi
148
+ local exit_status=$?
149
+ echo "$choice"
150
+ return $exit_status
151
+ }
152
+
153
+ _dialog_checklist() {
154
+ local title="$1"
155
+ local prompt="$2"
156
+ shift 2
157
+ local options=("$@")
158
+ local selections
159
+ local list_height=$(( ${#options[@]} / 3 ))
160
+ if (( list_height > 18 )); then list_height=18; fi
161
+ if (( list_height < 6 )); then list_height=6; fi
162
+ if [[ "$TUI_BIN" == "dialog" ]]; then
163
+ selections=$(dialog --clear --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --checklist "$prompt" 24 70 $list_height "${options[@]}" 2>&1 >/dev/tty)
164
+ else
165
+ selections=$(whiptail --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --checklist "$prompt" 24 70 $list_height "${options[@]}" 2>&1 >/dev/tty)
166
+ fi
167
+ local exit_status=$?
168
+ echo "$selections"
169
+ return $exit_status
170
+ }
171
+
172
+ _dialog_input() {
173
+ local title="$1"
174
+ local prompt="$2"
175
+ local init_val="$3"
176
+ local text
177
+ if [[ "$TUI_BIN" == "dialog" ]]; then
178
+ text=$(dialog --clear --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --inputbox "$prompt" 10 60 "$init_val" 2>&1 >/dev/tty)
179
+ else
180
+ text=$(whiptail --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --inputbox "$prompt" 10 60 "$init_val" 2>&1 >/dev/tty)
181
+ fi
182
+ local exit_status=$?
183
+ echo "$text"
184
+ return $exit_status
185
+ }
186
+
187
+ _dialog_yesno() {
188
+ local title="$1"
189
+ local prompt="$2"
190
+ if [[ "$TUI_BIN" == "dialog" ]]; then
191
+ dialog --clear --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --yesno "$prompt" 10 60 2>&1 >/dev/tty
192
+ else
193
+ whiptail --backtitle "Karnel v$KARNEL_VERSION" --title "$title" --yesno "$prompt" 10 60 2>&1 >/dev/tty
194
+ fi
195
+ return $?
196
+ }
197
+
198
+ _tui_main_menu() {
199
+ while true; do
200
+ local choice
201
+ choice=$(_dialog_menu "Main Menu" "Select an action to perform:" \
202
+ "brain" "Second Brain Manager" \
203
+ "env" "Environment Variables Manager" \
204
+ "install" "Install Packages/Modules" \
205
+ "pg" "PostgreSQL Database Manager" \
206
+ "init" "Project Initializer" \
207
+ "voice" "Speech-to-Agent" \
208
+ "ia" "AI Agent Manager" \
209
+ "doctor" "Run Diagnostics" \
210
+ "cleanup" "Clean caches and temp files" \
211
+ "status" "Quick System Overview" \
212
+ "upgrade" "Upgrade Karnel Framework" \
213
+ "update" "Update Karnel" \
214
+ "help" "Show Help Documentation" \
215
+ "exit" "Exit")
216
+
217
+ local exit_status=$?
218
+ if [[ $exit_status -ne 0 ]] || [[ "$choice" == "exit" ]] || [[ -z "$choice" ]]; then
219
+ clear
220
+ source "$KARNEL_PATH/utils/banner.sh"
221
+ break
222
+ fi
223
+
224
+ case "$choice" in
225
+ brain) _tui_brain_menu ;;
226
+ env) _tui_env_menu ;;
227
+ install) _tui_install_menu ;;
228
+ pg) _tui_pg_menu ;;
229
+ init) _tui_init_menu ;;
230
+ voice)
231
+ clear
232
+ karnel_main "voice"
233
+ echo
234
+ read -p "Press Enter to return to menu..." temp
235
+ ;;
236
+ ia)
237
+ clear
238
+ karnel_main "ia"
239
+ echo
240
+ read -p "Press Enter to return to menu..." temp
241
+ ;;
242
+ doctor)
243
+ clear
244
+ karnel_main "doctor"
245
+ echo
246
+ read -p "Press Enter to return to menu..." temp
247
+ ;;
248
+ cleanup)
249
+ clear
250
+ karnel_main "cleanup"
251
+ echo
252
+ read -p "Press Enter to return to menu..." temp
253
+ ;;
254
+ status)
255
+ clear
256
+ karnel_main "status"
257
+ echo
258
+ read -p "Press Enter to return to menu..." temp
259
+ ;;
260
+ upgrade)
261
+ clear
262
+ karnel_main "upgrade"
263
+ echo
264
+ read -p "Press Enter to return to menu..." temp
265
+ ;;
266
+ update)
267
+ clear
268
+ karnel_main "update"
269
+ echo
270
+ read -p "Press Enter to return to menu..." temp
271
+ ;;
272
+ help)
273
+ clear
274
+ karnel_help
275
+ echo
276
+ read -p "Press Enter to return to menu..." temp
277
+ ;;
278
+ esac
279
+ done
280
+ }
281
+
282
+ _tui_brain_menu() {
283
+ while true; do
284
+ local sub_choice
285
+ sub_choice=$(_dialog_menu "Second Brain Manager" "Select a brain operation:" \
286
+ "ask" "Ask a question (AI integrated)" \
287
+ "save" "Save a new memory" \
288
+ "search" "Search existing memories" \
289
+ "list" "List all memories" \
290
+ "init" "Initialize Brain" \
291
+ "graph" "View memory graph" \
292
+ "sync" "Sync memories" \
293
+ "reset" "Reset / Destroy Brain" \
294
+ "back" "Back to Main Menu")
295
+
296
+ local exit_status=$?
297
+ if [[ $exit_status -ne 0 ]] || [[ "$sub_choice" == "back" ]] || [[ -z "$sub_choice" ]]; then
298
+ break
299
+ fi
300
+
301
+ case "$sub_choice" in
302
+ ask)
303
+ local question
304
+ question=$(_dialog_input "Brain Ask" "Enter your question for the brain:")
305
+ if [[ $? -eq 0 ]] && [[ -n "$question" ]]; then
306
+ clear
307
+ karnel_main "brain" "ask" "$question"
308
+ echo
309
+ read -p "Press Enter to return..." temp
310
+ fi
311
+ ;;
312
+ save)
313
+ clear
314
+ karnel_main "brain" "save"
315
+ echo
316
+ read -p "Press Enter to return..." temp
317
+ ;;
318
+ search)
319
+ local query
320
+ query=$(_dialog_input "Search Memories" "Enter search query:")
321
+ if [[ $? -eq 0 ]] && [[ -n "$query" ]]; then
322
+ clear
323
+ karnel_main "brain" "search" "$query"
324
+ echo
325
+ read -p "Press Enter to return..." temp
326
+ fi
327
+ ;;
328
+ list)
329
+ clear
330
+ karnel_main "brain" "list"
331
+ echo
332
+ read -p "Press Enter to return..." temp
333
+ ;;
334
+ init)
335
+ clear
336
+ karnel_main "brain" "init"
337
+ echo
338
+ read -p "Press Enter to return..." temp
339
+ ;;
340
+ graph)
341
+ clear
342
+ karnel_main "brain" "graph"
343
+ echo
344
+ read -p "Press Enter to return..." temp
345
+ ;;
346
+ sync)
347
+ clear
348
+ karnel_main "brain" "sync"
349
+ echo
350
+ read -p "Press Enter to return..." temp
351
+ ;;
352
+ reset)
353
+ if _dialog_yesno "Reset Brain" "WARNING: This will delete ALL stored memories. Are you sure?"; then
354
+ clear
355
+ karnel_main "brain" "reset"
356
+ echo
357
+ read -p "Press Enter to return..." temp
358
+ fi
359
+ ;;
360
+ esac
361
+ done
362
+ }
363
+
364
+ _tui_env_menu() {
365
+ while true; do
366
+ local sub_choice
367
+ sub_choice=$(_dialog_menu "Environment Variables Manager" "Select an operation:" \
368
+ "set" "Set/Update a variable" \
369
+ "unset" "Remove a variable" \
370
+ "list" "List all user variables" \
371
+ "back" "Back to Main Menu")
372
+
373
+ local exit_status=$?
374
+ if [[ $exit_status -ne 0 ]] || [[ "$sub_choice" == "back" ]] || [[ -z "$sub_choice" ]]; then
375
+ break
376
+ fi
377
+
378
+ case "$sub_choice" in
379
+ set)
380
+ clear
381
+ karnel_main "env" "set"
382
+ echo
383
+ read -p "Press Enter to return..." temp
384
+ ;;
385
+ unset)
386
+ clear
387
+ karnel_main "env" "unset"
388
+ echo
389
+ read -p "Press Enter to return..." temp
390
+ ;;
391
+ list)
392
+ clear
393
+ karnel_main "env" "ls"
394
+ echo
395
+ read -p "Press Enter to return..." temp
396
+ ;;
397
+ esac
398
+ done
399
+ }
400
+
401
+ _tui_install_menu() {
402
+ while true; do
403
+ local target
404
+ target=$(_dialog_menu "Install Modules" "Select target module to install:" \
405
+ "ai" "AI Tools (OpenCode, Claude, Ollama, etc.)" \
406
+ "db" "Databases (PostgreSQL, MariaDB, SQLite, MongoDB)" \
407
+ "lang" "Programming Languages (Node, Python, Go, Rust, etc.)" \
408
+ "editor" "Code Editor (code-server)" \
409
+ "dev" "Development Tools (GitHub CLI, fzf, bat, etc.)" \
410
+ "npm" "Node.js Global npm Packages" \
411
+ "shell" "ZSH + Oh My Zsh + Plugins" \
412
+ "ui" "Termux UI (font, cursor, extra-keys, banner)" \
413
+ "auto" "Automation Tools (n8n)" \
414
+ "back" "Back to Main Menu")
415
+
416
+ local exit_status=$?
417
+ if [[ $exit_status -ne 0 ]] || [[ "$target" == "back" ]] || [[ -z "$target" ]]; then
418
+ break
419
+ fi
420
+
421
+ case "$target" in
422
+ ai|db|lang|dev|shell|ui)
423
+ _tui_install_checklist "$target"
424
+ ;;
425
+ *)
426
+ if _dialog_yesno "Install Module" "Do you want to install module '$target' completely?"; then
427
+ clear
428
+ karnel_main "install" "$target"
429
+ echo
430
+ read -p "Press Enter to return..." temp
431
+ fi
432
+ ;;
433
+ esac
434
+ done
435
+ }
436
+
437
+ _tui_install_checklist() {
438
+ local target="$1"
439
+ local -a opts=()
440
+
441
+ case "$target" in
442
+ lang)
443
+ opts=(
444
+ "nodejs" "Node.js LTS" OFF
445
+ "python" "Python" OFF
446
+ "perl" "Perl" OFF
447
+ "php" "PHP" OFF
448
+ "rust" "Rust" OFF
449
+ "clang" "C/C++ (clang)" OFF
450
+ "golang" "Go (golang)" OFF
451
+ )
452
+ ;;
453
+ db)
454
+ opts=(
455
+ "postgresql" "PostgreSQL" OFF
456
+ "mariadb" "MariaDB" OFF
457
+ "sqlite" "SQLite" OFF
458
+ "mongodb" "MongoDB" OFF
459
+ )
460
+ ;;
461
+ ai)
462
+ opts=(
463
+ "qwen-code" "Qwen Code" OFF
464
+ "gemini-cli" "Gemini CLI" OFF
465
+ "claude-code" "Claude Code" OFF
466
+ "mistral-vibe" "Mistral Vibe" OFF
467
+ "openclaude" "OpenClaude" OFF
468
+ "openclaw" "OpenClaw" OFF
469
+ "ollama" "Ollama" OFF
470
+ "codex" "Codex CLI" OFF
471
+ "opencode" "OpenCode" OFF
472
+ "mimocode" "MiMo Code" OFF
473
+ "engram" "Engram" OFF
474
+ "codegraph" "CodeGraph" OFF
475
+ "pi" "Pi" OFF
476
+ "antigravity-cli" "Antigravity CLI" OFF
477
+ "gentle-ai" "Gentle AI" OFF
478
+ "minimax-cli" "Minimax CLI" OFF
479
+ "gga" "GGA" OFF
480
+ "hermes-agent" "Hermes Agent" OFF
481
+ "kimi-code" "Kimi Code" OFF
482
+ "command-code" "Command Code" OFF
483
+ "freebuff" "Freebuff" OFF
484
+ "crush" "Crush CLI" OFF
485
+ "odysseus" "Odysseus" OFF
486
+ "kilocode-cli" "Kilo Code CLI" OFF
487
+ "kiro" "Kiro CLI" OFF
488
+ "cline" "Cline CLI" OFF
489
+ "kimchi-code" "Kimchi CLI" OFF
490
+ "omni-route" "omniRoute" OFF
491
+ "ctx7" "Context7 Docs" OFF
492
+ "openspec" "OpenSpec SDD" OFF
493
+ )
494
+ ;;
495
+ dev)
496
+ opts=(
497
+ "gh" "GitHub CLI" OFF
498
+ "wget" "Wget" OFF
499
+ "curl" "Curl" OFF
500
+ "fzf" "Fzf" OFF
501
+ "jq" "Jq" OFF
502
+ "lsd" "LSD (modern ls)" OFF
503
+ "bat" "Bat (modern cat)" OFF
504
+ "proot" "Proot" OFF
505
+ "ncurses" "Ncurses Utils" OFF
506
+ "tmate" "Tmate" OFF
507
+ "cloudflared" "Cloudflared" OFF
508
+ "translate" "Translate Shell" OFF
509
+ "html2text" "html2text" OFF
510
+ "bc" "Bc (calculator)" OFF
511
+ "tree" "Tree" OFF
512
+ "imagemagick" "ImageMagick" OFF
513
+ "shfmt" "Shfmt" OFF
514
+ "make" "Make" OFF
515
+ "udocker" "Udocker" OFF
516
+ )
517
+ ;;
518
+ shell)
519
+ opts=(
520
+ "zsh" "ZSH shell" OFF
521
+ "ohmyzsh" "Oh My Zsh" OFF
522
+ "theme" "Powerlevel10k theme" OFF
523
+ "plugins" "Plugins (autosuggest, etc.)" OFF
524
+ )
525
+ ;;
526
+ ui)
527
+ opts=(
528
+ "font" "Meslo Nerd Font" OFF
529
+ "cursor" "Green cursor" OFF
530
+ "extra-keys" "Custom Termux keys" OFF
531
+ "banner" "Startup banner" OFF
532
+ )
533
+ ;;
534
+ esac
535
+
536
+ local selections
537
+ selections=$(_dialog_checklist "Install $target Tools" "Select tools to install (Space to select):" "${opts[@]}")
538
+ local exit_status=$?
539
+
540
+ if [[ $exit_status -eq 0 ]] && [[ -n "$selections" ]]; then
541
+ local -a clean_selections=()
542
+ for item in $selections; do
543
+ local cleaned="${item//\"/}"
544
+ cleaned="${cleaned//\'/}"
545
+ if [[ -n "$cleaned" ]]; then
546
+ clean_selections+=("--$cleaned")
547
+ fi
548
+ done
549
+
550
+ if [[ ${#clean_selections[@]} -gt 0 ]]; then
551
+ clear
552
+ log_info "Running: karnel install $target ${clean_selections[*]}"
553
+ karnel_main "install" "$target" "${clean_selections[@]}"
554
+ echo
555
+ read -p "Press Enter to return..." temp
556
+ fi
557
+ fi
558
+ }
559
+
560
+ _tui_pg_menu() {
561
+ while true; do
562
+ local sub_choice
563
+ sub_choice=$(_dialog_menu "PostgreSQL Database Manager" "Select a pg operation:" \
564
+ "status" "Check server status" \
565
+ "start" "Start PostgreSQL server" \
566
+ "stop" "Stop PostgreSQL server" \
567
+ "restart" "Restart PostgreSQL server" \
568
+ "init" "Initialize PostgreSQL database" \
569
+ "list" "List all databases" \
570
+ "create" "Create a new database" \
571
+ "drop" "Drop a database" \
572
+ "backup" "Backup a database" \
573
+ "restore" "Restore a database from backup" \
574
+ "shell" "Open psql shell" \
575
+ "back" "Back to Main Menu")
576
+
577
+ local exit_status=$?
578
+ if [[ $exit_status -ne 0 ]] || [[ "$sub_choice" == "back" ]] || [[ -z "$sub_choice" ]]; then
579
+ break
580
+ fi
581
+
582
+ case "$sub_choice" in
583
+ status|start|stop|restart|init|list)
584
+ clear
585
+ karnel_main "pg" "$sub_choice"
586
+ echo
587
+ read -p "Press Enter to return..." temp
588
+ ;;
589
+ create)
590
+ local db_name
591
+ db_name=$(_dialog_input "Create Database" "Enter new database name:")
592
+ if [[ $? -eq 0 ]] && [[ -n "$db_name" ]]; then
593
+ clear
594
+ karnel_main "pg" "create" "$db_name"
595
+ echo
596
+ read -p "Press Enter to return..." temp
597
+ fi
598
+ ;;
599
+ drop)
600
+ local db_name
601
+ db_name=$(_dialog_input "Drop Database" "Enter database name to drop:")
602
+ if [[ $? -eq 0 ]] && [[ -n "$db_name" ]]; then
603
+ if _dialog_yesno "Drop Database" "WARNING: This will permanently delete database '$db_name'. Are you sure?"; then
604
+ clear
605
+ karnel_main "pg" "drop" "$db_name"
606
+ echo
607
+ read -p "Press Enter to return..." temp
608
+ fi
609
+ fi
610
+ ;;
611
+ backup)
612
+ local db_name
613
+ db_name=$(_dialog_input "Backup Database" "Enter database name to backup (leave empty for interactive):")
614
+ if [[ $? -eq 0 ]]; then
615
+ clear
616
+ karnel_main "pg" "backup" "$db_name"
617
+ echo
618
+ read -p "Press Enter to return..." temp
619
+ fi
620
+ ;;
621
+ restore)
622
+ clear
623
+ karnel_main "pg" "restore"
624
+ echo
625
+ read -p "Press Enter to return..." temp
626
+ ;;
627
+ shell)
628
+ clear
629
+ karnel_main "pg" "shell"
630
+ echo
631
+ read -p "Press Enter to return..." temp
632
+ ;;
633
+ esac
634
+ done
635
+ }
636
+
637
+ _tui_init_menu() {
638
+ while true; do
639
+ local sub_choice
640
+ sub_choice=$(_dialog_menu "Project Initializer" "Select a template to configure current directory:" \
641
+ "next" "Next.js Project (Node.js)" \
642
+ "react" "React + Vite Project (Node.js)" \
643
+ "nest" "NestJS Project (Node.js)" \
644
+ "express" "Express.js API (Node.js)" \
645
+ "python" "Python FastAPI Project" \
646
+ "go" "Go Gin/Fiber Project" \
647
+ "rust" "Rust Axum/Actix Web Project" \
648
+ "back" "Back to Main Menu")
649
+
650
+ local exit_status=$?
651
+ if [[ $exit_status -ne 0 ]] || [[ "$sub_choice" == "back" ]] || [[ -z "$sub_choice" ]]; then
652
+ break
653
+ fi
654
+
655
+ clear
656
+ karnel_main "init" "$sub_choice"
657
+ echo
658
+ read -p "Press Enter to return..." temp
659
+ done
660
+ }
661
+
662
+ karnel_fallback_tui() {
663
+ clear
664
+ source "$KARNEL_PATH/utils/banner.sh"
665
+ while true; do
666
+ echo
667
+ box "◈ KARNEL TUI MENU ◈"
668
+ echo
669
+ log_info "Select an option to run:"
670
+ echo
671
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 1 "Second Brain Manager (brain)"
672
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 2 "Environment Variables Manager (env)"
673
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 3 "Install Packages/Modules (install)"
674
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 4 "PostgreSQL Database Manager (pg)"
675
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 5 "Project Initializer (init)"
676
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 6 "Speech-to-Agent (voice)"
677
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 7 "AI Agent Manager (ia)"
678
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 8 "Run Diagnostics (doctor)"
679
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 9 "Update Karnel (update)"
680
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 10 "Help & Documentation (help)"
681
+ printf " ${D_GREEN}%2d.${D_NC} %s\n" 11 "Exit"
682
+ echo
683
+
684
+ local choice
685
+ read -p " Enter choice (1-11): " choice
686
+
687
+ case "$choice" in
688
+ 1) karnel_main "brain" ;;
689
+ 2) karnel_main "env" ;;
690
+ 3) karnel_main "install" ;;
691
+ 4) karnel_main "pg" ;;
692
+ 5) karnel_main "init" ;;
693
+ 6) karnel_main "voice" ;;
694
+ 7) karnel_main "ia" ;;
695
+ 8) karnel_main "doctor" ;;
696
+ 9) karnel_main "update" ;;
697
+ 10) karnel_help ;;
698
+ 11|q|exit) break ;;
699
+ *) log_warn "Invalid option. Please try again." ;;
700
+ esac
701
+ echo
702
+ read -p " Press Enter to return to menu..." temp
703
+ clear
704
+ source "$KARNEL_PATH/utils/banner.sh"
705
+ done
706
+ }