- Changed all 50 org file :tangle targets from ../lisp/ to ~/.local/share/passepartout/lisp/ (XDG data dir) - Removed 49 generated .lisp files from project lisp/ directory - Removed tests/system-integration-tests.lisp (generated) - Removed lisp/*.fasl (compiled, stale) - Updated core-manifest.org to tangle .asd to XDG root - Remapped quicklisp symlink: local-projects/passepartout → XDG TUI fixes in channel-tui-main.org: - Removed with-raw-terminal (stty raw breaks fd 0 reads in this SBCL) - Use cat subprocess + pipe for keyboard input (via :input :interactive) - Blocking read-char on pipe with with-timeout 0.1s for daemon processing - Key events queued via drain-queue alongside daemon messages - Full dialog key routing (Escape, Up/Down, Enter, filters, Backspace) - SIGWINCH resize handling - Post-handshake backend-size re-query - Daemon version in status bar (was v0.5.0 hardcoded) - Handshake version stored in state, no add-msg - :daemon-version and :size-queried in state plist - view-status uses draw-rect for background - Test section gated with #+passepartout-tests
56 lines
2.6 KiB
Org Mode
56 lines
2.6 KiB
Org Mode
#+TITLE: System Manifest (manifest.org)
|
|
#+AUTHOR: Agent
|
|
#+FILETAGS: :harness:manifest:
|
|
#+STARTUP: content
|
|
#+PROPERTY: header-args:lisp :tangle /home/user/.local/share/passepartout/passepartout.asd
|
|
|
|
* Overview: Architectural Intent
|
|
|
|
The Manifest is the ASDF system definition for Passepartout. It defines what files belong to the harness, which external libraries are required, and how the test infrastructure is organized.
|
|
|
|
The ~passepartout.asd~ file tangled from this manifest is what ~ql:quickload :passepartout~ reads to load the system. The files are loaded in the order listed here — dependencies first, then each pipeline stage in order.
|
|
|
|
* Implementation
|
|
|
|
** Main System
|
|
|
|
The core system. The combined ~:depends-on~ list pulls in every external library the agent needs: networking (usocket, dexador, hunchentoot), concurrency (bordeaux-threads), utilities (uiop, cl-ppcre, cl-json, str), security (ironclad), and configuration (cl-dotenv, uuid).
|
|
|
|
Components are loaded in sequence (~:serial t~): package first (defines the public API), then skills (does the defskill macro), then communication (defines the protocol), then memory (defines org-object), then context (defines peripheral vision), then each pipeline stage in order (perceive, reason, act), then doctor (diagnostics), then loop (orchestration).
|
|
|
|
#+begin_src lisp
|
|
(defsystem :passepartout
|
|
:name "Passepartout"
|
|
:author "Amr Gharbeia"
|
|
:version "0.4.3"
|
|
:license "AGPLv3"
|
|
:description "The Probabilistic-Deterministic Lisp Machine"
|
|
:depends-on (:usocket :bordeaux-threads :dexador :uiop :cl-dotenv :cl-ppcre :hunchentoot :ironclad :str :cl-json :uuid)
|
|
:serial t
|
|
:components ((:file "lisp/core-package")
|
|
(:file "lisp/core-skills")
|
|
(:file "lisp/core-transport")
|
|
(:file "lisp/core-memory")
|
|
(:file "lisp/core-perceive")
|
|
(:file "lisp/core-reason")
|
|
(:file "lisp/core-act")
|
|
(:file "lisp/core-pipeline")))
|
|
#+end_src
|
|
|
|
** Test System
|
|
|
|
Tests are embedded directly in each module's source file — see the `* Test Suite` section at the end of each `.org` file. No separate test system is needed.
|
|
|
|
** TUI System
|
|
|
|
The TUI is a standalone system that depends on Croatoan (ncurses bindings) in addition to the core opencortex system. It's loaded separately because Croatoan requires a terminal and is not needed for daemon-mode operation.
|
|
|
|
#+begin_src lisp
|
|
(defsystem :passepartout/tui
|
|
:depends-on (:passepartout :croatoan :usocket :bordeaux-threads)
|
|
:serial t
|
|
:components ((:file "lisp/channel-tui-state")
|
|
(:file "lisp/channel-tui-view")
|
|
(:file "lisp/channel-tui-main")))
|
|
#+end_src
|