- tools/nextcloud_client.py: WebDAV/OCS/CalDAV/CardDAV 공통 클라이언트 - tools/nc_files.py: 파일 검색/목록/최근/공유링크 - tools/nc_calendar.py: CalDAV 일정 CRUD + ICS 빌더 - tools/nc_mail.py: IMAP 메일 조회 (PLAIN auth for Mailcow) - tools/nc_contacts.py: CardDAV 연락처 + EasyOCR 명함 스캔 - handlers/nc_handler.py: 자연어→NC도구 자동 라우팅 - core/foreman.py: 목표 분해 + 상담 세션 + Vikunja 등록 - prompts/foreman.md: Foreman 시스템 프롬프트 - prompts/unified.md: nextcloud 모드 분류 추가 - config.py: .env 따옴표 파싱 버그 수정 - api/discord_bot.py: /goal 커맨드 + Foreman 스레드 라우팅
82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
"""Variet Agent 설정 관리.
|
|
|
|
.env 파일에서 환경변수를 로드합니다.
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# .env 파일 수동 파싱 (python-dotenv 없이도 동작)
|
|
_env_path = Path(__file__).parent / ".env"
|
|
if _env_path.exists():
|
|
for line in _env_path.read_text(encoding="utf-8").splitlines():
|
|
line = line.strip()
|
|
if not line or line.startswith("#"):
|
|
continue
|
|
if "=" in line:
|
|
key, _, value = line.partition("=")
|
|
value = value.strip()
|
|
# 양쪽 따옴표 제거 (".." 또는 '..')
|
|
if len(value) >= 2 and value[0] == value[-1] and value[0] in ('"', "'"):
|
|
value = value[1:-1]
|
|
os.environ.setdefault(key.strip(), value)
|
|
|
|
|
|
# === Discord ===
|
|
DISCORD_BOT_TOKEN: str = os.getenv("DISCORD_BOT_TOKEN", "")
|
|
DISCORD_COMMAND_PREFIX: str = os.getenv("DISCORD_COMMAND_PREFIX", "!")
|
|
|
|
# === API Server ===
|
|
API_HOST: str = os.getenv("API_HOST", "0.0.0.0")
|
|
API_PORT: int = int(os.getenv("API_PORT", "8000"))
|
|
|
|
# === Paths ===
|
|
PROJECT_ROOT: Path = Path(__file__).parent
|
|
SESSIONS_DIR: Path = PROJECT_ROOT / "sessions"
|
|
SESSIONS_DIR.mkdir(exist_ok=True)
|
|
|
|
# === Gemini ===
|
|
GEMINI_TOKEN_BUDGET: int = int(os.getenv("GEMINI_TOKEN_BUDGET", "50000"))
|
|
GEMINI_TIMEOUT: int = int(os.getenv("GEMINI_TIMEOUT", "180"))
|
|
|
|
# === Gitea ===
|
|
GITEA_URL: str = os.getenv("GITEA_URL", "https://git.variet.net")
|
|
GITEA_TOKEN: str = os.getenv("GITEA_TOKEN", "")
|
|
GITEA_REPO: str = os.getenv("GITEA_REPO", "Variet/variet-agent")
|
|
|
|
# === Vikunja ===
|
|
VIKUNJA_URL: str = os.getenv("VIKUNJA_URL", "https://plan.variet.net")
|
|
VIKUNJA_TOKEN: str = os.getenv("VIKUNJA_TOKEN", "")
|
|
VIKUNJA_PROJECT_ID: int = int(os.getenv("VIKUNJA_PROJECT_ID", "7"))
|
|
|
|
# === Workspace ===
|
|
WORKSPACE_BASE_DIR: str = os.getenv(
|
|
"WORKSPACE_BASE_DIR", r"c:\Users\Variet-Worker\Desktop\VW_Proj"
|
|
)
|
|
|
|
# === qBittorrent ===
|
|
QBIT_URL: str = os.getenv("QBIT_URL", "http://localhost:8080")
|
|
QBIT_USERNAME: str = os.getenv("QBIT_USERNAME", "admin")
|
|
QBIT_PASSWORD: str = os.getenv("QBIT_PASSWORD", "")
|
|
|
|
# === NAS ===
|
|
NAS_ANIME_PATH: str = os.getenv(
|
|
"NAS_ANIME_PATH", r"\\192.168.10.10\NasData\Video\Animation"
|
|
)
|
|
|
|
# === Wiki.js ===
|
|
WIKI_URL: str = os.getenv("WIKI_URL", "https://wiki.variet.net")
|
|
WIKI_API_KEY: str = os.getenv("WIKI_API_KEY", "")
|
|
|
|
# === Nextcloud ===
|
|
NEXTCLOUD_URL: str = os.getenv("NEXTCLOUD_URL", "https://cloud.variet.net")
|
|
NEXTCLOUD_USER: str = os.getenv("NEXTCLOUD_USER", "")
|
|
NEXTCLOUD_APP_PASSWORD: str = os.getenv("NEXTCLOUD_APP_PASSWORD", "")
|
|
|
|
# === Mail (IMAP) ===
|
|
MAIL_IMAP_HOST: str = os.getenv("MAIL_IMAP_HOST", "mail.variet.net")
|
|
MAIL_IMAP_PORT: int = int(os.getenv("MAIL_IMAP_PORT", "993"))
|
|
MAIL_USER: str = os.getenv("MAIL_USER", "")
|
|
MAIL_PASSWORD: str = os.getenv("MAIL_PASSWORD", "")
|
|
|