Function: eca-chat--tool-call-subagent-details
eca-chat--tool-call-subagent-details is a natively compiled function
defined in eca-chat.el.
Signature
(eca-chat--tool-call-subagent-details ID ARGS LABEL APPROVAL-TEXT TIME STATUS PARENT-ID DETAILS &optional OUTPUT-TEXT)
Documentation
Update tool call UI for a subagent tool call.
ID and ARGS are from the tool call content. LABEL is the expandable block label. DETAILS is the details of the tool call. Can include optional APPROVAL-TEXT and TIME. Append STATUS symbol. Optional PARENT-ID for nested rendering.
Source Code
;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-chat.el
(defun eca-chat--tool-call-subagent-details (id args label approval-text time status parent-id details &optional output-text)
"Update tool call UI for a subagent tool call.
ID and ARGS are from the tool call content.
LABEL is the expandable block label.
DETAILS is the details of the tool call.
Can include optional APPROVAL-TEXT and TIME.
Append STATUS symbol. Optional PARENT-ID for nested rendering."
(-let* ((agent-name (plist-get args :agent))
(task (plist-get args :task))
(model (plist-get details :model))
(variant (plist-get details :variant))
(step (plist-get details :step))
(max-steps (plist-get details :maxSteps))
(usage-str (eca-chat--subagent-usage-str id))
(steps-info (eca-chat--subagent-steps-info step max-steps usage-str))
(existing-ov (eca-chat--get-expandable-content id))
;; Preserve pending-approval status when a step update arrives with
;; loading status — an inner tool call may be waiting for approval.
(status (if (and existing-ov
(string= status eca-chat-mcp-tool-call-loading-symbol)
(string= (overlay-get existing-ov 'eca-chat--tool-call-status)
eca-chat-mcp-tool-call-pending-approval-symbol))
eca-chat-mcp-tool-call-pending-approval-symbol
status))
(new-label (concat (propertize label 'font-lock-face 'eca-chat-subagent-tool-call-label-face)
steps-info " " status time
(when approval-text (concat "\n" approval-text))))
(has-children? (and existing-ov
(eca-chat--segments-children
(overlay-get existing-ov 'eca-chat--expandable-content-segments)))))
(if has-children?
;; Block already has nested child content (subagent tool calls, reasoning,
;; approval prompts, etc). Only update the label line to reflect the new
;; step count / status, preserving all rendered children.
(let* ((ov-content (overlay-get existing-ov 'eca-chat--expandable-content-ov-content))
(open? (overlay-get existing-ov 'eca-chat--expandable-content-toggle))
(content (overlay-get ov-content 'eca-chat--expandable-content-content))
(has-content? (or (and content (not (string-empty-p content)))
has-children?))
(new-icon-face (get-text-property 0 'font-lock-face new-label))
(label-indent (when (overlay-get existing-ov 'eca-chat--expandable-content-nested)
eca-chat--expandable-content-base-indent))
(new-icons (eca-chat--make-expandable-icons new-icon-face label-indent)))
(overlay-put existing-ov 'eca-chat--expandable-content-open-icon (car new-icons))
(overlay-put existing-ov 'eca-chat--expandable-content-close-icon (cdr new-icons))
(save-excursion
(goto-char (overlay-start existing-ov))
(delete-region (point) (1- (overlay-start ov-content)))
(eca-chat--insert
(propertize (eca-chat--propertize-only-first-word
new-label
'line-prefix (when has-content?
(if open?
(cdr new-icons)
(car new-icons))))
'help-echo "mouse-1 / RET / tab: expand/collapse"))
(eca-chat--paint-nested-label existing-ov)))
;; No children yet — safe to replace the full content body
(eca-chat--update-expandable-content
id
new-label
(eca-chat--content-table
`(("Agent" . ,agent-name)
("Model" . ,model)
,@(when variant `(("Variant" . ,variant)))
,@(when task `(("Task" . ,(concat task "\n\n"))))
,@(when output-text `(("Output" . ,(concat "\n" output-text))))))
nil
parent-id))
;; Store status and label on the overlay so we can update them later
(when-let* ((ov (eca-chat--get-expandable-content id)))
(overlay-put ov 'eca-chat--tool-call-status status)
(overlay-put ov 'eca-chat--tool-call-label label)
(overlay-put ov 'eca-chat--tool-call-steps-info steps-info)
(overlay-put ov 'eca-chat--tool-call-step step)
(overlay-put ov 'eca-chat--tool-call-max-steps max-steps)
(overlay-put ov 'eca-chat--tool-call-time time))))