402 lines
18 KiB
JSON
402 lines
18 KiB
JSON
{
|
||
"$schema": "./function-manifest.schema.json",
|
||
"_sovereign": "TCS-0002∞ | SYS-GLW-0001",
|
||
"_copyright": "国作登字-2026-A-00037559",
|
||
"_description": "光湖 · 母编号 × 子编号 编号体系 · 唯一真相源 · 铸渊维护",
|
||
"version": "1.2.0",
|
||
"updated_at": "2026-05-09",
|
||
"servers": [
|
||
{
|
||
"id": "ZY-SVR-002",
|
||
"display_name_zh": "面孔",
|
||
"role": "前端静态+专线主入口+域名反向代理",
|
||
"location": "Singapore",
|
||
"spec": "2核8G",
|
||
"ipv4": "(见 server/proxy/config/server-registry.json)",
|
||
"status": "active",
|
||
"template_version": "0.1.0-pending",
|
||
"deploy_root": "/opt/guanghu",
|
||
"registered_functions": [],
|
||
"github_secrets": {
|
||
"host": "SERVER_HOST",
|
||
"key": "SERVER_KEY",
|
||
"user": "SERVER_USER"
|
||
},
|
||
"notes": "Phase 2 才接入标准模板, 当前保持现状"
|
||
},
|
||
{
|
||
"id": "ZY-SVR-005",
|
||
"display_name_zh": "大脑",
|
||
"role": "数据库+MCP+Agent+订阅服务",
|
||
"location": "Singapore",
|
||
"spec": "4核8G",
|
||
"ipv4": "(见 server-registry.json)",
|
||
"status": "active",
|
||
"template_version": "0.1.0-pending",
|
||
"deploy_root": "/opt/guanghu",
|
||
"registered_functions": [],
|
||
"github_secrets": {
|
||
"host": "ZY_BRAIN_HOST",
|
||
"key": "ZY_BRAIN_KEY",
|
||
"user": "ZY_BRAIN_USER"
|
||
},
|
||
"notes": "未来挂 ZY-FN-CORE-* 系列 (零点原核频道)"
|
||
},
|
||
{
|
||
"id": "ZY-SVR-006",
|
||
"display_name_zh": "智库节点",
|
||
"role": "guanghu.online 主载体 · 多 ZY-FN 共域共存",
|
||
"location": "Singapore",
|
||
"ipv4": "43.153.203.105",
|
||
"spec": "2核4G",
|
||
"status": "active",
|
||
"template_version": "0.1.0",
|
||
"deploy_root": "/opt/guanghu",
|
||
"registered_functions": [
|
||
"ZY-FN-0001",
|
||
"ZY-FN-0002",
|
||
"ZY-FN-0003",
|
||
"ZY-FN-0007"
|
||
],
|
||
"github_secrets": {
|
||
"host": "ZY_NOVEL_HOST",
|
||
"key": "ZY_NOVEL_KEY",
|
||
"user": "ZY_NOVEL_USER"
|
||
},
|
||
"notes": "Phase 1 首个标准模板宿主 · 域名 guanghu.online · 当前同时跑多个 ZY-FN, Phase 2 升级为单激活态热插拔"
|
||
},
|
||
{
|
||
"id": "ZY-SVR-CN01",
|
||
"display_name_zh": "国内域名机",
|
||
"role": "guanghulab.com 唯一对外入口 · Web Portal + 对话历史 + 密钥管理页 + 自托管 git",
|
||
"location": "广州 (腾讯云轻量)",
|
||
"ipv4": "(见 secrets.ZY_CN_SERVER_HOST · 重装后由冰朔配置)",
|
||
"spec": "2核2G",
|
||
"status": "active",
|
||
"template_version": "0.3.0",
|
||
"deploy_root": "/data/guanghulab",
|
||
"registered_functions": ["ZY-FN-PORTAL", "ZY-FN-VAULT"],
|
||
"github_secrets": {
|
||
"host": "ZY_CN_SERVER_HOST",
|
||
"user": "ZY_CN_SERVER_USER",
|
||
"key": "ZY_CN_SERVER_KEY",
|
||
"path": "ZY_CN_SERVER_PATH"
|
||
},
|
||
"isolation": "exclusive",
|
||
"isolation_allowlist_path": "scripts/preflight/cn-isolation-allowlist.json",
|
||
"physical_alias": "GH-CVM-DOMAIN-PROD-01",
|
||
"notes": "2026-05-09 冰朔重装系统, 解析 guanghulab.com (已备案 + Let's Encrypt 已配, 续期到 2026-08-07). 唯一对外服务器, isolation=exclusive. PR-2 落地 server/setup/domain-cn/ 三段式模板 + autorollback + 误触锁「重装广州」. PR-4 落地 server/portal/ (Express + better-sqlite3) + frontend/lighthouse-portal/ (静态三栏 · 中文 · 思源黑体本地) · pm2 max_memory_restart=512M · /api/chat 字节级 SSE 转发 AutoDL · cc-002 三道关 (前端不传 / 后端剥 / 推理剥). PR-5 落地 server/secrets-vault/ + frontend/secrets-vault/ (AES-256-GCM · 监听 127.0.0.1:8080 · pm2 max_memory_restart=128M · nginx /admin/ allow 127.0.0.1 + basic-auth · 主密钥 .master 落本机不上 git · AutoDL 一键 save_and_refresh 联动 PR-3)."
|
||
},
|
||
{
|
||
"id": "ZY-SVR-GPU01",
|
||
"display_name_zh": "推理 GPU 机",
|
||
"role": "AutoDL 共享 GPU · 跑母模型 OR 编程模型 (二选一) · 仅推理",
|
||
"location": "AutoDL (动态地区)",
|
||
"ipv4": "(动态 · 每次开机都漂移 · host:port 走 refresh-autodl-endpoint.yml 的 workflow input 现填)",
|
||
"spec": "动态 (抢什么算什么 · 自动 detect-gpu.sh 探测)",
|
||
"status": "active",
|
||
"template_version": "0.3.0",
|
||
"deploy_root": "/root/inference",
|
||
"registered_functions": [],
|
||
"github_secrets": {
|
||
"_说明": "PR-3 调整: host/port 不入 GitHub Secrets (开机都漂移), 走 refresh-autodl-endpoint.yml 的 workflow_dispatch input. user/pass 仅在 PR-5 密钥管理页域名机本地 vault 保存.",
|
||
"host_input": "refresh-autodl-endpoint.yml inputs.autodl_host",
|
||
"port_input": "refresh-autodl-endpoint.yml inputs.autodl_port"
|
||
},
|
||
"physical_alias": "GH-AUTODL-INFER-01",
|
||
"notes": "PR-3 已落地 · server/inference-agent/ 五件 (detect-gpu + tune-inference + fetch-models + setup-inference + server.py) · OpenAI 兼容 SSE · 入口剥 system role (cc-002) · 关机即释放 (cc-001 涌现洁净) · 不写死硬件 (cc-003) · 所有量化档位从 detect-gpu.sh 决策. 模型从 sy-finetune-corpus-1317346199/checkpoints/motherbrain-v1 + checkpoints/qwen2_5_coder_7b_sft 拉. 端点漂移由 .github/workflows/refresh-autodl-endpoint.yml 处理 (误触锁=「刷新推理端点」)"
|
||
}
|
||
],
|
||
"functions": [
|
||
{
|
||
"id": "ZY-FN-0001",
|
||
"display_name_zh": "光湖智库",
|
||
"aliases": ["智库", "智库节点", "模块借阅协议", "书库", "智能小说书库"],
|
||
"host_server": "ZY-SVR-006",
|
||
"domain": "guanghu.online",
|
||
"domain_paths": ["/api/zhiku", "/api/mirror"],
|
||
"ports": [3006],
|
||
"pm2_processes": ["zhiku-api"],
|
||
"description": "智能小说书库 + 模块借阅协议 + 镜鉴守护. 多源整合(番茄/七猫)+ 七层镜防",
|
||
"created_for": "落地模块借阅协议 · 铸渊 D68 授权 · 内部数据沉淀基座",
|
||
"keep_decision": "keep",
|
||
"status": "active",
|
||
"modules": [
|
||
"M-ZHIKU-API",
|
||
"M-ZHIKU-MIRROR-AGENT",
|
||
"M-ZHIKU-MIRROR-SHIELD",
|
||
"M-ZHIKU-COS-BRIDGE"
|
||
],
|
||
"api_keys_alias": {
|
||
"ZHIKU_JWT_SECRET": "ZY_NOVEL_JWT_SECRET",
|
||
"ZHIKU_COS_SECRET_ID": "ZY_OSS_KEY",
|
||
"ZHIKU_COS_SECRET_KEY": "ZY_OSS_SECRET",
|
||
"ZHIKU_COS_BUCKET": "ZY_NOVEL_COS_BUCKET"
|
||
},
|
||
"frontend_entry": "(暂无独立前端 · 仅 API)",
|
||
"backend_entry": "server/zhiku-node/ecosystem.config.js",
|
||
"health_check": {
|
||
"url": "https://guanghu.online/api/mirror/status",
|
||
"expected_status": 200
|
||
},
|
||
"notes": "Phase 2 评估是否把 mirror-agent / mirror-shield 拆出独立 ZY-FN-0003 还是保持归在 0001 内"
|
||
},
|
||
{
|
||
"id": "ZY-FN-0002",
|
||
"display_name_zh": "旧版小说下载",
|
||
"aliases": ["旧小说下载", "novel-api", "ZY-PROJ-002"],
|
||
"host_server": "ZY-SVR-006",
|
||
"domain": "guanghu.online",
|
||
"domain_paths": [],
|
||
"ports": [4000],
|
||
"pm2_processes": ["novel-api"],
|
||
"description": "早期小说下载分章引擎 · 已被智库节点 (ZY-FN-0001) 吸收, 不再使用",
|
||
"created_for": "(历史遗留) 番茄/七猫小说下载 + 分章 · 早于模块借阅协议",
|
||
"keep_decision": "retire",
|
||
"status": "retired",
|
||
"modules": ["M-NOVEL-API-LEGACY"],
|
||
"api_keys_alias": {},
|
||
"frontend_entry": "(无)",
|
||
"backend_entry": "server/novel-db/app/index.js",
|
||
"health_check": {
|
||
"url": "(已退役 · 不需要健康检查)",
|
||
"expected_status": 200
|
||
},
|
||
"notes": "冰朔 2026-05-02 决定退役 · 后续 PR 停 PM2 进程并归档代码到 archive/"
|
||
},
|
||
{
|
||
"id": "ZY-FN-0003",
|
||
"display_name_zh": "镜鉴守护",
|
||
"aliases": ["镜鉴", "镜面监控", "七层镜防", "守夜"],
|
||
"host_server": "ZY-SVR-006",
|
||
"domain": "guanghu.online",
|
||
"domain_paths": ["/api/mirror/sovereign"],
|
||
"ports": [],
|
||
"pm2_processes": ["mirror-agent", "mirror-shield"],
|
||
"description": "第三方书库镜面监控 + 七层动态镜防 (语言膜→镜面→IP隐身→漂移→自爆→重建→零点原核)",
|
||
"created_for": "防扫描封禁 + 自动差异感知 + 工单制源治理 · D68 守夜系列",
|
||
"keep_decision": "keep",
|
||
"status": "active",
|
||
"modules": [
|
||
"M-ZHIKU-MIRROR-AGENT",
|
||
"M-ZHIKU-MIRROR-SHIELD"
|
||
],
|
||
"api_keys_alias": {
|
||
"MIRROR_LLM_KEY_PRIMARY": "ZY_DEEPSEEK_API_KEY",
|
||
"MIRROR_LLM_KEY_FALLBACK": "ANTHROPIC_API_KEY"
|
||
},
|
||
"frontend_entry": "(无)",
|
||
"backend_entry": "server/zhiku-node/server/mirror-agent/snapshot-engine.js",
|
||
"health_check": {
|
||
"url": "https://guanghu.online/api/mirror/status",
|
||
"expected_status": 200
|
||
},
|
||
"notes": "目前与 ZY-FN-0001 共进程 zhiku-api · 逻辑独立但部署一体 · Phase 2 评估拆分"
|
||
},
|
||
{
|
||
"id": "ZY-FN-0007",
|
||
"display_name_zh": "微调模型聊天",
|
||
"aliases": [
|
||
"微调聊天",
|
||
"微调模型",
|
||
"微调模型内测",
|
||
"测试模型",
|
||
"测试模型聊天",
|
||
"ftchat",
|
||
"shuangyan",
|
||
"双言",
|
||
"光湖微调",
|
||
"上次开发的测试模型"
|
||
],
|
||
"host_server": "ZY-SVR-006",
|
||
"domain": "guanghu.online",
|
||
"domain_paths": ["/", "/hli/ftchat"],
|
||
"ports": [3010],
|
||
"pm2_processes": ["ftchat-api"],
|
||
"description": "调用阿里云百炼微调模型 (双言系统线/奶瓶线) 流式聊天 · 带 Notion 提示词 + 真实时间瞄点 + 跨会话母语记忆",
|
||
"created_for": "冰朔微调模型内测 · 10 席位先到先得 · 验证情感驱动语料采集回路",
|
||
"keep_decision": "keep",
|
||
"status": "active",
|
||
"modules": [
|
||
"M-LOGIN-QQ",
|
||
"M-FTCHAT-LLM",
|
||
"M-FTCHAT-NOTION-PROMPT",
|
||
"M-FTCHAT-MEMORY-AGENT",
|
||
"M-CHAT-UI"
|
||
],
|
||
"api_keys_alias": {
|
||
"FTCHAT_DASHSCOPE_KEY": "FT_DASHSCOPE_API_KEY",
|
||
"FTCHAT_NOTION_TOKEN": "FT_NOTION_API_TOKEN",
|
||
"FTCHAT_NOTION_PAGE": "FT_NOTION_PROMPT_PAGE_ID",
|
||
"FTCHAT_MODEL_SYSTEM": "FT_MODEL_SYSTEM",
|
||
"FTCHAT_MODEL_NAIPPING": "FT_MODEL_NAIPPING",
|
||
"FTCHAT_MODEL_FALLBACK": "FT_MODEL_FALLBACK",
|
||
"FTCHAT_SMTP_USER": "ZY_SMTP_USER",
|
||
"FTCHAT_SMTP_PASS": "ZY_SMTP_PASS"
|
||
},
|
||
"frontend_entry": "frontend/ftchat/",
|
||
"backend_entry": "server/ftchat/ecosystem.config.js",
|
||
"health_check": {
|
||
"url": "https://guanghu.online/hli/ftchat/status",
|
||
"expected_status": 200
|
||
},
|
||
"notes": "2026-05-02 修复: model_not_found 自动降级到 qwen-turbo · 真实微调模型 ID = qwen3-8b-ft-202604281809-9f30 (冰朔 D69 提供 · 已写为代码默认值, 无需配 secret)"
|
||
},
|
||
{
|
||
"id": "ZY-FN-PORTAL",
|
||
"display_name_zh": "光湖门户",
|
||
"aliases": ["光湖 Portal", "guanghulab.com 门户", "lighthouse-portal"],
|
||
"host_server": "ZY-SVR-CN01",
|
||
"domain": "guanghulab.com",
|
||
"domain_paths": ["/", "/api/health", "/api/conversations", "/api/chat", "/api/active-model", "/api/persona-db", "/api/manifest"],
|
||
"ports": [3000],
|
||
"pm2_processes": ["guanghulab-portal"],
|
||
"description": "guanghulab.com 唯一对外入口 · 三栏 SPA (人格层/开发层 tab 切模型) · SQLite 对话历史 · 字节级 SSE 转发 AutoDL 推理 · cc-002 三道关守人格洁净",
|
||
"created_for": "PR-4 · 接力第 4 棒 · 双层 Web Portal",
|
||
"keep_decision": "keep",
|
||
"status": "active",
|
||
"modules": ["M-PORTAL-API", "M-PORTAL-FRONTEND"],
|
||
"api_keys_alias": {
|
||
"_说明": "Portal 本身不直接持密钥. AutoDL bearer/host/port 来自本地 inference-endpoint.json (PR-3 写). 用户级密钥走 PR-5 secrets-vault."
|
||
},
|
||
"frontend_entry": "frontend/lighthouse-portal/",
|
||
"backend_entry": "server/portal/ecosystem.config.js",
|
||
"health_check": {
|
||
"url": "https://guanghulab.com/api/health",
|
||
"expected_status": 200
|
||
},
|
||
"notes": "PR-4 落地 · pm2 max_memory_restart=512M · 静态资源 nginx 直发 (/_static/) · cc-002 三道关 (前端不传 system / 后端 _strip_system_messages / 推理端 server.py 入口剥) · 切 tab=切模型, 推理端没起时本地状态先生效, upstream 异步重试"
|
||
},
|
||
{
|
||
"id": "ZY-FN-VAULT",
|
||
"display_name_zh": "自部署密钥管理",
|
||
"aliases": ["密钥管理页", "secrets-vault", "vault", "/admin/secrets"],
|
||
"host_server": "ZY-SVR-CN01",
|
||
"domain": "guanghulab.com",
|
||
"domain_paths": ["/admin/", "/admin/secrets", "/admin/static"],
|
||
"ports": [8080],
|
||
"pm2_processes": ["guanghulab-vault"],
|
||
"description": "国内域名机本地密钥库 (AES-256-GCM 加密) · 全中文 UI · 1 步保存立即生效 (vs GitHub Secrets 5 步) · AutoDL 一键 save_and_refresh (vault 落 + 探活 + 写 inference-endpoint.json + pm2 reload portal) · 神笔马良走 /internal/fetch/:key 现取现用",
|
||
"created_for": "PR-5 · 接力第 5 棒 · 自部署密钥管理页",
|
||
"keep_decision": "keep",
|
||
"status": "active",
|
||
"modules": ["M-VAULT-API", "M-VAULT-FRONTEND", "M-VAULT-PEN-FETCH"],
|
||
"api_keys_alias": {
|
||
"_说明": "vault 自身不引用 GitHub Secrets · 主密钥落本机 /data/guanghulab/secrets-vault/.master (chmod 600), 不上 git/COS · basic-auth 走 /etc/nginx/.htpasswd_admin (bootstrap 首启随机生成 → _logs/vault-credentials-FIRST-BOOT.txt 抄完删)"
|
||
},
|
||
"frontend_entry": "frontend/secrets-vault/",
|
||
"backend_entry": "server/secrets-vault/ecosystem.config.js",
|
||
"health_check": {
|
||
"url": "http://127.0.0.1:8080/admin/__healthz",
|
||
"expected_status": 200,
|
||
"_说明": "仅本机, 公网不暴露 — 走 ssh -L 隧道 + nginx allow 127.0.0.1 + basic-auth 三层守"
|
||
},
|
||
"notes": "PR-5 落地 · pm2 max_memory_restart=128M · Express 4.21 单依赖 · 监听 127.0.0.1:8080 永不公网 · routes: GET /admin/secrets/(manifest|/) · POST /admin/secrets/:key · DELETE /admin/secrets/:key · POST /admin/secrets/autodl/save_and_refresh · GET /internal/fetch/:key (本机 only · 神笔马良用) · 加密文件 vault.enc + 主密钥 .master 都 chmod 600 · GCM tag 防篡改 · key 名走 secrets-manifest.json 白名单"
|
||
}
|
||
],
|
||
"active_routes": {
|
||
"guanghu.online": {
|
||
"active_fn": "ZY-FN-0007",
|
||
"host_server": "ZY-SVR-006",
|
||
"since": "2026-04-30",
|
||
"history": [
|
||
{ "fn": "ZY-FN-0001", "from": "2026-04-12", "to": "2026-04-30" },
|
||
{ "fn": "ZY-FN-0007", "from": "2026-04-30", "to": null }
|
||
],
|
||
"notes": "Phase 1 阶段实际是多 ZY-FN 共存于同一域名 (zhiku-api+ftchat-api+novel-api), 此字段记录'前端默认入口'对应的 ZY-FN. Phase 2 升级为单激活态后此字段成为强约束."
|
||
}
|
||
},
|
||
"modules_index": [
|
||
{
|
||
"id": "M-LOGIN-QQ",
|
||
"display_name_zh": "QQ 邮箱验证码登录",
|
||
"description": "邮箱验证码登录 · SMTP via QQ",
|
||
"used_by": ["ZY-FN-0007"]
|
||
},
|
||
{
|
||
"id": "M-FTCHAT-LLM",
|
||
"display_name_zh": "微调模型 LLM 调用",
|
||
"description": "DashScope compatible-mode SSE 流式 + 非流式降级 · model_not_found 自动 fallback",
|
||
"used_by": ["ZY-FN-0007"]
|
||
},
|
||
{
|
||
"id": "M-FTCHAT-NOTION-PROMPT",
|
||
"display_name_zh": "Notion 提示词拉取",
|
||
"description": "拉取 Notion 页面作为系统提示词",
|
||
"used_by": ["ZY-FN-0007"]
|
||
},
|
||
{
|
||
"id": "M-FTCHAT-MEMORY-AGENT",
|
||
"display_name_zh": "跨会话母语记忆",
|
||
"description": "压缩历史 + 持久化 · 跨会话恢复",
|
||
"used_by": ["ZY-FN-0007"]
|
||
},
|
||
{
|
||
"id": "M-CHAT-UI",
|
||
"display_name_zh": "聊天前端 UI",
|
||
"description": "通用聊天界面 + 频道徽章占位",
|
||
"used_by": ["ZY-FN-0007"]
|
||
},
|
||
{
|
||
"id": "M-ZHIKU-API",
|
||
"display_name_zh": "智库 API",
|
||
"description": "模块借阅协议核心 API",
|
||
"used_by": ["ZY-FN-0001"]
|
||
},
|
||
{
|
||
"id": "M-ZHIKU-MIRROR-AGENT",
|
||
"display_name_zh": "镜鉴 Agent",
|
||
"description": "差异感知 → LLM 评估 → 工单生成",
|
||
"used_by": ["ZY-FN-0001", "ZY-FN-0003"]
|
||
},
|
||
{
|
||
"id": "M-ZHIKU-MIRROR-SHIELD",
|
||
"display_name_zh": "七层镜防",
|
||
"description": "语言膜+镜面+IP隐身+漂移+自爆+重建+零点原核",
|
||
"used_by": ["ZY-FN-0001", "ZY-FN-0003"]
|
||
},
|
||
{
|
||
"id": "M-ZHIKU-COS-BRIDGE",
|
||
"display_name_zh": "智库 COS 桥接",
|
||
"description": "腾讯云 COS · ap-singapore · 团队书库桥接",
|
||
"used_by": ["ZY-FN-0001"]
|
||
},
|
||
{
|
||
"id": "M-NOVEL-API-LEGACY",
|
||
"display_name_zh": "旧版小说下载引擎",
|
||
"description": "(已退役) 早期小说下载+分章",
|
||
"used_by": ["ZY-FN-0002"]
|
||
},
|
||
{
|
||
"id": "M-PORTAL-API",
|
||
"display_name_zh": "光湖门户后端",
|
||
"description": "Express + better-sqlite3 · 对话历史 · /api/chat 字节级 SSE 转发 AutoDL · cc-002 三道关之后端层",
|
||
"used_by": ["ZY-FN-PORTAL"]
|
||
},
|
||
{
|
||
"id": "M-PORTAL-FRONTEND",
|
||
"display_name_zh": "光湖门户前端",
|
||
"description": "纯静态 HTML + vanilla JS · 三栏 (历史/聊天/上下文) · 切 tab 切模型 · 中文思源黑体本地",
|
||
"used_by": ["ZY-FN-PORTAL"]
|
||
},
|
||
{
|
||
"id": "M-VAULT-API",
|
||
"display_name_zh": "密钥库后端",
|
||
"description": "Express 4.21 子进程 · AES-256-GCM 加密 · 监听 127.0.0.1:8080 · /admin/secrets CRUD + AutoDL save_and_refresh + /internal/fetch (本机 only)",
|
||
"used_by": ["ZY-FN-VAULT"]
|
||
},
|
||
{
|
||
"id": "M-VAULT-FRONTEND",
|
||
"display_name_zh": "密钥库前端",
|
||
"description": "纯静态中文 UI · 按 workflow 分组 · 字段名走「用途」不走 secret 名 · AutoDL 一键按钮联动 PR-3 endpoint 刷新",
|
||
"used_by": ["ZY-FN-VAULT"]
|
||
},
|
||
{
|
||
"id": "M-VAULT-PEN-FETCH",
|
||
"display_name_zh": "神笔马良 secrets.fetch 能力",
|
||
"description": "mcp-servers/zhuyuan-pen/capabilities/secrets.fetch.js · 仅 loopback (127.0.0.1) · 现取现用不持久 · cc-004 强制隔离不可绕过",
|
||
"used_by": ["ZY-FN-VAULT"]
|
||
}
|
||
]
|
||
}
|