diff --git a/scripts/dream.py b/scripts/dream.py index 8cbf64f..9111920 100644 --- a/scripts/dream.py +++ b/scripts/dream.py @@ -18,9 +18,14 @@ DB_PATH = str(Path.home() / "aaronai" / "db") CONVERSATIONS_DB = str(Path.home() / "aaronai" / "conversations.db") WATCHER_STATE = str(Path.home() / "aaronai" / "watcher_state.json") DREAMER_STATE = str(Path.home() / "aaronai" / "dreamer_state.json") -DREAMS_DIR = "/home/aaron/nextcloud/data/data/aaron/files/Journal/Dreams" JOURNAL_DIR = "/home/aaron/nextcloud/data/data/aaron/files/Journal/Daily" +# Nextcloud WebDAV config — proper API, works for any deployment +NEXTCLOUD_URL = os.getenv("NEXTCLOUD_URL", "https://nextcloud.aaronnelson.studio") +NEXTCLOUD_USER = os.getenv("NEXTCLOUD_USER", "aaron") +NEXTCLOUD_PASSWORD = os.getenv("NEXTCLOUD_PASSWORD", "") +DREAMS_WEBDAV = f"{NEXTCLOUD_URL}/remote.php/dav/files/{NEXTCLOUD_USER}/Journal/Dreams" + # ─── Mode similarity ranges (calibrated for all-MiniLM-L6-v2) ─────────────── MODE_RANGES = { "nrem": (0.60, 0.72), @@ -253,34 +258,47 @@ End with an offer to work on it together.""", # ─── Stage 5: Deliver ─────────────────────────────────────────────────────── def deliver(dream_text, mode, task=None): - dreams_dir = Path(DREAMS_DIR) - dreams_dir.mkdir(parents=True, exist_ok=True) + import requests date_str = datetime.now().strftime("%Y-%m-%d") filename = f"{date_str}-{mode}.md" - filepath = dreams_dir / filename - - counter = 1 - while filepath.exists(): - filename = f"{date_str}-{mode}-{counter}.md" - filepath = dreams_dir / filename - counter += 1 header = f"# Dream — {mode.upper()} — {datetime.now().strftime('%Y-%m-%d %H:%M')}\n\n" if task: header += f"*Task: {task}*\n\n" header += "---\n\n" - filepath.write_text(header + dream_text, encoding="utf-8") - print(f"Dream written to: {filepath}") + content = header + dream_text + + # Ensure Dreams folder exists via WebDAV MKCOL + auth = (NEXTCLOUD_USER, NEXTCLOUD_PASSWORD) + requests.request("MKCOL", DREAMS_WEBDAV, auth=auth, timeout=10) + + # Write file via WebDAV PUT — handles any deployment + url = f"{DREAMS_WEBDAV}/{filename}" + + # Handle filename collision + counter = 1 + while True: + check = requests.request("PROPFIND", url, auth=auth, timeout=10) + if check.status_code == 404: + break + filename = f"{date_str}-{mode}-{counter}.md" + url = f"{DREAMS_WEBDAV}/{filename}" + counter += 1 + + response = requests.put(url, data=content.encode("utf-8"), auth=auth, timeout=30) + response.raise_for_status() + + print(f"Dream written to Nextcloud: Journal/Dreams/{filename}") state = load_dreamer_state() state["last_dream_timestamp"] = datetime.now().timestamp() state["last_dream_mode"] = mode - state["last_dream_file"] = str(filepath) + state["last_dream_file"] = f"Journal/Dreams/{filename}" save_dreamer_state(state) - return str(filepath) + return f"Journal/Dreams/{filename}" # ─── State ──────────────────────────────────────────────────────────────────