             (pcase .kind
               ("message"
                (fstar-subp--process-message .level .contents))
+              ("protocol-info"
+               (fstar-subp--process-protocol-info .version .features))
               ("response"
                (let ((status (fstar-subp-json--parse-status .status)))
                  (fstar-subp--process-response .query-id status .response)))))))))

asynchronously after the fact)."
  (-if-let* ((hole-info (get-text-property (point) 'fstar--match-var-type)))
      (format "This hole has type `%s'" (car hole-info))
    (when (and (fstar--has-feature 'info) (fstar-subp-available-p)
               (not (fstar-subp--in-issue-p (point))))
      (let* ((query (fstar-subp--positional-info-query (point)))
             (retv (fstar-subp--query-and-wait query 0.01)))

  (let ((header (format "[F* %s] " level)))
    (setq contents (string-trim contents))
    (message "%s" (replace-regexp-in-string "^" header contents))))

(defun fstar-subp--process-protocol-info (_vernum features)
  "Register information (VERNUM and FEATURES) about the current protocol."
  (setq features (mapcar 'intern features))
  (setq-local fstar-subp--features features)
  (fstar-subp-with-process-buffer fstar-subp--process
    (setq-local fstar-subp--features features)))

(defun fstar-subp--process-response (id status response)
  "Process STATUS and RESPONSE for query ID from F* subprocess."
