tmux watch notif

This commit is contained in:
David Chen 2026-04-09 10:58:24 -07:00
parent c56de89d3d
commit 8298371b35
3 changed files with 25 additions and 1 deletions

View file

@ -67,7 +67,7 @@ func runTrackerCommand(args []string) error {
}
command := strings.TrimSpace(rest[0])
switch command {
case "start_task", "finish_task", "update_task", "acknowledge", "delete_task":
case "start_task", "finish_task", "update_task", "acknowledge", "delete_task", "notify":
ctx, err := resolveTrackerContext(env.Session, env.SessionID, env.Window, env.WindowID, env.Pane)
if err != nil {
return err

View file

@ -204,6 +204,21 @@ func (s *server) handleCommand(env ipc.Envelope) error {
s.broadcastStateAsync()
s.statusRefreshAsync()
return nil
case "notify":
target, err := requireSessionWindow(env)
if err != nil {
return err
}
message := firstNonEmpty(env.Summary, env.Message)
if message == "" {
return fmt.Errorf("notify requires summary")
}
if s.notificationsAreEnabled() {
if err := sendSystemNotification(notificationTitleForTarget(target), message, notificationActionForTarget(target)); err != nil {
return err
}
}
return nil
case "update_task":
target, err := requireSessionWindow(env)
if err != nil {

View file

@ -15,6 +15,14 @@ pane_shell=$(ps -o comm= -p "$pane_pid" 2>/dev/null | sed 's|.*/||; s/^-//')
current_cmd=$(tmux display-message -p -t "$pane_id" '#{pane_current_command}' 2>/dev/null || true)
[[ -z "$current_cmd" ]] && exit 0
notify_completion() {
local tracker_bin message
tracker_bin="$HOME/.config/agent-tracker/bin/agent"
[[ -x "$tracker_bin" ]] || return 0
message="${current_cmd} finished"
"$tracker_bin" tracker command -window-id "$window_id" -pane "$pane_id" -summary "$message" notify >/dev/null 2>&1 || true
}
if [[ "$current_cmd" == "$pane_shell" ]]; then
exit 0
fi
@ -35,3 +43,4 @@ done
tmux set -wu -t "$window_id" @watching 2>/dev/null || true
tmux set -w -t "$window_id" @unread 1 2>/dev/null || true
tmux refresh-client -S
notify_completion