blob: f8679ff9ccc878e5b62b8c38585921a3064c12aa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
"""Builds the dynamic per-turn context.
This handles things that change per turn: the current time, today's diary
entries, open tasks. Persona is NOT here; that's a backend configuration
concern (see models/claude_code.py docstring).
"""
import sqlite3
from datetime import datetime, timezone
from pathlib import Path
SENIA_DB = Path("/etc/senia/data/senia.db")
def _today_diary_entries() -> list[str]:
if not SENIA_DB.exists():
return []
now = datetime.now(timezone.utc).astimezone()
start = now.replace(hour=0, minute=0, second=0, microsecond=0).isoformat()
conn = sqlite3.connect(SENIA_DB)
try:
return [
f"- {row[0]} - {row[1]}"
for row in conn.execute(
"SELECT ts, content FROM diary_logs WHERE ts >= ? ORDER BY ts",
(start,),
).fetchall()
]
finally:
conn.close()
def build_turn_context() -> str:
diary = _today_diary_entries()
diary_section = (
"## Today's diary so far\n\n" + "\n".join(diary)
if diary
else "## Today's diary so far\n\n(no entries yet today)"
)
now = datetime.now(timezone.utc).astimezone().isoformat(timespec="seconds")
return f"## Current time\n\n{now}\n\n{diary_section}"
|