diff --git a/fix_context.py b/fix_context.py new file mode 100644 index 0000000..cdb93bb --- /dev/null +++ b/fix_context.py @@ -0,0 +1,42 @@ +import sys + +filepath = 'literate/context.org' +with open(filepath, 'r') as f: + lines = f.readlines() + +out = [] +skip = False +for line in lines: + if '(defun context-resolve-path (path-string)' in line: + out.append('(defun context-resolve-path (path-string)\n') + out.append(' "Expands environment variables and strips literal quotes from a path string."\n') + out.append(' (let ((path (if (stringp path-string) \n') + out.append(' (string-trim \'(#\\" #\\\' #\\Space) path-string)\n') + out.append(' path-string)))\n') + out.append(' (if (and (stringp path) (search "$" path))\n') + out.append(' (let ((result path))\n') + out.append(' (ppcre:do-register-groups (var-name) ("\\\\$([A-Za-z0-9_]+)" path)\n') + out.append(' (let ((var-val (uiop:getenv var-name)))\n') + out.append(' (when var-val\n') + out.append(' (setf result (ppcre:regex-replace (format nil "\\\\$~a" var-name) result var-val)))))\n') + out.append(' result)\n') + out.append(' path)))\n') + skip = True + continue + + if skip: + if 'path-string))' in line: + skip = False + continue + + out.append(line) + +with open(filepath, 'w') as f: + f.writelines(out) + +# 2. Fix opencortex.sh +with open('opencortex.sh', 'r') as f: + sh = f.read() +sh = sh.replace('[ ! -f "$SCRIPT_DIR/.env" ]', '[ ! -f "$SCRIPT_DIR/.env" ] && [ ! -f "$HOME/.local/share/opencortex/.env" ]') +with open('opencortex.sh', 'w') as f: + f.write(sh) diff --git a/literate/context.org b/literate/context.org index 1a07d9b..9c10664 100644 --- a/literate/context.org +++ b/literate/context.org @@ -179,8 +179,18 @@ A utility function that expands environment variables (like ~$HOME~ or ~$MEMEX_R #+begin_src lisp :tangle ../src/context.lisp (defun context-resolve-path (path-string) - "Expands all environment variables ($VAR) within a path string." - (if (and (stringp path-string) (search "$" path-string)) + "Expands environment variables and strips literal quotes from a path string." + (let ((path (if (stringp path-string) + (string-trim '(#\" #\' #\Space) path-string) + path-string))) + (if (and (stringp path) (search "$" path)) + (let ((result path)) + (ppcre:do-register-groups (var-name) ("\\$([A-Za-z0-9_]+)" path) + (let ((var-val (uiop:getenv var-name))) + (when var-val + (setf result (ppcre:regex-replace (format nil "\\$~a" var-name) result var-val))))) + result) + path))) (let ((result path-string)) (ppcre:do-register-groups (var-name) ("\\$([A-Za-z0-9_]+)" path-string) (let ((var-val (uiop:getenv var-name))) diff --git a/opencortex.sh b/opencortex.sh index d5e5a48..5492feb 100755 --- a/opencortex.sh +++ b/opencortex.sh @@ -123,7 +123,7 @@ setup_system() { echo -e "${YELLOW}--- Finalizing: Awakening the Brain as a background daemon ---${NC}" > "$SCRIPT_DIR/brain.log" - bash "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & + "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & local success=false for i in {1..30}; do @@ -157,7 +157,7 @@ setup_system() { COMMAND=${1:-"cli"} # However, if the system is completely uninitialized, we force the 'setup' command. -if [ ! -f "$SCRIPT_DIR/src/package.lisp" ] || [ ! -f "$SCRIPT_DIR/.env" ]; then +if [ ! -f "$SCRIPT_DIR/src/package.lisp" ] || [ ! -f "$SCRIPT_DIR/.env" ] && [ ! -f "$HOME/.local/share/opencortex/.env" ]; then COMMAND="setup" fi @@ -169,13 +169,13 @@ case "$COMMAND" in --boot|boot) export SKILLS_DIR="${SCRIPT_DIR}/skills" [ -z "$MEMEX_DIR" ] && export MEMEX_DIR="$HOME/memex" - exec sbcl --disable-debugger --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' --eval '(setf *debugger-hook* (lambda (c h) (declare (ignore h)) (format *error-output* "FATAL LISP ERROR: ~a~%" c) (uiop:print-backtrace :stream *error-output*) (uiop:quit 1)))' --eval '(push (truename (uiop:getenv "SCRIPT_DIR")) asdf:*central-registry*)' --eval '(format t "--- Quickloading OpenCortex ---~%")' --eval "(ql:quickload '(:opencortex :croatoan))" --eval '(opencortex:main)' + exec sbcl --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' --eval '(setf *debugger-hook* (lambda (c h) (declare (ignore h)) (format *error-output* "FATAL LISP ERROR: ~a~%" c) (uiop:print-backtrace :stream *error-output*) (uiop:quit 1)))' --eval '(push (truename (uiop:getenv "SCRIPT_DIR")) asdf:*central-registry*)' --eval '(format t "--- Quickloading OpenCortex ---~%")' --eval "(ql:quickload '(:opencortex :croatoan))" --eval '(opencortex:main)' ;; tui) if ! nc -z $HOST $PORT 2>/dev/null; then echo -e "Brain is offline. Awakening..." - bash "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & + "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & for i in {1..15}; do sleep 2 if nc -z $HOST $PORT 2>/dev/null; then break; fi @@ -186,13 +186,13 @@ case "$COMMAND" in echo -e "Launching Croatoan TUI..." export SKILLS_DIR="${SCRIPT_DIR}/skills" [ -z "$MEMEX_DIR" ] && export MEMEX_DIR="$HOME/memex" - exec sbcl --disable-debugger --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' --eval '(push (truename (uiop:getenv "SCRIPT_DIR")) asdf:*central-registry*)' --eval '(ql:quickload :opencortex/tui)' --eval '(opencortex.tui:main)' + exec sbcl --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' --eval '(push (truename (uiop:getenv "SCRIPT_DIR")) asdf:*central-registry*)' --eval '(ql:quickload :opencortex/tui)' --eval '(opencortex.tui:main)' ;; cli) if ! nc -z $HOST $PORT 2>/dev/null; then echo -e "Brain is offline. Awakening..." - bash "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & + "$SCRIPT_DIR/opencortex.sh" --boot > "$SCRIPT_DIR/brain.log" 2>&1 & for i in {1..15}; do sleep 2 if nc -z $HOST $PORT 2>/dev/null; then break; fi diff --git a/src/context.lisp b/src/context.lisp index aafaf7c..3f0012c 100644 --- a/src/context.lisp +++ b/src/context.lisp @@ -91,8 +91,18 @@ output)) (defun context-resolve-path (path-string) - "Expands all environment variables ($VAR) within a path string." - (if (and (stringp path-string) (search "$" path-string)) + "Expands environment variables and strips literal quotes from a path string." + (let ((path (if (stringp path-string) + (string-trim '(#\" #\' #\Space) path-string) + path-string))) + (if (and (stringp path) (search "$" path)) + (let ((result path)) + (ppcre:do-register-groups (var-name) ("\\$([A-Za-z0-9_]+)" path) + (let ((var-val (uiop:getenv var-name))) + (when var-val + (setf result (ppcre:regex-replace (format nil "\\$~a" var-name) result var-val))))) + result) + path))) (let ((result path-string)) (ppcre:do-register-groups (var-name) ("\\$([A-Za-z0-9_]+)" path-string) (let ((var-val (uiop:getenv var-name))) diff --git a/src/package.lisp b/src/package.lisp index 5d0e2c1..03e8d20 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -4,9 +4,6 @@ ;; --- communication protocol --- #:frame-message #:read-framed-message - #:*VAULT-MEMORY* - #:COSINE-SIMILARITY - #:VAULT-MASK-STRING #:parse-message #:make-hello-message #:validate-communication-protocol-schema diff --git a/src/skills.lisp b/src/skills.lisp index 5017496..812d504 100644 --- a/src/skills.lisp +++ b/src/skills.lisp @@ -151,7 +151,7 @@ (harness-log "HARNESS: Jailing skill '~a' in package ~a" skill-base-name pkg-name) (unless (find-package pkg-name) (let ((new-pkg (make-package pkg-name :use '(:cl)))) - (do-external-symbols (sym (find-package :opencortex)) (import sym new-pkg)))) + (do-external-symbols (sym (find-package :opencortex)) (shadowing-import sym new-pkg)))) (let ((*read-eval* nil) (*package* (find-package pkg-name))) (eval (read-from-string (format nil "(progn ~a)" lisp-code)))) (setf (skill-entry-status entry) :ready)