Skip to content

Commit 3b022b3

Browse files
authored
Warn when extensions use unsupported UI methods (#183)
When an extension calls a UI method that Emacs doesn't handle yet (setWidget, editor, setTitle, etc.), show a warning in the minibuffer instead of silently dropping it. The user now sees, for example: Pi: extension UI method `setWidget' not supported in Emacs The cancelled response is still sent back so the extension does not hang waiting for a reply. Related: #176
1 parent 2824866 commit 3b022b3

2 files changed

Lines changed: 38 additions & 12 deletions

File tree

‎pi-coding-agent-render.el‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -575,13 +575,15 @@ Shows success or final failure with raw error."
575575
(force-mode-line-update t)))
576576

577577
(defun pi-coding-agent--extension-ui-unsupported (event proc)
578-
"Handle unsupported method from EVENT by sending cancelled via PROC."
578+
"Handle unsupported method from EVENT by warning and sending cancelled via PROC.
579+
See URL `https://github.com/dnouri/pi-coding-agent/issues/176'."
580+
(message "Pi: extension UI method `%s' not supported in Emacs"
581+
(plist-get event :method))
579582
(when proc
580-
(pi-coding-agent--rpc-async proc
581-
(list :type "extension_ui_response"
582-
:id (plist-get event :id)
583-
:cancelled t)
584-
#'ignore)))
583+
(pi-coding-agent--send-extension-ui-response
584+
proc (list :type "extension_ui_response"
585+
:id (plist-get event :id)
586+
:cancelled t))))
585587

586588
(defun pi-coding-agent--handle-extension-ui-request (event)
587589
"Handle extension_ui_request EVENT from pi.

‎test/pi-coding-agent-render-test.el‎

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,6 +1249,28 @@ since we don't display them locally. Let pi's message_start handle it."
12491249
:message nil))
12501250
(should (null pi-coding-agent--working-message))))
12511251

1252+
(ert-deftest pi-coding-agent-test-extension-ui-unsupported-warns ()
1253+
"Unsupported extension_ui_request method warns via `message'.
1254+
See https://github.com/dnouri/pi-coding-agent/issues/176."
1255+
(let (messages-logged response-sent)
1256+
(cl-letf (((symbol-function 'message)
1257+
(lambda (fmt &rest args) (push (apply #'format fmt args) messages-logged)))
1258+
((symbol-function 'pi-coding-agent--send-extension-ui-response)
1259+
(lambda (_proc resp) (setq response-sent resp))))
1260+
(with-temp-buffer
1261+
(pi-coding-agent-chat-mode)
1262+
(let ((pi-coding-agent--process t))
1263+
(pi-coding-agent--handle-extension-ui-request
1264+
'(:type "extension_ui_request"
1265+
:id "req-unknown"
1266+
:method "someNewFancyWidget")))))
1267+
;; Should warn the user
1268+
(should (cl-some (lambda (m) (string-match-p "someNewFancyWidget" m))
1269+
messages-logged))
1270+
;; Should still send cancelled so the extension doesn't hang
1271+
(should response-sent)
1272+
(should (equal (plist-get response-sent :cancelled) t))))
1273+
12521274
(ert-deftest pi-coding-agent-test-header-format-extension-status ()
12531275
"Extension status formatter returns inline neutral status text without pipe."
12541276
;; Empty status returns empty string
@@ -1271,9 +1293,10 @@ since we don't display them locally. Let pi's message_start handle it."
12711293
(ert-deftest pi-coding-agent-test-extension-ui-unknown-cancels ()
12721294
"extension_ui_request with unknown method sends cancelled response."
12731295
(let ((response-sent nil))
1274-
(cl-letf (((symbol-function 'pi-coding-agent--rpc-async)
1275-
(lambda (_proc msg _cb)
1276-
(setq response-sent msg))))
1296+
(cl-letf (((symbol-function 'pi-coding-agent--send-extension-ui-response)
1297+
(lambda (_proc msg)
1298+
(setq response-sent msg)))
1299+
((symbol-function 'message) #'ignore))
12771300
(with-temp-buffer
12781301
(pi-coding-agent-chat-mode)
12791302
(let ((pi-coding-agent--process t))
@@ -1291,9 +1314,10 @@ since we don't display them locally. Let pi's message_start handle it."
12911314
(ert-deftest pi-coding-agent-test-extension-ui-editor-cancels ()
12921315
"extension_ui_request editor method sends cancelled (not supported)."
12931316
(let ((response-sent nil))
1294-
(cl-letf (((symbol-function 'pi-coding-agent--rpc-async)
1295-
(lambda (_proc msg _cb)
1296-
(setq response-sent msg))))
1317+
(cl-letf (((symbol-function 'pi-coding-agent--send-extension-ui-response)
1318+
(lambda (_proc msg)
1319+
(setq response-sent msg)))
1320+
((symbol-function 'message) #'ignore))
12971321
(with-temp-buffer
12981322
(pi-coding-agent-chat-mode)
12991323
(let ((pi-coding-agent--process t))

0 commit comments

Comments
 (0)