- Model providers for OpenAI and Anthropic message formats (e.g. via Sub2API), with API keys encrypted at rest and never returned - Skills tree with markdown editing, priorities, drafts, publishing and rollback; only published skills enter the chat prompt - Chat page with tool calls over collected news and Binance USD-M klines, a persisted CONTEXT.md, reset, and stop-generation support - Chat may only create skill drafts and update CONTEXT.md; publishing, deleting, moving and priority changes stay with the user
21 lines
433 B
Python
21 lines
433 B
Python
"""存库凭证的加解密;密钥只在 .env 中"""
|
|
|
|
from functools import lru_cache
|
|
|
|
from cryptography.fernet import Fernet
|
|
|
|
from alphapulse.core.config import get_settings
|
|
|
|
|
|
@lru_cache
|
|
def _fernet() -> Fernet:
|
|
return Fernet(get_settings().secret_encryption_key)
|
|
|
|
|
|
def encrypt(plain: str) -> bytes:
|
|
return _fernet().encrypt(plain.encode())
|
|
|
|
|
|
def decrypt(token: bytes) -> str:
|
|
return _fernet().decrypt(token).decode()
|