fix: remove hardcoded v0.5.0, show daemon version in status bar

- Removed connect-daemon's hardcoded "* Connected v0.5.0 *" message
  (fired before handshake arrived, was always stale)
- Added :daemon-version slot to state plist, filled by handshake handler
- view-status now shows version: "● passepartout v0.7.2 msgs:N Rules:N"
- passepartout script: force cl-tty recompile (:force t) to pick up
  CSI positioning, ioctl sizing, and detection fixes
This commit is contained in:
2026-05-14 09:11:22 -04:00
parent 1884372660
commit adca69d29c
8 changed files with 194 additions and 66 deletions

View File

@@ -672,6 +672,7 @@
(text (setf (st :busy) nil)
(add-msg :agent text :gate-trace gate-trace))
((eq action :handshake)
(setf (st :daemon-version) (getf payload :version))
(add-msg :system (format nil "Connected v~a" (getf payload :version))))
(t (add-msg :agent (format nil "~a" msg))))))
@@ -735,10 +736,9 @@
(let ((s (usocket:socket-connect host port :timeout 5)))
(setf (st :stream) (usocket:socket-stream s)
(st :connected) t)
(bt:make-thread (lambda () (reader-loop (st :stream)))
:name "tui-reader")
(add-msg :system (format nil "* Connected v~a *" "0.5.0"))
(return-from connect-daemon t))
(bt:make-thread (lambda () (reader-loop (st :stream)))
:name "tui-reader")
(return-from connect-daemon t))
(usocket:connection-refused-error (c)
(when (= attempt 3)
(add-msg :system (format nil "* No daemon on port ~a after ~a attempts *"
@@ -888,25 +888,21 @@
(multiple-value-setq (w h) (cl-tty.backend:backend-size be))
(setf (st :dirty) (list t t t))))
;; Read key input from fd 0 (blocking via listen + read-char)
;; Note: sb-unix:unix-simple-poll on fd 0 returns NIL in this
;; SBCL environment, so read-char-no-hang never fires. Use
;; blocking read-char instead — the TUI loop sleeps 0.1s
;; between renders anyway.
(let ((raw-ch (when (listen tty) (read-char tty nil nil))))
(when raw-ch
(let ((code (char-code raw-ch)))
(let ((ch (cond
((= code 13) :enter)
((= code 10) :enter)
((= code 27) :escape)
((= code 9) :tab)
((or (= code 127) (= code 8)) :backspace)
((and (>= code 1) (<= code 26))
(intern (string-upcase (format nil "CTRL-~a"
(code-char (+ #x60 code))))
:keyword))
(t raw-ch))))
(case ch
(let ((ch (cond
((= code 13) :enter)
((= code 10) :enter)
((= code 27) :escape)
((= code 9) :tab)
((or (= code 127) (= code 8)) :backspace)
((and (>= code 1) (<= code 26))
(intern (string-upcase (format nil "CTRL-~a"
(code-char (+ #x60 code))))
:keyword))
(t raw-ch))))
(case ch
(:CTRL-Q (setf (st :running) nil))
(:CTRL-P (command-palette-show-commands))
(:CTRL-B (setf (st :sidebar-visible) (not (st :sidebar-visible)))

View File

@@ -177,6 +177,7 @@
:command-palette-active nil ; v0.8.0
:command-palette-dialog nil ; v0.8.0
:session-cost 0.0 ; v0.9.0
:daemon-version nil ; filled by handshake
:dirty (list nil nil nil))))
(defvar *sidebar-panels*

View File

@@ -16,11 +16,14 @@ Returns a list of strings, one per line."
(defun view-status (fb w h)
(let* ((bg (theme-color :status-bg))
(fg (theme-color :status-fg))
(left (format nil " ~a ~a msgs:~d Rules:~a"
(if (st :connected) "●" "○")
(or (st :foveal-id) "passepartout")
(length (st :messages))
(or (st :rule-count) 0)))
(ver (st :daemon-version))
(ver-str (if ver (format nil " v~a" ver) ""))
(left (format nil " ~a ~a~a msgs:~d Rules:~a"
(if (st :connected) "●" "○")
(or (st :foveal-id) "passepartout")
ver-str
(length (st :messages))
(or (st :rule-count) 0)))
(right (format nil "$~,2f ~a" (or (st :session-cost) 0.0) (now))))
(dotimes (col w)
(cl-tty.backend:draw-text fb 0 (- h 1) (make-string w :initial-element #\Space) nil bg))