diff --git a/ags-v3/style.scss b/ags-v3/style.scss
index e103ab7..02a4366 100644
--- a/ags-v3/style.scss
+++ b/ags-v3/style.scss
@@ -124,4 +124,11 @@ window.BrainPower {
font-family: "Maple Mono NF", monospace;
padding: 4px 0 4px 16px;
}
+
+ .brain-terminal {
+ background: #1a0e27;
+ border-radius: 0 0 $radius 0;
+ padding: 4px;
+ min-height: 400px;
+ }
}
diff --git a/ags-v3/toggle-brain.sh b/ags-v3/toggle-brain.sh
index 17bcd6e..56e3ff2 100755
--- a/ags-v3/toggle-brain.sh
+++ b/ags-v3/toggle-brain.sh
@@ -1,3 +1,32 @@
#!/bin/bash
-# Toggle Brain Power panel via AGS IPC
-ags request "toggle-brain" 2>/dev/null
+# Toggle Brain Power — dashboard AGS + terminal Kitty (single instance)
+BRAIN_ROOT="${BRAIN_ROOT:-$HOME/Dev/Brain}"
+KITTY_CLASS="brain-hud-terminal"
+
+# Check if brain kitty is already running (by window class)
+kitty_pid=$(pgrep -f "class $KITTY_CLASS" | head -1)
+
+if [ -n "$kitty_pid" ]; then
+ # Close everything
+ ags request "toggle-brain" 2>/dev/null
+ kill "$kitty_pid" 2>/dev/null
+else
+ # Open everything
+ ags request "toggle-brain" 2>/dev/null
+ kitty \
+ --class "$KITTY_CLASS" \
+ --title "🧠 Brain HUD" \
+ --override remember_window_size=no \
+ --override initial_window_width=60c \
+ --override initial_window_height=30c \
+ --override background_opacity=0.94 \
+ --override background=#1a0e27 \
+ --override foreground=#f0eaf8 \
+ --override cursor=#ff4da6 \
+ --override font_size=13 \
+ --override confirm_os_window_close=0 \
+ --directory "$BRAIN_ROOT" \
+ -e zsh -c "echo '🧠 Brain HUD — navigate mode'; echo ''; exec zsh" \
+ &
+ disown
+fi
diff --git a/ags-v3/widget/panels/BrainPower.tsx b/ags-v3/widget/panels/BrainPower.tsx
index 197db17..f052709 100644
--- a/ags-v3/widget/panels/BrainPower.tsx
+++ b/ags-v3/widget/panels/BrainPower.tsx
@@ -2,6 +2,7 @@ import app from "ags/gtk3/app"
import { Astal, Gtk, Gdk } from "ags/gtk3"
import { createPoll } from "ags/time"
import { getBrainState } from "../../lib/brain"
+import GLib from "gi://GLib"
function BrainContent() {
const state = createPoll("", 10000, () => JSON.stringify(getBrainState()))
@@ -9,109 +10,55 @@ function BrainContent() {
const version = state((s: string) => {
try { return `kernel v${JSON.parse(s).kernelVersion}` } catch { return "" }
})
-
const focus = state((s: string) => {
try { return JSON.parse(s).focus } catch { return "..." }
})
-
const session = state((s: string) => {
- try {
- const sess = JSON.parse(s).session
- return sess || "aucune session active"
- } catch { return "..." }
+ try { return JSON.parse(s).session || "aucune session active" } catch { return "..." }
})
-
const intentionsTitle = state((s: string) => {
try {
const i = JSON.parse(s).intentions
return ` INTENTIONS (${i.active} active${i.active > 1 ? "s" : ""})`
} catch { return " INTENTIONS" }
})
-
const intentionsList = state((s: string) => {
try {
- const names = JSON.parse(s).intentions.names
- return names.map((n: string) => ` • ${n}`).join("\n") || " aucune"
+ return JSON.parse(s).intentions.names.map((n: string) => ` • ${n}`).join("\n") || " aucune"
} catch { return "..." }
})
-
const todosTitle = state((s: string) => {
- try {
- const t = JSON.parse(s).todos
- return `${t.open} ouverts / ${t.done} faits`
- } catch { return "" }
+ try { const t = JSON.parse(s).todos; return `${t.open} ouverts / ${t.done} faits` } catch { return "" }
})
-
const todosList = state((s: string) => {
try {
- const t = JSON.parse(s).todos.top3
- return t.map((item: string) => ` ⬜ ${item}`).join("\n") || " rien"
- } catch { return "..." }
- })
-
- const reposStatus = state((s: string) => {
- try {
- const repos = JSON.parse(s).repos
- return repos.map((r: any) => ` ${r.name.padEnd(14)} ${r.status}`).join("\n")
- } catch { return "..." }
- })
-
- const commitsList = state((s: string) => {
- try {
- const commits = JSON.parse(s).commits
- return commits.map((c: string) => ` ${c}`).join("\n") || " aucun"
+ return JSON.parse(s).todos.top3.map((item: string) => ` ⬜ ${item}`).join("\n") || " rien"
} catch { return "..." }
})
return (
- {/* FOCUS */}
-
-
- {/* SESSION */}
-
-
- {/* INTENTIONS */}
-
-
- {/* TODOS */}
-
-
-
- {/* REPOS */}
-
-
-
-
-
-
-
- {/* COMMITS */}
-
-
-
-
)
}
@@ -130,28 +77,21 @@ export default function BrainPower(gdkmonitor: Gdk.Monitor) {
application={app}
layer={Astal.Layer.OVERLAY}
>
- {
- const win = app.get_window("brain-power")
- if (win) win.visible = false
- }}
- >
-
-
-
+
+
-
+
+
)
}