(defun self-fix-replace-all (string part replacement) (with-output-to-string (out) (loop with part-length = (length part) for old-pos = 0 then (+ pos part-length) for pos = (search part string :start2 old-pos) do (write-string string out :start old-pos :end (or pos (length string))) when pos do (write-string replacement out) while pos))) (defun self-fix-apply (action context) "Applies a surgical code fix directly to the target file." (declare (ignore context)) (let* ((payload (getf action :payload)) (target-file (getf payload :file)) (old-code (getf payload :old)) (new-code (getf payload :new))) (org-agent:kernel-log "SELF-FIX - Attempting surgical fix on ~a..." target-file) (if (uiop:file-exists-p target-file) (let ((content (uiop:read-file-string target-file))) (if (search old-code content) (let ((new-content (self-fix-replace-all content old-code new-code))) (with-open-file (out target-file :direction :output :if-exists :supersede) (write-string new-content out)) (org-agent:kernel-log "SELF-FIX SUCCESS - Applied fix to ~a" target-file) t) (progn (org-agent:kernel-log "SELF-FIX FAILURE - Could not find old code in ~a" target-file) nil))) (progn (org-agent:kernel-log "SELF-FIX FAILURE - File not found: ~a" target-file) nil)))) (defun neuro-skill-self-fix (context) "Neural stage: Synthesizes a surgical code modification based on the hypothesis." (let* ((payload (getf context :payload)) (hypothesis (getf payload :hypothesis)) (failure-log (getf payload :failure-log))) (org-agent:ask-neuro (format nil "Based on the hypothesis '~a' and failure '~a', provide the exact Lisp code to fix it. Return a Lisp plist: (:target :self-fix :action :apply :file \"path/to/file.lisp\" :old \"old code\" :new \"new code\")" hypothesis failure-log) :system-prompt "You are the PSF Repair Actuator. You MUST return ONLY a Lisp plist.")))