Function: eca-chat-resume
eca-chat-resume is an interactive and natively compiled function
defined in eca-chat.el.
Signature
(eca-chat-resume)
Documentation
Select and resume a previous ECA session.
Key Bindings
This command is not in any keymaps.
Source Code
;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-chat.el
;;;###autoload
(defun eca-chat-resume ()
"Select and resume a previous ECA session."
(interactive)
(let* ((session (eca-session))
(from-buf (current-buffer)))
(eca-assert-session-running session)
(let* ((res (eca-api-request-sync session :method "chat/list"))
;; Drop entries the server can't actually re-open: nil ids show up
;; for legacy DB rows that pre-date the per-chat `:id` field, and
;; picking them would silently no-op because `chat/open' returns
;; a false `found' or legacy `found?' field.
(chats (cl-remove-if-not (lambda (c) (plist-get c :id))
(append (plist-get res :chats) nil))))
(if (null chats)
(message "No previous sessions to resume.")
(let* ((id-by-label (make-hash-table :test 'equal))
(ann-by-label (make-hash-table :test 'equal))
(labels nil))
(seq-do
(lambda (chat)
(let* ((id (plist-get chat :id))
(title (or (plist-get chat :title) "Untitled"))
(model (plist-get chat :model))
(count (plist-get chat :messageCount))
(upd (plist-get chat :updatedAt))
(label (if (gethash title id-by-label)
(concat title " (" id ")")
title))
(ann (concat
(when model
(propertize (concat " " model) 'face 'shadow))
(when count
(propertize (format " %d msgs" count) 'face 'shadow))
(when-let* ((rel (eca-chat--relative-time upd)))
(propertize (concat " " rel)
'face 'eca-chat-elapsed-time-face)))))
(puthash label id id-by-label)
(puthash label ann ann-by-label)
(push label labels)))
chats)
(setq labels (nreverse labels))
(when-let* ((chosen (completing-read
"Resume session: "
(lambda (string pred action)
(if (eq action 'metadata)
`(metadata
(display-sort-function . ,#'identity)
(annotation-function
. ,(lambda (candidate)
(gethash candidate ann-by-label))))
(complete-with-action action labels string pred)))
nil t))
(chat-id (gethash chosen id-by-label)))
(eca-chat--begin-opening session chat-id)
(condition-case err
(eca-api-request-async
session
:method "chat/open"
:params (append (list :chatId chat-id)
(when eca-chat-history-page-size
(list :limit eca-chat-history-page-size)))
:success-callback
(lambda (open-res)
(eca-chat--handle-open-response
session from-buf chat-id open-res))
:error-callback
(lambda (request-err)
(eca-chat--finish-opening session chat-id)
(user-error "Failed to resume: %s" request-err)))
(error
(eca-chat--finish-opening session chat-id)
(signal (car err) (cdr err))))))))))