PhoneWork/config.py
Yuyao Huang eac90941ef feat: add SDK session implementation with approval flow and audit logging
- Implement SDK session with secretary model for tool approval flow
- Add audit logging for tool usage and permission decisions
- Support Feishu card interactions for approval requests
- Add new commands for task interruption and progress checking
- Remove old test files and update documentation
2026-04-01 12:51:00 +08:00

48 lines
1.7 KiB
Python

import yaml
from pathlib import Path
from typing import Any, Dict, List, Optional
_CONFIG_PATH = Path(__file__).parent / "keyring.yaml"
_HOST_CONFIG_PATH = Path(__file__).parent / "host_config.yaml"
def _load() -> dict[str, Any]:
config_path = _HOST_CONFIG_PATH if _HOST_CONFIG_PATH.exists() else _CONFIG_PATH
with open(config_path, "r", encoding="utf-8") as f:
return yaml.safe_load(f) or {}
_cfg = _load()
FEISHU_APP_ID: str = _cfg["FEISHU_APP_ID"]
FEISHU_APP_SECRET: str = _cfg["FEISHU_APP_SECRET"]
OPENAI_BASE_URL: str = _cfg["OPENAI_BASE_URL"]
OPENAI_API_KEY: str = _cfg["OPENAI_API_KEY"]
OPENAI_MODEL: str = _cfg.get("OPENAI_MODEL", "glm-4.7")
WORKING_DIR: Path = Path(_cfg.get("WORKING_DIR", Path.home())).expanduser().resolve()
METASO_API_KEY: str = _cfg.get("METASO_API_KEY", "")
ANTHROPIC_API_KEY: str = _cfg.get("ANTHROPIC_API_KEY", "")
# SDK approval timeout (seconds) for can_use_tool callback
SDK_APPROVAL_TIMEOUT: int = _cfg.get("SDK_APPROVAL_TIMEOUT", 120)
ROUTER_MODE: bool = _cfg.get("ROUTER_MODE", False)
ROUTER_SECRET: str = _cfg.get("ROUTER_SECRET", "")
# Command prefix — the leader string that identifies bot commands.
# Default is "//" to avoid conflicts with Claude Code's own "/" commands.
COMMAND_PREFIX: str = _cfg.get("COMMAND_PREFIX", "//")
# Server configuration
PORT: int = _cfg.get("PORT", 8000)
_allowed_open_ids_raw = _cfg.get("ALLOWED_OPEN_IDS", [])
ALLOWED_OPEN_IDS: list[str] = _allowed_open_ids_raw if isinstance(_allowed_open_ids_raw, list) else [str(_allowed_open_ids_raw)]
def is_user_allowed(open_id: str) -> bool:
"""Check if a user is allowed to use the bot."""
if not ALLOWED_OPEN_IDS:
return True
return open_id in ALLOWED_OPEN_IDS