@@ -397,7 +397,8 @@ Must be a positive integer."
397397 (define-key map (kbd " C-c C-k" ) #'eca-chat-reset )
398398 (define-key map (kbd " C-c C-l" ) #'eca-chat-clear )
399399 (define-key map (kbd " C-c C-t" ) #'eca-chat-talk )
400- (define-key map (kbd " C-c C-b" ) #'eca-chat-select-behavior )
400+ (define-key map (kbd " C-c C-S-b" ) #'eca-chat-select-behavior )
401+ (define-key map (kbd " C-c C-b" ) #'eca-chat-cycle-behavior )
401402 (define-key map (kbd " C-c C-m" ) #'eca-chat-select-model )
402403 (define-key map (kbd " C-c C-n" ) #'eca-chat-new )
403404 (define-key map (kbd " C-c C-f" ) #'eca-chat-select )
@@ -1743,21 +1744,21 @@ Calls CB with the resulting message."
17431744 :annotation-function annotation-fn
17441745 :exit-function exit-fn)))
17451746
1746- (defun eca-chat-config- updated (session chat-config )
1747- " Update chat based on the CHAT-CONFIG for SESSION."
1748- (-some-> > ( plist-get chat-config :welcomeMessage )
1749- ( setf (eca--session-chat-welcome-message session)) )
1750- (-some-> > ( plist-get chat-config :models )
1751- ( setf (eca--session-models session)))
1752- (-some-> > ( plist-get chat-config :behaviors )
1753- ( setf (eca--session-chat-behaviors session)))
1754- (-some-> > ( plist-get chat-config :selectModel )
1755- ( setf ( eca--session-chat-selected-model session)))
1756- (-some-> > ( plist-get chat-config :selectBehavior )
1757- ( setf (eca--session-chat-selected- behavior session) )))
1747+ (defun eca-chat--handle-mcp-server- updated (session _server )
1748+ " Handle mcp SERVER updated for SESSION."
1749+ ; ; TODO do for all chats
1750+ (eca-chat--with-current-buffer (eca-chat--get-last-buffer session)
1751+ ( force-mode-line-update )) )
1752+
1753+ ( defun eca-chat--set-behavior ( session new-behavior )
1754+ " Set new behavior to NEW-BEHAVIOR notifying server for SESSION. "
1755+ (setf (eca--session- chat-selected-behavior session) new-behavior )
1756+ ( eca-api-notify session
1757+ :method " chat/selectedBehaviorChanged "
1758+ :params ( list : behavior new-behavior )))
17581759
17591760(defun eca-chat--tool-call-file-change-details
1760- (content label approval-text time status tool-call-next-line-spacing roots)
1761+ (content label approval-text time status tool-call-next-line-spacing roots)
17611762 " Update tool call UI based showing file change details.
17621763LABEL is the tool call label.
17631764CONTENT is the tool call content.
@@ -2033,11 +2034,18 @@ Append STATUS, TOOL-CALL-NEXT-LINE-SPACING and ROOTS"
20332034 (setq-local eca-chat--session-cost (plist-get content :sessionCost )))
20342035 (_ nil )))))
20352036
2036- (defun eca-chat--handle-mcp-server-updated (session _server )
2037- " Handle mcp SERVER updated for SESSION."
2038- ; ; TODO do for all chats
2039- (eca-chat--with-current-buffer (eca-chat--get-last-buffer session)
2040- (force-mode-line-update )))
2037+ (defun eca-chat-config-updated (session chat-config )
2038+ " Update chat based on the CHAT-CONFIG for SESSION."
2039+ (-some->> (plist-get chat-config :welcomeMessage )
2040+ (setf (eca--session-chat-welcome-message session)))
2041+ (-some->> (plist-get chat-config :models )
2042+ (setf (eca--session-models session)))
2043+ (-some->> (plist-get chat-config :behaviors )
2044+ (setf (eca--session-chat-behaviors session)))
2045+ (-some->> (plist-get chat-config :selectModel )
2046+ (setf (eca--session-chat-selected-model session)))
2047+ (-some->> (plist-get chat-config :selectBehavior )
2048+ (setf (eca--session-chat-selected-behavior session))))
20412049
20422050(defun eca-chat-open (session )
20432051 " Open or create dedicated eca chat window for SESSION."
@@ -2143,10 +2151,20 @@ Append STATUS, TOOL-CALL-NEXT-LINE-SPACING and ROOTS"
21432151 (interactive )
21442152 (eca-assert-session-running (eca-session))
21452153 (when-let* ((behavior (completing-read " Select a behavior:" (append (eca--session-chat-behaviors (eca-session)) nil ) nil t )))
2146- (setf (eca--session-chat-selected-behavior (eca-session)) behavior)
2147- (eca-api-notify (eca-session)
2148- :method " chat/selectedBehaviorChanged"
2149- :params (list :behavior behavior))))
2154+ (eca-chat--set-behavior (eca-session) behavior)))
2155+
2156+ ;;;### autoload
2157+ (defun eca-chat-cycle-behavior ()
2158+ " Cycle between existing chat behaviors to use."
2159+ (interactive )
2160+ (eca-assert-session-running (eca-session))
2161+ (let* ((session (eca-session))
2162+ (current-behavior (eca--session-chat-selected-behavior session))
2163+ (all-behaviors (append (eca--session-chat-behaviors session) nil ))
2164+ (current-behavior-index (seq-position all-behaviors current-behavior))
2165+ (next-behavior (or (nth (1+ current-behavior-index) all-behaviors)
2166+ (nth 0 all-behaviors))))
2167+ (eca-chat--set-behavior session next-behavior)))
21502168
21512169;;;### autoload
21522170(defun eca-chat-reset ()
0 commit comments