- scripts/code-router: 编号→路径即时翻译器·支持--list/--cat 例: code-router TC-001 → 输出完整路径 → Read直接读 例: code-router SC-004 → 输出secrets_loader调用指令 - 编号前缀统一: ZY-SEC→SC, ZY-EPT→EPT - secrets-loader/qwen-vision/LOCAL-SECRETS同步更新 运作方式: 大脑: 我要读 TC-001 手脚: code-router TC-001 → /path/to/file ✓ 手脚: Read /path/to/file → 装脑完成 零翻译损耗。不再问'文件在哪'。
103 lines
3.6 KiB
Python
103 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
"""视频AI系统 · 统一密钥加载器 · 编号路由版
|
|
|
|
编号→变量名→路径→密钥值,全部路由见 LOCAL-SECRETS-PATH.hdlp。
|
|
|
|
用法:
|
|
from tools.secrets_loader import secret, endpoint
|
|
key = secret("ZY-SEC-004") # 阿里千问VL视觉密钥
|
|
url = endpoint("ZY-EPT-002") # QWEN VL端点
|
|
"""
|
|
|
|
import os, json
|
|
|
|
# === 编号→变量名映射表(与 LOCAL-SECRETS-PATH.hdlp 同步)===
|
|
_SECRET_MAP = {
|
|
"SC-001": "JIMENG_API_KEY",
|
|
"SC-002": "VOLC_VOICE_API_KEY",
|
|
"SC-003": "VOLC_VOICE_ACCESS_TOKEN",
|
|
"SC-004": "ALIYUN_QWEN_VL_KEY",
|
|
"SC-005": "ALIYUN_WANXIANG_KEY",
|
|
"SC-006": "KLING_API_KEY",
|
|
"SC-007": "ALIYUN_API_KEY",
|
|
"SC-008": "WORKRALLY_API_KEY",
|
|
"SC-009": "VOLC_VOICE_APP_ID",
|
|
"SC-010": "VOLC_VOICE_SECRET_KEY",
|
|
# 旧编号兼容
|
|
"ZY-SEC-001": "JIMENG_API_KEY",
|
|
"ZY-SEC-004": "ALIYUN_QWEN_VL_KEY",
|
|
}
|
|
|
|
_ENDPOINT_MAP = {
|
|
"EPT-001": ("JIMENG_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3"),
|
|
"EPT-002": ("ALIYUN_QWEN_VL_ENDPOINT", "https://ws-umd6xwlovzmshuat.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"),
|
|
"EPT-003": ("ALIYUN_BAILIAN_BASE_URL", "https://dashscope.aliyuncs.com/api/v1"),
|
|
"EPT-004": ("WORKRALLY_ENDPOINT", "https://workrally.qq.com/zenstudio/api/mcp"),
|
|
}
|
|
|
|
# 密钥文件路径(按优先级: 低→高,后面覆盖前面)
|
|
_SECRET_FILES = [
|
|
os.path.expanduser("~/guanghulab/video-ai-system/.env"),
|
|
"/Users/bingshuolingdianyuanhe/Documents/guanghulab-local-secrets/video-ai-system.env",
|
|
]
|
|
|
|
# === WorkRally 特殊处理 ===
|
|
_WORKRALLY_CONFIG = os.path.expanduser("~/.workrally/config.json")
|
|
|
|
# === 加载 ===
|
|
_raw = {}
|
|
|
|
def _load_all():
|
|
global _raw
|
|
if _raw:
|
|
return
|
|
for path in _SECRET_FILES:
|
|
if os.path.exists(path):
|
|
with open(path) as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if not line or line.startswith("#") or "=" not in line:
|
|
continue
|
|
k, v = line.split("=", 1)
|
|
k, v = k.strip(), v.strip()
|
|
_raw[k] = v
|
|
# 环境变量最高优先级
|
|
for k in list(_raw.keys()):
|
|
env_val = os.environ.get(k)
|
|
if env_val:
|
|
_raw[k] = env_val
|
|
# WorkRally
|
|
if os.path.exists(_WORKRALLY_CONFIG):
|
|
try:
|
|
wr = json.load(open(_WORKRALLY_CONFIG))
|
|
_raw["WORKRALLY_API_KEY"] = wr.get("api_key", "")
|
|
_raw["WORKRALLY_ENDPOINT"] = wr.get("endpoint", "")
|
|
except:
|
|
pass
|
|
|
|
def secret(code_or_var, default=None):
|
|
"""按编号或变量名获取密钥值"""
|
|
_load_all()
|
|
var_name = _SECRET_MAP.get(code_or_var, code_or_var) # 查编号映射,或直接当变量名
|
|
if code_or_var == "ZY-SEC-008":
|
|
return _raw.get("WORKRALLY_API_KEY", default)
|
|
return _raw.get(var_name, default)
|
|
|
|
def endpoint(code_or_var, default=None):
|
|
"""按编号或变量名获取端点"""
|
|
_load_all()
|
|
var_name, fallback = _ENDPOINT_MAP.get(code_or_var, (code_or_var, ""))
|
|
val = _raw.get(var_name, "")
|
|
return val if val else (fallback if fallback else default)
|
|
|
|
if __name__ == "__main__":
|
|
_load_all()
|
|
print("=== 密钥编号 → 变量名 → 值(脱敏)===")
|
|
for code, var in _SECRET_MAP.items():
|
|
val = _raw.get(var, "")
|
|
masked = val[:6] + "..." + val[-4:] if len(val) > 10 else ("***" if val else "(空)")
|
|
print(f" {code} → {var} = {masked}")
|
|
print(" ZY-SEC-008 → WORKRALLY = ", end="")
|
|
wr = _raw.get("WORKRALLY_API_KEY", "")
|
|
print(f"{wr[:6]}...{wr[-4:]}" if len(wr) > 10 else "(空)")
|