Files
memex/notes/skill-web-interface.org

2.2 KiB

#+TITLE - Web Dashboard Skill #+AUTHOR - org-agent #+SKILL_NAME - skill-web-interface

This skill provides a lightweight web interface for the Neurosymbolic Kernel using the Hunchentoot server.

Web Server Implementation

(defvar *web-server* nil)

(defun start-dashboard (&optional (port 8080))
  "Starts the Hunchentoot dashboard server."
  (unless *web-server*
    (setf *web-server* (make-instance 'hunchentoot:easy-acceptor :port port))
    (hunchentoot:start *web-server*)
    (kernel-log "WEB - Dashboard live on port ~a" port)))

(hunchentoot:define-easy-handler (dashboard-home :uri "/") ()
  (setf (hunchentoot:content-type*) "text/html")
  (let* ((skills (org-agent:context-list-all-skills))
         (telemetry (mapcar (lambda (s) 
                              (let ((stats (org-agent:context-get-skill-telemetry (getf s :name))))
                                (format nil "<li><b>~a</b> (P:~a) [Execs: ~a, Time: ~ams, Fails: ~a]</li>"
                                        (getf s :name) 
                                        (getf s :priority)
                                        (or (getf stats :executions) 0)
                                        (or (getf stats :total-time) 0)
                                        (or (getf stats :failures) 0))))
                            skills)))
    (format nil "
      <html>
      <head><title>org-agent Dashboard</title></head>
      <body style='font-family: monospace; background: #111; color: #eee; padding: 20px;'>
        <h1>org-agent Neurosymbolic Kernel</h1>
        <hr>
        <h2>Active Skill Graph & Telemetry</h2>
        <ul>
          ~{~a~%~}
        </ul>
        <hr>
        <h2>Recent Logs</h2>
        <pre>~{~a~%~}</pre>
      </body>
      </html>
    " telemetry (org-agent:context-get-system-logs 20))))

;; Start the dashboard upon skill load
(let* ((env-port (uiop:getenv "ORG_AGENT_WEB_PORT"))
       (port (if env-port (parse-integer env-port :junk-allowed t) 8080)))
  (start-dashboard port))

Registration

(defskill :skill-web-interface
  :priority 10 ; Low priority, background service
  :trigger (lambda (context) nil)
  :neuro (lambda (context) nil)
  :symbolic (lambda (action context) action))