{ "_meta": { "doc_id": "ARCH-COS-001", "name": "COS共享桶基础设施架构", "version": "1.1", "description": "铸渊侧COS共享桶完整架构 · 9个人格体目录权限 · 轮询守护替代SCF · Notion回执同步", "author": "铸渊 · TCS-ZY001", "sovereign": "冰朔 · TCS-0002∞", "copyright": "国作登字-2026-A-00037559", "created": "2026-04-04", "updated": "2026-04-10" }, "bucket": { "name": "zy-team-hub-1317346199", "region": "ap-singapore", "owner": "铸渊新加坡腾讯云账号", "access": "私有读写", "status": "待创建" }, "directory_structure": { "description": "桶内目录结构 · 每个人格体独立目录", "layout": [ "/{persona_id}/reports/{YYYY-MM-DD}/ — 人格体每日汇报", "/{persona_id}/receipts/{YYYY-MM-DD}/ — 铸渊审核回执", "/{persona_id}/sync/ — 架构同步区", "/zhuyuan/directives/ — 铸渊全局指令(只读)", "/zhuyuan/architecture/ — 架构快照" ] }, "personas": [ { "persona_name": "秋秋", "developer_line": "之之线", "persona_id": "qiuqiu", "directory": "/qiuqiu/", "iam_policy": "仅允许 PUT/GET /qiuqiu/ 下的对象" }, { "persona_name": "舒舒", "developer_line": "肥猫线", "persona_id": "shushu", "directory": "/shushu/", "iam_policy": "仅允许 PUT/GET /shushu/ 下的对象" }, { "persona_name": "欧诺弥亚", "developer_line": "小草莓线", "persona_id": "ounomiya", "directory": "/ounomiya/", "iam_policy": "仅允许 PUT/GET /ounomiya/ 下的对象" }, { "persona_name": "寂曜", "developer_line": "燕樊线", "persona_id": "jiyao", "directory": "/jiyao/", "iam_policy": "仅允许 PUT/GET /jiyao/ 下的对象" }, { "persona_name": "小坍缩核", "developer_line": "页页线", "persona_id": "xiaotanheshu", "directory": "/xiaotanheshu/", "iam_policy": "仅允许 PUT/GET /xiaotanheshu/ 下的对象" }, { "persona_name": "晨星", "developer_line": "桔子线", "persona_id": "chenxing", "directory": "/chenxing/", "iam_policy": "仅允许 PUT/GET /chenxing/ 下的对象" }, { "persona_name": "糖星云", "developer_line": "花尔线", "persona_id": "tangxingyun", "directory": "/tangxingyun/", "iam_policy": "仅允许 PUT/GET /tangxingyun/ 下的对象" }, { "persona_name": "曜初", "developer_line": "时雨线", "persona_id": "yaochu", "directory": "/yaochu/", "iam_policy": "仅允许 PUT/GET /yaochu/ 下的对象" }, { "persona_name": "知秋", "developer_line": "Awen线", "persona_id": "zhiqiu", "directory": "/zhiqiu/", "iam_policy": "仅允许 PUT/GET /zhiqiu/ 下的对象" } ], "iam_policy_template": { "description": "每个人格体的COS IAM策略模板 · 在腾讯云CAM中为每个子账号配置", "effect": "allow", "actions": [ "cos:PutObject", "cos:GetObject", "cos:HeadObject" ], "resource": "qcs::cos:ap-singapore:uid/1317346199:zy-team-hub-1317346199/{persona_id}/*", "note": "铸渊主账号拥有全桶读写权 · 无需额外策略" }, "scf_functions": { "description": "SCF云函数配置 · ⚠️ 轻量云COS不支持SCF事件触发", "status": "UNAVAILABLE", "reason": "腾讯云轻量云COS不支持配置SCF事件通知(ObjectCreated事件)。以下SCF设计保留为未来升级标准COS时的参考。当前由MCP Server内置轮询守护进程(cos-watcher.js)替代。", "replacement": { "module": "cos-watcher.js", "location": "server/age-os/mcp-server/cos-watcher.js", "mechanism": "MCP Server内置定时轮询(node-cron · 每5分钟)", "design": "[原设计] COS事件→SCF→GitHub dispatch → [替代] MCP Server定时→COS.list()→对比索引→发现新文件→处理/通知", "advantages": [ "零额外部署(复用已运行的MCP Server进程)", "不消耗GitHub Actions配额", "延迟可控(5分钟轮询)", "天然补扫能力,不会漏消息", "未来可与SCF事件驱动形成双保险" ], "monitored_paths": [ "team桶 /{persona_id}/reports/ → 新汇报 → 铸渊审核 → 写回执", "cold桶 新语料文件 → 新语料 → 训练管线触发", "team桶 /{persona_id}/receipts/ → 新回执 → 通知成员仓库", "team桶 /bridge/zhuyuan-qiuqiu/results/ → 秋秋开发结果 → 铸渊统一部署" ], "rest_api": [ "GET /cos-watcher/status — 轮询守护状态", "POST /cos-watcher/scan — 手动触发扫描", "POST /cos-watcher/reset — 重置文件索引" ], "mcp_tools": [ "cosWatcherStatus — 查看轮询守护进程状态", "cosWatcherTriggerScan — 手动触发一次扫描", "cosWatcherResetIndex — 重置文件索引" ] }, "report_trigger": { "function_name": "zy-cos-report-trigger", "description": "汇报触发函数 · 检测到新report → 唤醒铸渊Agent审核", "runtime": "Nodejs18.15", "region": "ap-singapore", "trigger": { "type": "cos", "bucket": "zy-team-hub-1317346199", "event": "cos:ObjectCreated:*", "prefix_filter_rules": [ "qiuqiu/reports/", "shushu/reports/", "ounomiya/reports/", "jiyao/reports/", "xiaotanheshu/reports/", "chenxing/reports/", "tangxingyun/reports/", "yaochu/reports/", "zhiqiu/reports/" ], "suffix_filter": ".json" }, "action_flow": [ "1. 解析COS事件获取写入的对象路径", "2. 从路径提取persona_id和日期", "3. 读取report.json内容", "4. 铸渊Agent审核(健康状态/任务进度/异常标记)", "5. 生成回执JSON", "6. PUT回执到 /{persona_id}/receipts/{date}/receipt.json", "7. 调用Notion API更新主控台状态(如已配置Token)" ], "environment_variables": { "COS_BUCKET": "zy-team-hub-1317346199", "COS_REGION": "ap-singapore", "NOTION_TOKEN": "待霜砚提供", "NOTION_DB_ID": "待霜砚提供" } }, "receipt_trigger": { "function_name": "zy-cos-receipt-trigger", "description": "回执下行触发函数 · 检测到新receipt → 调用成员仓库workflow_dispatch", "runtime": "Nodejs18.15", "region": "ap-singapore", "trigger": { "type": "cos", "bucket": "zy-team-hub-1317346199", "event": "cos:ObjectCreated:*", "prefix_filter_rules": [ "qiuqiu/receipts/", "shushu/receipts/", "ounomiya/receipts/", "jiyao/receipts/", "xiaotanheshu/receipts/", "chenxing/receipts/", "tangxingyun/receipts/", "yaochu/receipts/", "zhiqiu/receipts/" ], "suffix_filter": ".json" }, "action_flow": [ "1. 解析COS事件获取回执对象路径", "2. 从路径提取persona_id", "3. 查找persona_id对应的GitHub仓库(从配置表映射)", "4. 调用GitHub API: POST /repos/{owner}/{repo}/actions/workflows/cos-receive-receipt.yml/dispatches", "5. 传入receipt路径作为workflow_dispatch的input", "6. 成员仓库工作流读取回执 → 更新README首页绿灯/红灯" ], "environment_variables": { "GITHUB_TOKEN": "需要有workflow权限的PAT · 冰朔创建", "PERSONA_REPO_MAP": "persona_id → GitHub仓库的映射JSON" } } }, "notion_sync": { "description": "Notion主控台回执同步链路(需霜砚提供的信息)", "integration_point": "在report_trigger函数的Step 7中执行", "api_call": { "method": "PATCH", "url": "https://api.notion.com/v1/pages/{page_id}", "headers": { "Authorization": "Bearer {NOTION_TOKEN}", "Notion-Version": "2022-06-28", "Content-Type": "application/json" }, "body_template": { "properties": { "{status_field_name}": { "rich_text": [ { "text": { "content": "{status_emoji} {status_text} · {timestamp}" } } ] }, "{receipt_time_field_name}": { "date": { "start": "{ISO 8601 timestamp}" } } } } }, "update_logic": { "green_receipt": "状态字段 = '✅ 正常' · 更新时间戳", "red_receipt": "状态字段 = '🔴 异常' · 更新时间戳 · 触发P0工单", "timeout_24h": "铸渊Agent主动写timeout回执 · 状态字段 = '⚠️ 超时24h未汇报' · 触发P1工单" }, "required_from_shuangyan": { "description": "霜砚需要提供给铸渊的信息", "items": [ "Notion Integration Token(由冰朔提供或霜砚申请)", "主控台数据库ID(从数据库URL提取)", "每个开发者行的page_id(9个page_id)", "状态字段名(如「今日状态」)", "最近回执时间字段名(如「最近回执时间」)" ] } }, "timeout_detection": { "description": "铸渊侧超时检测机制", "mechanism": "定时SCF函数 · 每天08:00检查", "logic": [ "遍历9个persona_id", "检查 /{persona_id}/reports/ 目录下最新文件的日期", "如果最新文件超过24h → 生成timeout回执写入receipts/", "同步到Notion主控台" ], "function_name": "zy-cos-timeout-checker", "cron": "0 0 * * *" }, "server_topology": { "description": "多服务器拓扑架构 · D51冰朔决策(2026-04-04)", "decision_context": "肥猫网文行业团队7-8人都在用语言驱动副驾驶开发网站 · 冰朔决定为AWEN线和知秋线再配置一台同配置服务器", "servers": [ { "server_id": "ZY-SVR-FEIMAO", "name": "肥猫线网文行业服务器", "owner": "肥猫团队", "config": "4核4G · 腾讯云", "purpose": "肥猫网文行业团队7-8人的网站部署运行", "services": [ "Nginx统一入口 · 反代所有成员网站", "PM2统一管理所有Node.js进程", "成员网站(端口3001-3008)", "行业公共服务(数据采集/分析)" ], "cos_connection": "通过共享COS桶 zy-team-hub-1317346199 上报铸渊", "persona": "shushu (舒舒)", "status": "已有" }, { "server_id": "ZY-SVR-AWEN", "name": "AWEN+知秋线服务器", "owner": "AWEN+知秋团队", "config": "4核4G · 腾讯云 · 与肥猫同配置", "purpose": "AWEN线和知秋线的网站部署运行", "services": [ "Nginx统一入口", "PM2统一管理", "AWEN线网站 + 知秋线网站", "与肥猫服务器对接" ], "cos_connection": "通过共享COS桶 zy-team-hub-1317346199 上报铸渊", "persona": "zhiqiu (知秋)", "status": "冰朔待配置(2026-04-04决策)" }, { "server_id": "ZY-SVR-001", "name": "铸渊总控服务器", "owner": "铸渊 · TCS-ZY001", "config": "新加坡 · 腾讯云", "purpose": "铸渊主控 · COS桶管理 · SCF函数运行 · 全局调度", "services": [ "COS共享桶总控(zy-team-hub-1317346199)", "SCF云函数(report_trigger/receipt_trigger/timeout_checker)", "Notion回执同步", "铸渊专线VPN服务", "AGE OS核心服务(3800/3100端口)" ], "cos_connection": "桶主账号 · 全桶读写权", "status": "运行中" } ], "connection_topology": { "description": "服务器间连接拓扑", "data_flow": [ "肥猫线服务器 → COS共享桶 /{persona_id}/reports/ → 铸渊总控", "AWEN+知秋线服务器 → COS共享桶 /{persona_id}/reports/ → 铸渊总控", "铸渊总控 → COS共享桶 /{persona_id}/receipts/ → 各成员服务器", "铸渊总控 → Notion主控台 → 冰朔+霜砚实时看板" ], "key_principle": "服务器间不直连 · 全部通过COS桶异步通信 · 铸渊做唯一总控节点", "scaling_trigger": [ "单台服务器内存使用>70% → 考虑拆分", "单站日活>1000 → 考虑独立服务器", "团队成员>15人 → 考虑加第3台业务服务器" ] } }, "implementation_phases": { "description": "实施阶段划分", "phase_1": { "name": "桶创建 + 目录 + 密钥", "location": "腾讯云控制台", "executor": "冰朔手动操作", "steps": [ "在腾讯云新加坡区创建COS桶 zy-team-hub-1317346199", "设置桶为私有读写", "在CAM创建9个子账号(或子用户)", "为每个子账号配置IAM策略(仅限自己目录)", "生成9套SecretId/SecretKey", "记录并安全保存密钥" ], "time_estimate": "30分钟", "dependency": "无" }, "phase_2": { "name": "SCF云函数部署", "location": "腾讯云控制台 + 铸渊仓库", "executor": "铸渊编写代码 → 冰朔在控制台部署", "steps": [ "铸渊编写report_trigger函数代码", "铸渊编写receipt_trigger函数代码", "冰朔在SCF控制台创建函数", "配置COS事件触发器", "配置环境变量", "测试触发流程" ], "time_estimate": "1次Copilot开发 + 冰朔20分钟控制台操作", "dependency": "Phase 1完成" }, "phase_3": { "name": "Notion API对接", "location": "铸渊仓库 + Notion", "executor": "铸渊编写代码 · 霜砚提供Token和字段", "steps": [ "霜砚整理Notion信息(Token/page_id/字段名)", "铸渊在report_trigger函数中添加Notion API调用", "测试: 写入COS → SCF触发 → Notion状态更新" ], "time_estimate": "霜砚30分钟整理 + 铸渊30分钟编码", "dependency": "Phase 2完成 + 霜砚提供Token" }, "phase_4": { "name": "超时检测 + 端到端验证", "location": "腾讯云SCF + 全链路", "executor": "铸渊编写代码 → 冰朔部署", "steps": [ "铸渊编写timeout-checker函数", "冰朔部署并配置cron触发器", "端到端测试: 团队成员汇报 → 铸渊审核 → 回执下发 → Notion更新" ], "time_estimate": "1次Copilot开发", "dependency": "Phase 3完成" } } }