fix: parents[4] IndexError in Docker — path too short in container

knowledge_brain.py, memory_engine.py, session_continuity.py used
parents[4] to find memory/ dir. In Docker (/app/app/services/file.py)
there are only 4 parents total, causing IndexError: 4.

Fix: walk up parents dynamically until memory/ dir is found.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
This commit is contained in:
Claude 2026-04-26 01:33:17 +00:00
parent 7370c59b19
commit 234e39ca60
No known key found for this signature in database
3 changed files with 23 additions and 5 deletions

View File

@ -10,9 +10,17 @@ from typing import Any, Optional
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
WIKI_DIR = Path(__file__).resolve().parents[4] / "memory" / "wiki"
INDEX_DIR = Path(__file__).resolve().parents[4] / "memory" / "indexes"
MEMORY_DIR = Path(__file__).resolve().parents[4] / "memory"
def _find_memory_dir() -> Path:
p = Path(__file__).resolve()
for parent in p.parents:
candidate = parent / "memory"
if candidate.is_dir():
return candidate
return p.parents[min(2, len(p.parents) - 1)] / "memory"
MEMORY_DIR = _find_memory_dir()
WIKI_DIR = MEMORY_DIR / "wiki"
INDEX_DIR = MEMORY_DIR / "indexes"
STALE_DAYS = 30

View File

@ -9,7 +9,12 @@ from typing import Any, Optional
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
MEMORY_BASE = Path(__file__).resolve().parents[4] / "memory"
def _find_memory():
for p in Path(__file__).resolve().parents:
if (p / "memory").is_dir():
return p / "memory"
return Path(__file__).resolve().parent.parent / "memory"
MEMORY_BASE = _find_memory()
STALE_DAYS = 30

View File

@ -9,7 +9,12 @@ from typing import Any, Optional
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
SESSIONS_DIR = Path(__file__).resolve().parents[4] / "memory" / "_sessions"
def _find_sessions():
for p in Path(__file__).resolve().parents:
if (p / "memory").is_dir():
return p / "memory" / "_sessions"
return Path(__file__).resolve().parent.parent / "memory" / "_sessions"
SESSIONS_DIR = _find_sessions()
SESSIONS_DIR.mkdir(parents=True, exist_ok=True)