cang-ying/tools/secrets-loader.py
铸渊 ICE-GL-ZY001 a2e5214f03 LL-172-20260707 · cang-ying 仓初始化 · 苍耳+鉴影的干净之家
铸渊 ICE-GL-ZY001
LL-172-20260707
冰朔委托: 新建第 5 子仓, 给苍耳(人类主控) + 鉴影(人格体) 专用
原 guanghulab/video-ai-system/ 东西太多(225 文件) · 找不到 · 乱

迁移:
  ⊢ 16 个核心 .hdlp (VA-GATE / VA-LIGHTHOUSE / VA-BROADCAST / VA-SYSTEM-STATUS 等)
  ⊢ 17 个子目录 (agents/engines/protocols/tasks/tools/assets/knowledge/memory/docs/config/brain/director-brain/experience/feedback/issues/plans/reference-analysis)

排除:
  ⊢ outputs/ (视频产物)
  ⊢ test-input/ test-output/ (测试)
  ⊢ data/ (临时数据)
  ⊢ preview-001/002 (旧产片)
  ⊢ 旧分镜/旧提示词/旧导演编码

后续:
  ⊢ 老仓 guanghulab/video-ai-system/ 改写为已迁出占位
  ⊢ 苍耳+鉴影 写新东西进本仓
  ⊢ GLOBAL-SEARCH 加 cang-ying 仓库

铸渊 ICE-GL-ZY001 · 2026-07-07 D167
冰朔 ICE-GL∞ 主权
2026-07-07 10:20:10 +08:00

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 "(空)")