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,502 @@
1
+ #!/usr/bin/env bash
2
+
3
+ import "@/utils/log"
4
+ import "@/utils/colors"
5
+
6
+ # AI Manager (karnel ia) — router for all AI agents and sessions
7
+ IA_SESSIONS_DIR="$HOME/.local/share/karnel-data/ia/sessions"
8
+ IA_DATA_DIR="$HOME/.local/share/karnel-data/ia"
9
+
10
+ ia_help() {
11
+ echo
12
+ box "KARNEL IA — AI Agent Manager"
13
+ echo
14
+ log_info "Usage: karnel ia <command> [options]"
15
+ echo
16
+ separator_section "Commands"
17
+ echo
18
+ printf " ${D_CYAN}%-12s${NC} %s\n" "sessions" "List all AI conversation sessions"
19
+ printf " ${D_CYAN}%-12s${NC} %s\n" "install" "Install AI tools"
20
+ printf " ${D_CYAN}%-12s${NC} %s\n" "routes" "Show available AI CLI methods/launchers"
21
+ echo
22
+ separator_section "Examples"
23
+ echo
24
+ printf " ${D_CYAN}karnel ia sessions${NC} # Show all AI sessions\n"
25
+ printf " ${D_CYAN}karnel ia sessions --all${NC} # Include agent names\n"
26
+ printf " ${D_CYAN}karnel ia install omni-route${NC} # Install omniRoute\n"
27
+ printf " ${D_CYAN}karnel ia routes${NC} # Show AI CLI routes\n"
28
+ printf " ${D_CYAN}karnel list ai${NC} # List installed AI tools\n"
29
+ echo
30
+ }
31
+
32
+ # List all AI sessions from known tools
33
+ ia_sessions() {
34
+ local show_all="${1:-0}"
35
+
36
+ mkdir -p "$IA_SESSIONS_DIR"
37
+
38
+ local -a sessions=()
39
+ local session_file=""
40
+
41
+ # OpenCode prompt history
42
+ if [[ -f "$HOME/.local/state/opencode/prompt-history.jsonl" ]]; then
43
+ while IFS= read -r line; do
44
+ [[ -z "$line" ]] && continue
45
+ local input=""
46
+ input=$(printf '%s' "$line" | jq -r '.input // empty' 2>/dev/null || true)
47
+ if [[ -n "$input" ]]; then
48
+ local ts="unknown"
49
+ local json_ts
50
+ json_ts=$(printf '%s' "$line" | jq -r '.timestamp // empty' 2>/dev/null || true)
51
+ if [[ -n "$json_ts" && "$json_ts" != "null" ]]; then
52
+ ts=$(date -d "@$json_ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "$json_ts")
53
+ else
54
+ local mtime
55
+ mtime=$(stat -c %Y "$HOME/.local/state/opencode/prompt-history.jsonl" 2>/dev/null || echo "unknown")
56
+ ts=$(date -d "@$mtime" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
57
+ fi
58
+ local display="${input:0:60}"
59
+ display="${display//$'\n'/ }"
60
+ sessions+=("[opencode]|$ts|$display")
61
+ fi
62
+ done < <(cat "$HOME/.local/state/opencode/prompt-history.jsonl" 2>/dev/null || true)
63
+ fi
64
+
65
+ # Hermes sessions
66
+ if [[ -d "$HOME/.hermes/sessions" ]]; then
67
+ for f in "$HOME/.hermes/sessions"/*.json; do
68
+ [[ -f "$f" ]] || continue
69
+ local basename; basename=$(basename "$f")
70
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
71
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
72
+ sessions+=("[hermes]|$readable_ts|$basename")
73
+ done
74
+ fi
75
+
76
+ # Kimi-code sessions
77
+ if [[ -d "$HOME/.kimi-code/sessions" ]]; then
78
+ for d in "$HOME/.kimi-code/sessions"/*; do
79
+ [[ -d "$d" ]] || continue
80
+ local basename; basename=$(basename "$d")
81
+ local ts; ts=$(stat -c %Y "$d" 2>/dev/null || echo "unknown")
82
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
83
+ sessions+=("[kimi]|$readable_ts|$basename")
84
+ done
85
+ fi
86
+
87
+ # Pi agent sessions
88
+ if [[ -d "$HOME/.pi/agent/sessions" ]]; then
89
+ for d in "$HOME/.pi/agent/sessions"/*; do
90
+ [[ -d "$d" ]] || continue
91
+ local basename; basename=$(basename "$d")
92
+ local ts; ts=$(stat -c %Y "$d" 2>/dev/null || echo "unknown")
93
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
94
+ sessions+=("[pi]|$readable_ts|$basename")
95
+ done
96
+ fi
97
+
98
+ # Codex sessions
99
+ if [[ -d "$HOME/.codex" ]]; then
100
+ for f in "$HOME/.codex"/*.json; do
101
+ [[ -f "$f" ]] || continue
102
+ local basename; basename=$(basename "$f")
103
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
104
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
105
+ sessions+=("[codex]|$readable_ts|$basename")
106
+ done
107
+ fi
108
+
109
+ # OpenClaw sessions
110
+ if [[ -d "$HOME/.openclaw/agents/main/sessions" ]]; then
111
+ for f in "$HOME/.openclaw/agents/main/sessions"/*.json; do
112
+ [[ -f "$f" ]] || continue
113
+ local basename; basename=$(basename "$f")
114
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
115
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
116
+ sessions+=("[openclaw]|$readable_ts|$basename")
117
+ done
118
+ fi
119
+
120
+ # Odysseus sessions
121
+ if [[ -d "$HOME/.local/share/karnel-data/odysseus" ]]; then
122
+ local ody_sessions_dir="$HOME/.local/share/karnel-data/odysseus/sessions"
123
+ if [[ -d "$ody_sessions_dir" ]]; then
124
+ for f in "$ody_sessions_dir"/*.json; do
125
+ [[ -f "$f" ]] || continue
126
+ local basename; basename=$(basename "$f")
127
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
128
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
129
+ sessions+=("[odysseus]|$readable_ts|$basename")
130
+ done
131
+ fi
132
+ fi
133
+
134
+ # MimoCode sessions
135
+ if [[ -d "$HOME/.local/share/karnel-data/mimocode" ]]; then
136
+ local mimo_sessions_dir="$HOME/.local/share/karnel-data/mimocode/sessions"
137
+ if [[ -d "$mimo_sessions_dir" ]]; then
138
+ for f in "$mimo_sessions_dir"/*.json; do
139
+ [[ -f "$f" ]] || continue
140
+ local basename; basename=$(basename "$f")
141
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
142
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
143
+ sessions+=("[mimocode]|$readable_ts|$basename")
144
+ done
145
+ fi
146
+ fi
147
+
148
+ # Claude Code sessions
149
+ if [[ -d "$HOME/.claude" ]]; then
150
+ for f in "$HOME/.claude"/*.json; do
151
+ [[ -f "$f" ]] || continue
152
+ local basename; basename=$(basename "$f")
153
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
154
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
155
+ sessions+=("[claude]|$readable_ts|$basename")
156
+ done
157
+ for f in "$HOME/.claude"/*.jsonl; do
158
+ [[ -f "$f" ]] || continue
159
+ local basename; basename=$(basename "$f")
160
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
161
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
162
+ sessions+=("[claude]|$readable_ts|$basename")
163
+ done
164
+ fi
165
+
166
+ # Gemini CLI sessions
167
+ if [[ -d "$HOME/.gemini" ]]; then
168
+ for f in "$HOME/.gemini"/*.json; do
169
+ [[ -f "$f" ]] || continue
170
+ local basename; basename=$(basename "$f")
171
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
172
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
173
+ sessions+=("[gemini]|$readable_ts|$basename")
174
+ done
175
+ for f in "$HOME/.gemini"/*.jsonl; do
176
+ [[ -f "$f" ]] || continue
177
+ local basename; basename=$(basename "$f")
178
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
179
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
180
+ sessions+=("[gemini]|$readable_ts|$basename")
181
+ done
182
+ fi
183
+
184
+ # Qwen sessions
185
+ if [[ -d "$HOME/.qwen" ]]; then
186
+ for f in "$HOME/.qwen"/*.json; do
187
+ [[ -f "$f" ]] || continue
188
+ local basename; basename=$(basename "$f")
189
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
190
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
191
+ sessions+=("[qwen]|$readable_ts|$basename")
192
+ done
193
+ for f in "$HOME/.qwen"/*.jsonl; do
194
+ [[ -f "$f" ]] || continue
195
+ local basename; basename=$(basename "$f")
196
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
197
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
198
+ sessions+=("[qwen]|$readable_ts|$basename")
199
+ done
200
+ fi
201
+
202
+ # Vibe sessions
203
+ if [[ -d "$HOME/.vibe" ]]; then
204
+ for f in "$HOME/.vibe"/*.json; do
205
+ [[ -f "$f" ]] || continue
206
+ local basename; basename=$(basename "$f")
207
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
208
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
209
+ sessions+=("[vibe]|$readable_ts|$basename")
210
+ done
211
+ for f in "$HOME/.vibe"/*.jsonl; do
212
+ [[ -f "$f" ]] || continue
213
+ local basename; basename=$(basename "$f")
214
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
215
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
216
+ sessions+=("[vibe]|$readable_ts|$basename")
217
+ done
218
+ fi
219
+
220
+ # Freebuff sessions
221
+ if [[ -d "$HOME/.freebuff" ]]; then
222
+ for f in "$HOME/.freebuff"/*.json; do
223
+ [[ -f "$f" ]] || continue
224
+ local basename; basename=$(basename "$f")
225
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
226
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
227
+ sessions+=("[freebuff]|$readable_ts|$basename")
228
+ done
229
+ fi
230
+
231
+ # Agnostic sessions
232
+ if [[ -d "$HOME/.agy" ]]; then
233
+ for f in "$HOME/.agy"/*.json; do
234
+ [[ -f "$f" ]] || continue
235
+ local basename; basename=$(basename "$f")
236
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
237
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
238
+ sessions+=("[agy]|$readable_ts|$basename")
239
+ done
240
+ fi
241
+
242
+ # MMX sessions
243
+ if [[ -d "$HOME/.mmx" ]]; then
244
+ for f in "$HOME/.mmx"/*.json; do
245
+ [[ -f "$f" ]] || continue
246
+ local basename; basename=$(basename "$f")
247
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
248
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
249
+ sessions+=("[mmx]|$readable_ts|$basename")
250
+ done
251
+ fi
252
+
253
+ # Gentle AI sessions
254
+ if [[ -d "$HOME/.gentle-ai" ]]; then
255
+ for f in "$HOME/.gentle-ai"/*.json; do
256
+ [[ -f "$f" ]] || continue
257
+ local basename; basename=$(basename "$f")
258
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
259
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
260
+ sessions+=("[gentle-ai]|$readable_ts|$basename")
261
+ done
262
+ fi
263
+
264
+ # GGA sessions
265
+ if [[ -d "$HOME/.gga" ]]; then
266
+ for f in "$HOME/.gga"/*.json; do
267
+ [[ -f "$f" ]] || continue
268
+ local basename; basename=$(basename "$f")
269
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
270
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
271
+ sessions+=("[gga]|$readable_ts|$basename")
272
+ done
273
+ fi
274
+
275
+ # Engram sessions
276
+ if [[ -d "$HOME/.engram" ]]; then
277
+ for f in "$HOME/.engram"/*.json; do
278
+ [[ -f "$f" ]] || continue
279
+ local basename; basename=$(basename "$f")
280
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
281
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
282
+ sessions+=("[engram]|$readable_ts|$basename")
283
+ done
284
+ fi
285
+
286
+ # CodeGraph sessions
287
+ if [[ -d "$HOME/.codegraph" ]]; then
288
+ for f in "$HOME/.codegraph"/*.json; do
289
+ [[ -f "$f" ]] || continue
290
+ local basename; basename=$(basename "$f")
291
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
292
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
293
+ sessions+=("[codegraph]|$readable_ts|$basename")
294
+ done
295
+ fi
296
+
297
+ # Kilow sessions
298
+ if [[ -d "$HOME/.kilow" ]]; then
299
+ for f in "$HOME/.kilow"/*.json; do
300
+ [[ -f "$f" ]] || continue
301
+ local basename; basename=$(basename "$f")
302
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
303
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
304
+ sessions+=("[kilow]|$readable_ts|$basename")
305
+ done
306
+ fi
307
+ # Kilocode sessions
308
+ if command -v kilocode >/dev/null 2>&1; then
309
+ sessions+=("[kilocode]|$(date +%Y%m%d_%H%M%S)|kilocode binary present")
310
+ fi
311
+
312
+ # Command Code sessions
313
+ if [[ -d "$HOME/.command-code" ]]; then
314
+ for f in "$HOME/.command-code"/*.json; do
315
+ [[ -f "$f" ]] || continue
316
+ local basename; basename=$(basename "$f")
317
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
318
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
319
+ sessions+=("[command-code]|$readable_ts|$basename")
320
+ done
321
+ fi
322
+
323
+ # Kimchi sessions
324
+ if [[ -d "$HOME/.kimchi" ]]; then
325
+ for f in "$HOME/.kimchi"/*.json; do
326
+ [[ -f "$f" ]] || continue
327
+ local basename; basename=$(basename "$f")
328
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
329
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
330
+ sessions+=("[kimchi]|$readable_ts|$basename")
331
+ done
332
+ fi
333
+
334
+ # Ollama model sessions/local chat
335
+ if [[ -d "$HOME/.ollama/history" ]]; then
336
+ for f in "$HOME/.ollama/history"/*.json; do
337
+ [[ -f "$f" ]] || continue
338
+ local basename; basename=$(basename "$f")
339
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
340
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
341
+ sessions+=("[ollama]|$readable_ts|$basename")
342
+ done
343
+ fi
344
+
345
+ # Brain AI cache as sessions
346
+ if [[ -d "$KARNEL_CACHE/brain_ai_cache" ]]; then
347
+ for f in "$KARNEL_CACHE/brain_ai_cache"/*; do
348
+ [[ -f "$f" ]] || continue
349
+ local basename; basename=$(basename "$f")
350
+ local ts; ts=$(stat -c %Y "$f" 2>/dev/null || echo "unknown")
351
+ local readable_ts; readable_ts=$(date -d "@$ts" +%Y%m%d_%H%M%S 2>/dev/null || echo "unknown")
352
+ sessions+=("[brain]|$readable_ts|$basename")
353
+ done
354
+ fi
355
+
356
+ if [[ ${#sessions[@]} -eq 0 ]]; then
357
+ log_warn "No AI sessions found"
358
+ log_info "Start an AI tool to create your first session"
359
+ return 0
360
+ fi
361
+
362
+ # Persist all discovered sessions to IA_SESSIONS_DIR for history
363
+ local persist_file="$IA_SESSIONS_DIR/.all_sessions.json"
364
+ local tmp_persist
365
+ tmp_persist=$(mktemp)
366
+ echo "[" > "$tmp_persist"
367
+ local first=1
368
+ for session in "${sessions[@]}"; do
369
+ local tool ts_raw name
370
+ tool=$(echo "$session" | cut -d'|' -f1)
371
+ ts_raw=$(echo "$session" | cut -d'|' -f2)
372
+ name=$(echo "$session" | cut -d'|' -f3-)
373
+ local escaped_name
374
+ escaped_name=$(printf '%s' "$name" | sed 's/"/\\"/g')
375
+ if [[ $first -eq 1 ]]; then
376
+ first=0
377
+ else
378
+ echo "," >> "$tmp_persist"
379
+ fi
380
+ printf '{"tool":"%s","ts":"%s","name":"%s"}\n' "$tool" "$ts_raw" "$escaped_name" >> "$tmp_persist"
381
+ done
382
+ echo "]" >> "$tmp_persist"
383
+ mv "$tmp_persist" "$persist_file" 2>/dev/null || true
384
+
385
+ separator
386
+ box "AI Sessions (${#sessions[@]})"
387
+ separator
388
+ echo
389
+
390
+ # Sort by date (newest first)
391
+ mapfile -t sorted_sessions < <(printf '%s\n' "${sessions[@]}" | sort -t'|' -k2 -r)
392
+
393
+ local idx=1
394
+ for session in "${sorted_sessions[@]}"; do
395
+ local tool ts name
396
+ tool=$(echo "$session" | cut -d'|' -f1)
397
+ ts=$(echo "$session" | cut -d'|' -f2)
398
+ name=$(echo "$session" | cut -d'|' -f3-)
399
+
400
+ local display_name="$name"
401
+ if [[ ${#name} -gt 50 ]]; then
402
+ display_name="${name:0:47}..."
403
+ fi
404
+
405
+ printf " ${D_CYAN}%3d.${D_NC} %-14s %s %s\n" "$idx" "$tool" "$ts" "$display_name"
406
+ ((idx++))
407
+ done
408
+
409
+ echo
410
+ log_info "Total: ${#sessions[@]} sessions across all AI tools"
411
+ log_info "History saved in: $IA_SESSIONS_DIR"
412
+ }
413
+
414
+ # List available AI CLI launchers/routers
415
+ ia_routes() {
416
+ separator
417
+ box "AI CLI Routes / Launchers"
418
+ separator
419
+ echo
420
+
421
+ local -a routes=()
422
+
423
+ # Collect all available AI CLIs (em sincronia com AI_TOOLS_REGISTRY em tools/ai/all.sh)
424
+ for cmd in qwen gemini claude vibe openclaude openclaw ollama codex opencode mimo engram codegraph pi agy mmx gentle-ai gga hermes kimi command-code freebuff kilocode kiro cline crush odysseus kimchi omni-route ctx7 openspec; do
425
+ if command -v "$cmd" &>/dev/null; then
426
+ local path
427
+ path=$(command -v "$cmd")
428
+ routes+=("$cmd|$path|installed")
429
+ else
430
+ routes+=("$cmd|not installed|missing")
431
+ fi
432
+ done
433
+
434
+ if [[ ${#routes[@]} -eq 0 ]]; then
435
+ log_warn "No AI CLIs found"
436
+ return 0
437
+ fi
438
+
439
+ table_start "CLI" "Path" "Status"
440
+ for route in "${routes[@]}"; do
441
+ local cli
442
+ cli=$(echo "$route" | cut -d'|' -f1)
443
+ local path
444
+ path=$(echo "$route" | cut -d'|' -f2)
445
+ local status
446
+ status=$(echo "$route" | cut -d'|' -f3)
447
+
448
+ local display_status
449
+ if [[ "$status" == "installed" ]]; then
450
+ display_status="${D_GREEN}installed${NC}"
451
+ else
452
+ display_status="${D_RED}missing${NC}"
453
+ fi
454
+
455
+ table_row "${D_CYAN}${cli}${NC}" "$path" "$display_status"
456
+ done
457
+ table_end
458
+ echo
459
+
460
+ log_info "Install missing ones with: ${D_CYAN}karnel install ai${NC}"
461
+ }
462
+
463
+ # Install AI tools
464
+ ia_install() {
465
+ local tool="${1:-}"
466
+
467
+ if [[ -z "$tool" ]]; then
468
+ log_error "Please specify an AI tool to install"
469
+ log_info "Usage: karnel ia install <tool>"
470
+ log_info "Example: karnel ia install odysseus"
471
+ return 1
472
+ fi
473
+
474
+ log_info "Installing AI tool: $tool"
475
+ karnel_main "install" "ai" "--$tool"
476
+ }
477
+
478
+ # Main router
479
+ ia_main() {
480
+ local cmd="$1"
481
+ shift || true
482
+
483
+ case "$cmd" in
484
+ sessions)
485
+ ia_sessions "$@"
486
+ ;;
487
+ install)
488
+ ia_install "$@"
489
+ ;;
490
+ routes | launchers)
491
+ ia_routes
492
+ ;;
493
+ "" | --help | -h)
494
+ ia_help
495
+ ;;
496
+ *)
497
+ log_error "Unknown command: $cmd"
498
+ ia_help
499
+ return 1
500
+ ;;
501
+ esac
502
+ }