guanghulab/.github/brain/architecture/function-manifest.json
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

402 lines
18 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"$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"]
}
]
}