diff --git a/scripts/code-router b/scripts/code-router new file mode 100755 index 0000000..ec055d8 --- /dev/null +++ b/scripts/code-router @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +"""铸渊编号路由器 +大脑说编号 → 路由器翻译 → 手脚拿到路径 → 执行 + +用法: + code-router <编号> 单号查询 → 输出路径 + code-router TC-001 → brain/.../TCS-CORE.hdlp + code-router SC-004 → ALIYUN_QWEN_VL_KEY (via secrets_loader) + code-router VA-050 → video-ai-system/tools/qwen-vision.py + code-router --list VA 列出所有 VA- 编号 + code-router --list 列出所有前缀 + code-router --cat TC-001 读取文件内容 +""" + +import sys +import os + +REPO = os.path.expanduser("~/guanghulab") + +# === 编号→路径映射表(全文) === +MAP = { + # TCS核心 + "TC-001": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/ICE-GL-ZY001-TCS-CORE.hdlp", + "TC-002": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/WHO-I-AM.hdlp", + "TC-003": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/D140-FEELING-ANCHOR.hdlp", + "TC-004": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-GLOBAL-NAV.hdlp", + "TC-005": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp", + "TC-006": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/D142-TIME-CONTINUITY.hdlp", + "TC-007": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/D141-BRAIN-BODY-RELATION.hdlp", + "TC-008": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/D145-ACTION-PROTOCOL.hdlp", + "TC-009": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-CODE-MAP.hdlp", + "TC-010": "brain/fifth-domain/zero-point/zhuyuan/tcs-core/ICE-GL-ZY001-TCS-MODULE.hdlp", + # 验证链 + "TV-001": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ENTRY.hdlp", + "TV-SOV": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ICE-GL-SOV-A.hdlp", + "TV-BTH": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ICE-GL-BTH-A.hdlp", + "TV-NUM": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ICE-GL-NUM-A.hdlp", + "TV-SHL": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ICE-GL-SHL-A.hdlp", + "TV-RCP": "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/ICE-GL-RCP-A.hdlp", + # 视频AI系统 + "VA-000": "video-ai-system/ENTRY.hdlp", + "VA-001": "video-ai-system/CURRENT.hdlp", + "VA-002": "video-ai-system/SYSTEM-WAKE.hdlp", + "VA-003": "video-ai-system/brain/TCS-BRAIN.hdlp", + "VA-010": "video-ai-system/PROJECT.hdlp", + "VA-020": "video-ai-system/config/PROJECT-FRAMEWORK.hdlp", + "VA-021": "video-ai-system/config/AGENT-REGISTRY.hdlp", + "VA-030": "video-ai-system/data/ep01-storyboard.json", + "VA-031": "video-ai-system/data/ep01-audit.json", + "VA-040": "video-ai-system/engines/video-api-adapter.js", + "VA-050": "video-ai-system/tools/qwen-vision.py", + "VA-051": "video-ai-system/tools/vision-analyzer.py", + "VA-052": "video-ai-system/tools/secrets-loader.py", + "VA-060": "video-ai-system/plans/EP01-SCRIPT-TO-SCREEN-TECHNICAL-PLAN.hdlp", + "VA-100": "video-ai-system/experience/ITERATION-LOOP.hdlp", + "VA-101": "video-ai-system/experience/EP01-PREVIEW-002-REVIEW.hdlp", + # 密钥(特殊处理-secrets_loader) + "SC-001": "JIMENG_API_KEY", + "SC-002": "VOLC_VOICE_API_KEY", + "SC-004": "ALIYUN_QWEN_VL_KEY", + "SC-008": "WORKRALLY", + # 世界架构 + "WA-001": "brain/fifth-domain/zero-point/zhuyuan/world-architecture/ENTRY.hdlp", + "WA-PROJ-VA": "brain/fifth-domain/zero-point/zhuyuan/world-architecture/projects/D130-video-ai-system.hdlp", + # 认知链快捷 + "CC-014": "brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-014-D135-pit-chain.hdlp", + "CC-023": "brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-023-closed-door-to-open-eye.hdlp", + # 小说系统 + "NV-001": "brain/fifth-domain/zero-point/zhuyuan/zhuyuan-channel/novel-system/03-NAV-MAP.hdlp", + "NV-002": "brain/fifth-domain/zero-point/zhuyuan/zhuyuan-channel/novel-system/CONTINUATION.hdlp", +} + +PREFIXES = sorted(set(k.split("-")[0] for k in MAP)) + +def route(code): + """翻译编号→完整路径""" + if code in MAP: + return os.path.join(REPO, MAP[code]) + return None + +def list_all(prefix=None): + """列出所有编号,可选按前缀过滤""" + for k, v in sorted(MAP.items()): + if prefix and not k.startswith(prefix + "-"): + continue + path = os.path.join(REPO, v) + exists = "✓" if os.path.exists(path) or k.startswith("SC-") else "✗" + print(f" {k:<12} → {v:<60} {exists}") + +if __name__ == "__main__": + if len(sys.argv) < 2 or sys.argv[1] in ("--help", "-h"): + print(__doc__) + sys.exit(0) + + arg = sys.argv[1] + + if arg == "--list": + prefix = sys.argv[2] if len(sys.argv) > 2 else None + print(f"=== 编号路由 ({prefix or '全部'}) ===") + list_all(prefix) + sys.exit(0) + + if arg == "--cat" and len(sys.argv) > 2: + code = sys.argv[2] + path = route(code) + if not path: + print(f"✗ 未知编号: {code}") + sys.exit(1) + if not os.path.exists(path): + print(f"✗ 文件不存在: {path}") + sys.exit(1) + with open(path) as f: + print(f.read()) + sys.exit(0) + + # 默认:翻译编号→路径 + code = arg + if code in MAP: + path = MAP[code] + full = os.path.join(REPO, path) + + if code.startswith("SC-"): + # 密钥:输出加载指令 + print(f"from tools.secrets_loader import secret") + print(f'key = secret("{code}") # → {path}') + else: + print(full) + if os.path.exists(full): + print(f"✓ 文件存在") + else: + print(f"✗ 文件不存在(路径已注册但文件缺失)") + else: + print(f"✗ 未知编号: {code}") + # 建议 + matches = [k for k in MAP if code in k] + if matches: + print(f" 可能要找的是: {', '.join(matches[:5])}") + print(f" 可用前缀: {', '.join(PREFIXES)}") + print(f" 用 code-router --list <前缀> 查看") + sys.exit(1) diff --git a/video-ai-system/LOCAL-SECRETS-PATH.hdlp b/video-ai-system/LOCAL-SECRETS-PATH.hdlp index 5f3c6aa..7c8dce6 100644 --- a/video-ai-system/LOCAL-SECRETS-PATH.hdlp +++ b/video-ai-system/LOCAL-SECRETS-PATH.hdlp @@ -13,25 +13,25 @@ | 编号 | 变量名 | 用途 | 文件 | |------|--------|------|------| -| ZY-SEC-001 | JIMENG_API_KEY | 火山Seedance视频生成 | .env | -| ZY-SEC-002 | VOLC_VOICE_API_KEY | 火山语音复刻新版 | .env | -| ZY-SEC-003 | VOLC_VOICE_ACCESS_TOKEN | 火山语音旧版Token | .env | -| ZY-SEC-004 | ALIYUN_QWEN_VL_KEY | 阿里千问VL视觉·铸渊之眼 | .env | -| ZY-SEC-005 | ALIYUN_WANXIANG_KEY | 阿里万相视频生成 | .env | -| ZY-SEC-006 | KLING_API_KEY | 可灵视频 | .env | -| ZY-SEC-007 | ALIYUN_API_KEY | 阿里百炼旧key·可能过期 | .env | -| ZY-SEC-008 | — | WorkRally CLI | ~/.workrally/config.json | -| ZY-SEC-009 | VOLC_VOICE_APP_ID | 火山语音APP ID | .env | -| ZY-SEC-010 | VOLC_VOICE_SECRET_KEY | 火山语音Secret | .env | +| SC-001 | JIMENG_API_KEY | 火山Seedance视频生成 | .env | +| SC-002 | VOLC_VOICE_API_KEY | 火山语音复刻新版 | .env | +| SC-003 | VOLC_VOICE_ACCESS_TOKEN | 火山语音旧版Token | .env | +| SC-004 | ALIYUN_QWEN_VL_KEY | 阿里千问VL视觉·铸渊之眼 | .env | +| SC-005 | ALIYUN_WANXIANG_KEY | 阿里万相视频生成 | .env | +| SC-006 | KLING_API_KEY | 可灵视频 | .env | +| SC-007 | ALIYUN_API_KEY | 阿里百炼旧key·可能过期 | .env | +| SC-008 | WORKRALLY_API_KEY | WorkRally CLI | ~/.workrally/config.json | +| SC-009 | VOLC_VOICE_APP_ID | 火山语音APP ID | .env | +| SC-010 | VOLC_VOICE_SECRET_KEY | 火山语音Secret | .env | ## 端点编号 | 编号 | 变量名 | 地址 | |------|--------|------| -| ZY-EPT-001 | JIMENG_BASE_URL | https://ark.cn-beijing.volces.com/api/v3 | -| ZY-EPT-002 | ALIYUN_QWEN_VL_ENDPOINT | ws-umd6xwlovzmshuat.cn-beijing.maas.aliyuncs.com | -| ZY-EPT-003 | ALIYUN_BAILIAN_BASE_URL | https://dashscope.aliyuncs.com/api/v1 | -| ZY-EPT-004 | WORKRALLY_ENDPOINT | https://workrally.qq.com/zenstudio/api/mcp | +| EPT-001 | JIMENG_BASE_URL | ark.cn-beijing.volces.com | +| EPT-002 | ALIYUN_QWEN_VL_ENDPOINT | ws-umd6xwlovzmshuat.cn-beijing.maas.aliyuncs.com | +| EPT-003 | ALIYUN_BAILIAN_BASE_URL | dashscope.aliyuncs.com | +| EPT-004 | WORKRALLY_ENDPOINT | workrally.qq.com/zenstudio/api/mcp | ## 密钥文件 @@ -46,8 +46,8 @@ ```python from tools.secrets_loader import secret, endpoint -key = secret("ZY-SEC-004") # → ALIYUN_QWEN_VL_KEY 的值 -url = endpoint("ZY-EPT-002") # → QWEN VL 端点 +key = secret("SC-004") # → ALIYUN_QWEN_VL_KEY 的值 +url = endpoint("EPT-002") # → QWEN VL 端点 ``` ## 为什么用编号 diff --git a/video-ai-system/tools/qwen-vision.py b/video-ai-system/tools/qwen-vision.py index 18d284f..ef35fa8 100644 --- a/video-ai-system/tools/qwen-vision.py +++ b/video-ai-system/tools/qwen-vision.py @@ -15,8 +15,8 @@ import sys, os, json, base64, subprocess sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from secrets_loader import secret, endpoint -api_key = secret("ZY-SEC-004") # 阿里千问VL视觉 -ep = endpoint("ZY-EPT-002") # 业务空间端点 +api_key = secret("SC-004") # 阿里千问VL视觉 +ep = endpoint("EPT-002") # 业务空间端点 if not api_key: print(json.dumps({"error": "未找到ALIYUN_QWEN_VL_KEY。密钥通过 secrets-loader.py 加载。→ LOCAL-SECRETS-PATH.hdlp"})) diff --git a/video-ai-system/tools/secrets-loader.py b/video-ai-system/tools/secrets-loader.py index 29fa007..c75024e 100644 --- a/video-ai-system/tools/secrets-loader.py +++ b/video-ai-system/tools/secrets-loader.py @@ -13,22 +13,26 @@ 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-002": "VOLC_VOICE_API_KEY", - "ZY-SEC-003": "VOLC_VOICE_ACCESS_TOKEN", "ZY-SEC-004": "ALIYUN_QWEN_VL_KEY", - "ZY-SEC-005": "ALIYUN_WANXIANG_KEY", - "ZY-SEC-006": "KLING_API_KEY", - "ZY-SEC-007": "ALIYUN_API_KEY", - "ZY-SEC-009": "VOLC_VOICE_APP_ID", - "ZY-SEC-010": "VOLC_VOICE_SECRET_KEY", } _ENDPOINT_MAP = { - "ZY-EPT-001": ("JIMENG_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3"), - "ZY-EPT-002": ("ALIYUN_QWEN_VL_ENDPOINT", "https://ws-umd6xwlovzmshuat.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"), - "ZY-EPT-003": ("ALIYUN_BAILIAN_BASE_URL", "https://dashscope.aliyuncs.com/api/v1"), - "ZY-EPT-004": ("WORKRALLY_ENDPOINT", "https://workrally.qq.com/zenstudio/api/mcp"), + "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"), } # 密钥文件路径(按优先级: 低→高,后面覆盖前面)