34 lines
1.6 KiB
Common Lisp
34 lines
1.6 KiB
Common Lisp
(in-package :org-agent)
|
|
(defun inbox-is-private-p (tags)
|
|
(member "@personal" tags :test #'string-equal))
|
|
|
|
(defun inbox-is-archive-p (tags)
|
|
(member "!archive" tags :test #'string-equal))
|
|
|
|
(in-package :org-agent)
|
|
(defun probabilistic-skill-inbox-processor (context)
|
|
(let* ((payload (getf context :payload))
|
|
(content (getf payload :content))
|
|
(tags (getf payload :tags))
|
|
(is-archive (inbox-is-archive-p tags)))
|
|
(ask-probabilistic content :system-prompt
|
|
(format nil "You are the PSF Librarian. Your goal is to ENRICH this Org-mode capture.
|
|
RULES:
|
|
1. Create a '** Summary' sub-heading with a 1-sentence summary.
|
|
2. Create a '** Significance' sub-heading with a paragraph explaining why this matters to a Sovereign Lisp Machine and how it can be used.
|
|
3. ~:[~;~* ARCHIVE MODE: Extract the full text of the item into a '** Full Text' sub-heading, preserving Org-mode structure.~]
|
|
4. Return ONLY a Lisp plist with :summary :significance :full-text.
|
|
5. NO conversational filler." is-archive))))
|
|
|
|
(in-package :org-agent)
|
|
(defun inbox-process-logic (action context)
|
|
(declare (ignore action))
|
|
(let* ((payload (getf context :payload))
|
|
(sensor (getf payload :sensor)))
|
|
(when (eq sensor :heartbeat)
|
|
(let* ((base-dir (or (uiop:getenv "MEMEX_DIR") "/home/user/memex/"))
|
|
(inbox-path (merge-pathnames "inbox.org" base-dir)))
|
|
(org-agent:harness-log "INBOX - Scanning ~a for migration..." (uiop:native-namestring inbox-path))
|
|
;; Physical move logic would go here using Org AST parsing
|
|
'(:target :system :payload (:action :message :text "Inbox processing complete (Simulation)."))))))
|