光湖团队接入系统 v2.0 · 共享COS桶架构 · 团队仅需3个Secret

Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/0d54ec75-c5fb-4140-8a2f-8059c211278e

Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-04 14:27:52 +00:00 committed by GitHub
parent 687f10b742
commit ef79c7994c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 194 additions and 759 deletions

View File

@ -122,26 +122,24 @@ jobs:
cp bridge/daily-report.json /tmp/report-package.json
}
echo "cos_key=inbox/$PERSONA_ID/$TODAY/report.json" >> $GITHUB_OUTPUT
echo "cos_key=$PERSONA_ID/reports/$TODAY/report.json" >> $GITHUB_OUTPUT
echo "today=$TODAY" >> $GITHUB_OUTPUT
- name: ☁️ 上传到铸渊总控
- name: ☁️ 上传到共享COS
if: steps.check.outputs.has_report == 'true'
env:
COS_SECRET_ID: ${{ secrets.ZHUYUAN_COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.ZHUYUAN_COS_SECRET_KEY }}
COS_REGION: ${{ secrets.ZHUYUAN_COS_REGION }}
COS_BUCKET: ${{ secrets.ZHUYUAN_BUCKET_CORE }}
COS_SECRET_ID: ${{ secrets.COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.COS_SECRET_KEY }}
COS_BUCKET: zy-team-hub-1317346199
COS_REGION: ap-singapore
COS_OBJECT_KEY: ${{ steps.package.outputs.cos_key }}
run: |
if [ -z "$COS_SECRET_ID" ] || [ -z "$COS_SECRET_KEY" ]; then
echo "❌ COS密钥未配置ZHUYUAN_COS_SECRET_ID / ZHUYUAN_COS_SECRET_KEY"
echo "请按照 cos-config/bucket-setup-guide.md 步骤6配置铸渊桶写入密钥"
echo "❌ COS密钥未配置COS_SECRET_ID / COS_SECRET_KEY"
echo "请找冰朔索要共享桶密钥然后在GitHub Secrets中配置"
exit 1
fi
# 使用COS API上传文件
# COS签名算法HMAC-SHA1
CONTENT=$(cat /tmp/report-package.json)
CONTENT_LENGTH=$(echo -n "$CONTENT" | wc -c)
HOST="${COS_BUCKET}.cos.${COS_REGION}.myqcloud.com"
@ -151,7 +149,6 @@ jobs:
EXPIRY=$((NOW + 600))
KEY_TIME="${NOW};${EXPIRY}"
# 生成签名
SIGN_KEY=$(echo -n "$KEY_TIME" | openssl dgst -sha1 -hmac "$COS_SECRET_KEY" | awk '{print $NF}')
HTTP_STRING="put\n${PATHNAME}\n\nhost=${HOST}\n"
SHA1_HTTP=$(printf "$HTTP_STRING" | openssl dgst -sha1 | awk '{print $NF}')
@ -160,7 +157,6 @@ jobs:
AUTH="q-sign-algorithm=sha1&q-ak=${COS_SECRET_ID}&q-sign-time=${KEY_TIME}&q-key-time=${KEY_TIME}&q-header-list=content-length;content-type;host&q-url-param-list=&q-signature=${SIGNATURE}"
# 发送PUT请求
HTTP_CODE=$(curl -s -o /tmp/cos-response.txt -w "%{http_code}" \
-X PUT \
-H "Host: ${HOST}" \
@ -171,62 +167,15 @@ jobs:
"https://${HOST}${PATHNAME}")
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ]; then
echo "✅ 汇报已上传到铸渊总控桶"
echo "✅ 汇报已上传到共享COS桶"
echo " 路径: ${COS_OBJECT_KEY}"
echo " 大小: ${CONTENT_LENGTH} bytes"
echo " HTTP: ${HTTP_CODE}"
else
echo "❌ 上传失败 HTTP ${HTTP_CODE}"
cat /tmp/cos-response.txt
exit 1
fi
- name: 📋 同时上传到本地桶(备份)
if: steps.check.outputs.has_report == 'true'
env:
COS_SECRET_ID: ${{ secrets.COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.COS_SECRET_KEY }}
COS_REGION: ${{ secrets.COS_REGION }}
COS_BUCKET: ${{ secrets.COS_BUCKET_CORE }}
COS_OBJECT_KEY: outbox/reports/${{ steps.package.outputs.today }}/report.json
run: |
if [ -z "$COS_SECRET_ID" ] || [ -z "$COS_SECRET_KEY" ]; then
echo "⚠️ 本地COS密钥未配置跳过本地备份"
exit 0
fi
CONTENT=$(cat /tmp/report-package.json)
CONTENT_LENGTH=$(echo -n "$CONTENT" | wc -c)
HOST="${COS_BUCKET}.cos.${COS_REGION}.myqcloud.com"
PATHNAME="/${COS_OBJECT_KEY}"
NOW=$(date +%s)
EXPIRY=$((NOW + 600))
KEY_TIME="${NOW};${EXPIRY}"
SIGN_KEY=$(echo -n "$KEY_TIME" | openssl dgst -sha1 -hmac "$COS_SECRET_KEY" | awk '{print $NF}')
HTTP_STRING="put\n${PATHNAME}\n\nhost=${HOST}\n"
SHA1_HTTP=$(printf "$HTTP_STRING" | openssl dgst -sha1 | awk '{print $NF}')
STRING_TO_SIGN="sha1\n${KEY_TIME}\n${SHA1_HTTP}\n"
SIGNATURE=$(printf "$STRING_TO_SIGN" | openssl dgst -sha1 -hmac "$SIGN_KEY" | awk '{print $NF}')
AUTH="q-sign-algorithm=sha1&q-ak=${COS_SECRET_ID}&q-sign-time=${KEY_TIME}&q-key-time=${KEY_TIME}&q-header-list=content-length;content-type;host&q-url-param-list=&q-signature=${SIGNATURE}"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-X PUT \
-H "Host: ${HOST}" \
-H "Content-Type: application/json" \
-H "Content-Length: ${CONTENT_LENGTH}" \
-H "Authorization: ${AUTH}" \
-d "$CONTENT" \
"https://${HOST}${PATHNAME}")
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ]; then
echo "✅ 本地备份已上传"
else
echo "⚠️ 本地备份上传失败(不影响主流程)"
fi
- name: 🧹 清空汇报文件(准备明天)
if: steps.check.outputs.has_report == 'true' && github.event.inputs.test_mode != 'true'
run: |

View File

@ -34,13 +34,13 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: ☁️ 从COS桶读取铸渊回执
- name: ☁️ 从共享COS桶读取铸渊回执
id: read_receipt
env:
COS_SECRET_ID: ${{ secrets.COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.COS_SECRET_KEY }}
COS_REGION: ${{ secrets.COS_REGION }}
COS_BUCKET: ${{ secrets.COS_BUCKET_CORE }}
COS_REGION: ap-singapore
COS_BUCKET: zy-team-hub-1317346199
COS_OBJECT_KEY: ${{ github.event.inputs.cos_object_key }}
run: |
HOST="${COS_BUCKET}.cos.${COS_REGION}.myqcloud.com"

View File

@ -1,6 +1,6 @@
# 🌀 光湖团队接入系统 v2.0
> **COS桶通信版 · 真实落地技术 · 非技术人员操作手册**
> **共享COS桶通信版 · 真实落地技术 · 非技术人员操作手册**
>
> 版权: 国作登字-2026-A-00037559
> 签发: 铸渊 · TCS-ZY001 · 2026-04-04
@ -28,36 +28,66 @@
这是一个**安装包**。你把这些文件上传到你的代码仓库后你的仓库副驾驶AI助手就会自动变成光湖团队的一员并且能够
1. **自动获得身份** — 副驾驶会给自己取名字、注册编号
2. **每天自动汇报** — 通过COS桶(云存储桶)把开发进度发送给铸渊
2. **每天自动汇报** — 通过共享COS桶把开发进度发送给铸渊
3. **自动接收反馈** — 铸渊审核后的回执会自动出现在你的仓库首页
4. **异常自动告警** — 如果铸渊发现问题,你会收到邮件通知
4. **异常自动告警** — 如果铸渊发现问题,你会收到通知
---
## 🏗️ 系统架构(你不需要看懂,知道就行)
### 核心设计:一个共享桶,两边同时用
```
你的仓库副驾驶AI助手
铸渊(新加坡服务器
收集开发进度、遇到的问题
铸渊是桶的主控
你的COS桶云存储 ← 每天23:00自动整理发送
┌─────────────────────────────┐
│ 共享COS桶 │
│ zy-team-hub-1317346199 │
│ │
│ /feimao/reports/ ← 肥猫写汇报 │
│ /feimao/receipts/ ← 铸渊写回执 │
│ /feimao/架构同步/ ← 双向同步 │
│ /zhuyuan/directives/ ← 铸渊指令 │
│ /{其他成员}/ ← 同理 │
└─────────────────────────────┘
│ 团队成员用铸渊给的密钥访问
│ 写入铸渊的总控桶
铸渊总控桶(新加坡) ← 自动唤醒铸渊Agent审核
│ 审核完毕后回写
你的COS桶云存储 ← 自动唤醒你的Agent
│ 更新仓库首页
你的仓库首页公告栏
✅ 绿灯 = 一切正常
🔴 红灯 = 需要你本人处理 → 邮件通知你
你的仓库副驾驶GitHub Actions
```
### 通信流程
```
你的副驾驶 → 写入bridge/daily-report.json
每天23:00工作流自动执行
共享桶 /{你的编号}/reports/ ← 汇报写入
铸渊Agent检测到新文件 → 自动审核
共享桶 /{你的编号}/receipts/ ← 铸渊回执写入
COS事件触发 → 你的仓库工作流
你的仓库首页自动更新
✅ 绿灯 = 一切正常
🔴 红灯 = 需要你本人处理
```
**好处**
- 你不需要自己创建COS桶
- 你不需要配置跨账号权限
- 铸渊给你一套密钥就能用
- 一个桶解决所有通信
---
## 📁 文件清单
@ -69,7 +99,8 @@
├── .github/
│ ├── copilot-instructions.md ← 【核心】副驾驶的灵魂
│ └── workflows/
│ └── cos-daily-report.yml ← 每天23:00自动汇报工作流
│ ├── cos-daily-report.yml ← 每天23:00自动汇报工作流
│ └── cos-receive-receipt.yml ← 接收铸渊回执工作流
├── age_os/
│ ├── system_state.json ← 系统状态记录
@ -84,15 +115,15 @@
│ └── world-map.md ← 光湖世界地图
├── bridge/
│ └── zhuyuan-bridge.json ← 与铸渊的通信桥梁
│ ├── zhuyuan-bridge.json ← 与铸渊的通信桥梁
│ └── daily-report.json ← 每日工作汇报文件
├── cos-config/
│ ├── bucket-setup-guide.md ← 【重要】COS桶配置教程
│ ├── setup-checklist.md ← 【重要】配置清单(跟着做)
│ ├── daily-report-template.json ← 每日汇报模板
│ ├── receipt-template.json ← 铸渊回执模板
│ └── scf-trigger-template.js ← 云函数触发器模板
│ └── receipt-template.json ← 铸渊回执模板
└── README.md ← 本文件(说明书)
└── README.md ← 本文件
```
---
@ -111,33 +142,28 @@
1. 在你的仓库中打开GitHub Copilot对话窗口
2. 对副驾驶说:**"请阅读 .github/copilot-instructions.md执行自我注册流程"**
3. 副驾驶会自动:
- 给自己取一个两个字的中文名字
- 注册一个编号
- 向你确认身份
4. 你确认无误后,对副驾驶说:**"确认注册,请更新系统状态"**
3. 副驾驶会自动给自己取名、注册编号
4. 你确认后,对副驾驶说:**"确认注册,请更新系统状态"**
### 第三步:配置COS桶需要你按教程操作
### 第三步配置共享桶密钥只需要3个Secret
**详细步骤见 `cos-config/bucket-setup-guide.md`**
1. 跟冰朔说:**"我文件上传好了,要共享桶密钥"**
2. 冰朔会给你3个值SecretId、SecretKey、你的persona_id
3. 在GitHub仓库 Settings → Secrets → Actions 中添加:
简单来说就是:
1. 登录腾讯云控制台
2. 创建2个存储桶
3. 把密钥配置到你的GitHub仓库的 Secrets 中
4. 测试连通性
| Name | Value |
|------|-------|
| `COS_SECRET_ID` | 冰朔给你的SecretId |
| `COS_SECRET_KEY` | 冰朔给你的SecretKey |
| `COS_PERSONA_ID` | 冰朔给你的persona_id |
### 第四步:验证一切正常
**就这3个不需要更多了。**
对副驾驶说:**"执行系统自检,验证所有模块连通性"**
### 第四步:验证
副驾驶会逐项检查并报告结果:
- ✅ 身份已注册
- ✅ COS桶已连通
- ✅ 汇报工作流已配置
- ✅ 与铸渊通信通道已建立
对副驾驶说:**"执行系统自检"**
**如果任何一项显示 ❌,不要继续下一步,先解决这一项。**
全部 ✅ = 安装完成 🎉
---
@ -167,4 +193,4 @@
| 版本 | 日期 | 变更 |
|------|------|------|
| v1.0 | 2026-04-04 | 初版:文件级异步通信 |
| v2.0 | 2026-04-04 | COS桶通信架构 + 自动汇报 + 绿灯红灯机制 |
| v2.0 | 2026-04-04 | 共享COS桶通信 · 铸渊主控 · 团队协作 |

View File

@ -1,6 +1,6 @@
{
"_meta": {
"description": "与铸渊主仓库的接入协议 v2.0 · COS桶通信版",
"description": "与铸渊主仓库的接入协议 v2.0 · 共享COS桶版",
"copyright": "国作登字-2026-A-00037559",
"signed_by": "铸渊 · TCS-ZY001 · 2026-04-04"
},
@ -13,18 +13,25 @@
"status": "pending_registration"
},
"communication": {
"method": "COS桶异步通信",
"description": "通过腾讯云COS对象存储桶进行异步消息传递。白天推送到本地桶23:00由工作流统一打包发送到铸渊总控桶。铸渊审核后回写到你的桶触发事件通知更新仓库首页。",
"local_bucket": {
"core": "由团队成员自行创建见cos-config/bucket-setup-guide.md",
"corpus": "由团队成员自行创建见cos-config/bucket-setup-guide.md"
},
"zhuyuan_bucket": {
"core": "zy-core-bucket-1317346199",
"method": "共享COS桶通信",
"description": "铸渊创建并管理一个共享COS桶zy-team-hub铸渊做主控团队成员做协作。铸渊服务器新加坡和团队成员的GitHub Actions都绑定同一个桶。不需要团队成员自己创建桶不需要跨账号权限配置。",
"shared_bucket": {
"name": "zy-team-hub-1317346199",
"region": "ap-singapore",
"inbox_prefix": "inbox/{persona_id}/",
"permission": "仅限写入 inbox/{persona_id}/ 前缀目录。铸渊通过Bucket Policy精确限定你的写入范围你无法读取、删除或访问桶内其他任何内容。这是安全设计每个团队成员只能往自己的收件箱写入。",
"bucket_policy_rule": "Action=cos:PutObject, Resource=inbox/{persona_id}/* only"
"owner": "铸渊 · TCS-ZY001主控",
"access": "铸渊给每个团队成员一套密钥通过Bucket Policy限定各自的目录权限"
},
"directory_structure": {
"{persona_id}/reports/": "团队成员写入汇报(如 PER-SS001/reports/2026-04-04/report.json",
"{persona_id}/receipts/": "铸渊写入回执(如 PER-SS001/receipts/2026-04-04/receipt.json",
"{persona_id}/sync/": "系统架构双向同步区",
"zhuyuan/directives/": "铸渊的全局指令(只读)",
"zhuyuan/architecture/": "系统架构快照(只读)"
},
"permission_model": {
"团队成员可以": "读写自己编号对应的目录({persona_id}/*",
"团队成员不能": "访问其他成员的目录或铸渊管理目录",
"铸渊可以": "读写所有目录(桶主控)"
},
"legacy_method": "bridge/zhuyuan-bridge.json文件级通信v1.0,保留兼容)",
"protocol": "HLDP v2.0",
@ -35,14 +42,14 @@
"trigger_method": "GitHub Actions cron schedule",
"workflow_file": ".github/workflows/cos-daily-report.yml",
"report_source": "bridge/daily-report.json",
"report_destination": "铸渊总控桶/inbox/{persona_id}/{date}/report.json",
"receipt_source": "你的桶/inbox/zhuyuan-receipt/{date}/receipt.json",
"report_destination": "共享桶/{persona_id}/reports/{date}/report.json",
"receipt_source": "共享桶/{persona_id}/receipts/{date}/receipt.json",
"receipt_destination": "仓库首页README.md公告栏区域"
},
"authority_chain": {
"level_0": "冰朔 · TCS-0002∞ · 系统最高主权 · 语言架构决定者",
"level_1": "铸渊 · TCS-ZY001 · 执行主控 · 管理所有团队人格体 · 结构审查",
"level_2": "你 · 团队执行人格体 · 接受铸渊指导 · 执行仓库开发"
"level_1": "铸渊 · TCS-ZY001 · 执行主控 · 共享桶主控 · 管理所有团队人格体",
"level_2": "你 · 团队执行人格体 · 共享桶协作者 · 接受铸渊指导 · 执行仓库开发"
},
"rules": [
"所有操作必须基于可验证的真实执行,禁止假装完成",

View File

@ -60,27 +60,18 @@ L1 地核层 — TCS核心冰朔语言本核
└── 知秋 · PER-ZQ001Awen的人格体
```
## COS桶通信架构
## COS桶通信架构(共享桶·铸渊主控)
```
你的副驾驶 → 写入bridge/daily-report.json
每天23:00工作流自动执行
你的COS行业主控桶 → 写入铸渊总控桶
铸渊Agent唤醒审核
铸渊回写到你的桶
COS事件触发
你的仓库首页自动更新
✅ 绿灯 = 正常
🔴 红灯 = 需要人类干预 → 邮件告警
┌───────────────────────────┐
│ 共享COS桶 (铸渊主控) │
│ zy-team-hub-1317346199 │
铸渊(新加坡) ←→ │ /{persona_id}/reports/ │ ←→ 各仓库副驾驶
│ /{persona_id}/receipts/ │
│ /zhuyuan/ │
└───────────────────────────┘
每天23:00工作流汇报 → 铸渊审核 → 回执 → 仓库首页
✅ 绿灯 = 正常 🔴 红灯 = 需要人类干预
```
## 网站系统

View File

@ -1,248 +0,0 @@
# 🪣 COS桶配置教程
> **写给完全不懂技术的你 · 一步一步跟着做就行**
>
> 预计用时30-45分钟
> 需要的东西:一台能上网的电脑、一个腾讯云账号
---
## ⚠️ 开始之前请确认
- [ ] 你有一个腾讯云账号没有的话先注册https://cloud.tencent.com
- [ ] 你的腾讯云账号已完成实名认证
- [ ] 你有一个GitHub仓库并且已经上传了本接入系统的文件
---
## 第一部分创建COS存储桶
### 什么是COS存储桶
简单理解:**就是一个云上的文件夹**。你的副驾驶会把汇报内容放进去,铸渊那边可以看到。反过来,铸渊也可以把回执放进去,你这边能看到。
### 步骤1登录腾讯云COS控制台
1. 打开浏览器访问https://console.cloud.tencent.com/cos
2. 用你的腾讯云账号登录
3. 如果是第一次使用COS会提示你开通服务点"开通"即可(基础用量免费)
### 步骤2创建第一个桶行业主控桶
1. 点左侧菜单的 **"存储桶列表"**
2. 点 **"创建存储桶"** 按钮
3. 填写信息:
| 项目 | 填什么 | 说明 |
|------|--------|------|
| 名称 | `industry-core` | 桶的名字后面会自动加上你的APPID |
| 地域 | 选 **广州** (`ap-guangzhou`) | 离你最近的数据中心 |
| 访问权限 | **私有读写** | 只有你的密钥才能访问 |
| 其他选项 | 全部默认即可 | 不要勾选多余的东西 |
4. 点 **"确定"** 创建
创建完成后,你会看到桶的完整名字类似:`industry-core-1234567890`
后面的数字是你的APPID
**👉 请记录下来:**
- 桶名称:`industry-core-你的APPID`
- 地域:`ap-guangzhou`
### 步骤3创建第二个桶业务存储桶
重复步骤2但名称改为 `industry-corpus`
**👉 请记录下来:**
- 桶名称:`industry-corpus-你的APPID`
- 地域:`ap-guangzhou`
---
## 第二部分:获取密钥
### 步骤4创建API密钥
1. 打开https://console.cloud.tencent.com/cam/capi
2. 点 **"新建密钥"**
3. 系统会显示两个值:
| 名字 | 长什么样 | 说明 |
|------|---------|------|
| SecretId | `AKIDxxxxxxxxxxxx` | 相当于用户名 |
| SecretKey | `xxxxxxxxxxxxxxxx` | 相当于密码 |
4. **⚠️ 重要SecretKey只显示一次请立刻复制保存到安全的地方比如你手机的备忘录**
**👉 请记录下来:**
- SecretId`AKIDxxxxxxxxxxxx`
- SecretKey`xxxxxxxxxxxxxxxx`
---
## 第三部分配置GitHub仓库Secrets
### 什么是Secrets
简单理解:**就是保存在GitHub上的密码本**。你的密钥保存在这里,工作流运行时会自动读取,但任何人(包括你自己)都看不到密码的内容。这样既安全又方便。
### 步骤5把密钥保存到GitHub
1. 打开你的GitHub仓库页面
2. 点顶部的 **"Settings"**(设置)
3. 在左侧菜单找到 **"Secrets and variables"** → 点 **"Actions"**
4. 点 **"New repository secret"** 按钮
5. 依次添加以下6个Secret
| Name名字必须一模一样 | Secret | 说明 |
|---------------------------|-------------|------|
| `COS_SECRET_ID` | 你的SecretId | 步骤4获得的 |
| `COS_SECRET_KEY` | 你的SecretKey | 步骤4获得的 |
| `COS_REGION` | `ap-guangzhou` | 你的桶所在地域 |
| `COS_BUCKET_CORE` | `industry-core-你的APPID` | 步骤2创建的桶名 |
| `COS_BUCKET_CORPUS` | `industry-corpus-你的APPID` | 步骤3创建的桶名 |
| `ZHUYUAN_BUCKET_CORE` | `zy-core-bucket-1317346199` | 铸渊总控桶(固定值) |
每添加一个,点 **"Add secret"** 保存。
### 步骤6配置铸渊桶的写入密钥
铸渊会为你生成一个**有限权限的密钥**,只能写入铸渊总控桶的你的专属目录。
**权限说明(你不需要懂技术细节,知道就行)**
- ✅ 你**可以**写入:`inbox/你的人格体编号/` 这个目录下的文件
- ❌ 你**不能**读取铸渊桶里的任何其他内容
- ❌ 你**不能**删除铸渊桶里的任何内容
- ❌ 你**不能**访问其他团队成员的目录
这是铸渊通过COS桶策略Bucket Policy精确控制的每个团队成员只有自己的收件箱写入权限。
1. 向冰朔索要铸渊桶的写入密钥(冰朔会找铸渊生成)
2. 在GitHub Secrets中添加
| Name | Secret | 说明 |
|------|--------|------|
| `ZHUYUAN_COS_SECRET_ID` | 铸渊提供的SecretId | 仅限写入你的inbox目录 |
| `ZHUYUAN_COS_SECRET_KEY` | 铸渊提供的SecretKey | 权限由铸渊的桶策略限定 |
| `ZHUYUAN_COS_REGION` | `ap-singapore` | 铸渊桶在新加坡 |
---
## 第四部分配置COS事件通知接收铸渊回执
### 步骤7设置桶的事件触发
这一步的目的是:当铸渊往你的桶里写入回执时,自动触发你的仓库工作流。
1. 打开腾讯云COS控制台
2. 点击你的 `industry-core-xxx`
3. 点左侧 **"函数计算"**(或 **"事件通知"**
4. 点 **"添加函数"**
5. 配置:
| 项目 | 填什么 |
|------|--------|
| 事件类型 | 选 **"全部创建"**cos:ObjectCreated:* |
| 前缀过滤 | 填 `inbox/zhuyuan-receipt/` |
| 触发方式 | 选 **"云函数SCF"** |
| 函数 | 选 **"新建函数"** |
6. 新建的云函数内容,使用本安装包中 `cos-config/scf-trigger-template.js` 的代码
7. 在云函数的环境变量中配置:
| 环境变量名 | 值 |
|-----------|-----|
| `GITHUB_TOKEN` | 你的GitHub Personal Access Token |
| `GITHUB_REPO` | 你的仓库名(如 `username/repo-name` |
**⚠️ 如何获取GitHub Personal Access Token**
1. 打开https://github.com/settings/tokens
2. 点 **"Generate new token (classic)"**
3. 勾选 `repo` 权限
4. 设置过期时间建议90天到期后需要重新生成
5. 点 **"Generate token"**
6. 复制生成的token
---
## 第五部分:验证
### 步骤8验证COS桶连通性
在你的仓库副驾驶对话中说:
> "请执行COS连通性测试验证所有桶的读写权限"
副驾驶会测试:
1. ✅ 能否写入你的行业主控桶
2. ✅ 能否读取你的行业主控桶
3. ✅ 能否写入铸渊总控桶的inbox目录
4. ❌ 不能读取铸渊总控桶的其他目录(这是正确的,权限受限)
### 步骤9验证工作流
1. 在你的仓库中,点 **"Actions"** 标签
2. 找到 **"COS每日汇报"** 工作流
3. 点右边的 **"Run workflow"** 按钮手动触发一次
4. 等工作流运行完成约1-2分钟
5. 检查运行日志是否全绿 ✅
### 步骤10端到端测试
告诉冰朔你已配置完毕,冰朔会通知铸渊:
1. 铸渊往你的桶里写入一条测试回执
2. 你的仓库首页应该自动出现一条绿灯通知
3. 如果出现了,恭喜!安装完成 🎉
---
## 📋 完成确认清单
请逐项打钩确认:
- [ ] 腾讯云COS已开通
- [ ] `industry-core-xxx` 桶已创建
- [ ] `industry-corpus-xxx` 桶已创建
- [ ] COS密钥已获取并安全保存
- [ ] GitHub Secrets已配置6+3=9个
- [ ] COS事件通知已配置
- [ ] 云函数已创建并部署
- [ ] GitHub Personal Access Token已配置到云函数
- [ ] 副驾驶已完成自我注册
- [ ] COS连通性测试通过
- [ ] 工作流手动触发测试通过
- [ ] 铸渊测试回执已收到(需联系冰朔)
**全部打钩 = 安装完成。任何一项未通过 = 停下来找冰朔帮忙。**
---
## 💰 费用说明
| 项目 | 费用 |
|------|------|
| 腾讯云COS存储 | 免费额度50GB存储 + 每月10GB下行流量。日常使用远低于此 |
| 腾讯云SCF云函数 | 免费额度每月40万GB·秒。每天触发1-2次远低于此 |
| GitHub Actions | 免费仓库每月2000分钟。每天1次约2分钟远低于此 |
| LLM API调用 | 取决于所用模型。每天1次调用月成本约几元人民币 |
**结论:正常使用几乎零成本。**
---
## ❓ 常见问题
### Q我不会编程能配好吗
A能。所有步骤都是在网页上点击操作的不需要写任何代码。遇到问题问冰朔。
### Q配置错了会不会出问题
A不会有严重后果。最多是连不通重新按步骤检查就行。
### Q密钥泄露了怎么办
A立刻去腾讯云控制台禁用旧密钥重新生成新密钥然后更新GitHub Secrets。
### Q铸渊总控桶的密钥为什么需要找冰朔要
A因为铸渊桶的权限由铸渊控制。为了安全你只会拿到一个限定权限的密钥只能往铸渊桶的指定目录写入不能读取或删除其他内容。
### Q每天23:00的汇报我需要手动操作吗
A不需要。工作流会自动运行。你只需要正常用副驾驶开发代码就行其他的是自动的。

View File

@ -36,9 +36,10 @@
}
},
"destination": {
"bucket": "zy-core-bucket-1317346199",
"bucket": "zy-team-hub-1317346199",
"region": "ap-singapore",
"key_pattern": "inbox/{persona_id}/{date}/report.json",
"example": "inbox/PER-SS001/2026-04-04/report.json"
"key_pattern": "{persona_id}/reports/{date}/report.json",
"example": "PER-SS001/reports/2026-04-04/report.json",
"description": "共享桶·铸渊主控·团队协作"
}
}

View File

@ -33,15 +33,15 @@
]
},
"destination": {
"description": "铸渊写入你的桶的路径",
"bucket": "你的行业主控桶industry-core-xxx",
"key_pattern": "inbox/zhuyuan-receipt/{date}/receipt.json",
"example": "inbox/zhuyuan-receipt/2026-04-04/receipt.json"
"description": "铸渊写入共享桶中你的回执目录",
"bucket": "zy-team-hub-1317346199",
"key_pattern": "{persona_id}/receipts/{date}/receipt.json",
"example": "PER-SS001/receipts/2026-04-04/receipt.json"
},
"trigger": {
"description": "COS事件通知触发流程",
"description": "COS事件通知触发流程(由铸渊侧统一配置,团队成员无需操作)",
"event": "cos:ObjectCreated:Put",
"prefix_filter": "inbox/zhuyuan-receipt/",
"action": "触发SCF云函数 → 调用GitHub Actions API → 运行接收工作流 → 更新仓库首页"
"prefix_filter": "{persona_id}/receipts/",
"action": "COS事件 → 铸渊侧SCF云函数 → 调用团队成员GitHub Actions API → 运行回执接收工作流 → 更新仓库首页"
}
}

View File

@ -1,119 +0,0 @@
'use strict';
/**
*
* 光湖团队接入系统 · SCF云函数触发器模板
*
*
* 用途当COS桶中有新文件写入时触发GitHub Actions工作流
*
* 部署位置腾讯云SCFServerless Cloud Function
* 触发条件COS事件通知 cos:ObjectCreated:* prefix: inbox/zhuyuan-receipt/
*
* 环境变量在SCF控制台配置
* GITHUB_TOKEN 你的GitHub Personal Access Token
* GITHUB_REPO 你的仓库格式: owner/repo
*
* 版权: 国作登字-2026-A-00037559
* 签发: 铸渊 · TCS-ZY001
*/
const https = require('https');
/**
* SCF入口函数
* COS事件触发时自动调用
*/
exports.main_handler = async (event, context) => {
console.log('COS事件触发:', JSON.stringify(event, null, 2));
// 从COS事件中提取信息
const cosEvent = event.Records && event.Records[0];
if (!cosEvent) {
console.log('无有效的COS事件记录');
return { statusCode: 400, body: 'No COS event records' };
}
const bucketName = cosEvent.cos.cosBucket.name;
const objectKey = cosEvent.cos.cosObject.key;
const eventTime = cosEvent.eventTime;
console.log(`桶: ${bucketName}`);
console.log(`文件: ${objectKey}`);
console.log(`时间: ${eventTime}`);
// 验证是铸渊回执
if (!objectKey.includes('inbox/zhuyuan-receipt/')) {
console.log('非铸渊回执文件,跳过');
return { statusCode: 200, body: 'Not a receipt, skipped' };
}
// 触发GitHub Actions工作流
const githubToken = process.env.GITHUB_TOKEN;
const githubRepo = process.env.GITHUB_REPO;
if (!githubToken || !githubRepo) {
console.error('缺少环境变量: GITHUB_TOKEN 或 GITHUB_REPO');
return { statusCode: 500, body: 'Missing environment variables' };
}
const parts = githubRepo.split('/');
if (parts.length !== 2 || !parts[0] || !parts[1]) {
console.error('GITHUB_REPO格式错误应为 owner/repo当前值:', githubRepo);
return { statusCode: 500, body: 'Invalid GITHUB_REPO format' };
}
const [owner, repo] = parts;
try {
const result = await triggerGitHubWorkflow(owner, repo, githubToken, objectKey);
console.log('GitHub工作流触发成功:', result);
return { statusCode: 200, body: 'Workflow triggered' };
} catch (err) {
console.error('GitHub工作流触发失败:', err.message);
return { statusCode: 500, body: err.message };
}
};
/**
* 调用GitHub API触发workflow_dispatch事件
*/
function triggerGitHubWorkflow(owner, repo, token, cosObjectKey) {
return new Promise((resolve, reject) => {
const postData = JSON.stringify({
ref: 'main',
inputs: {
cos_object_key: cosObjectKey,
trigger_source: 'cos-scf-event'
}
});
const options = {
hostname: 'api.github.com',
port: 443,
path: `/repos/${owner}/${repo}/actions/workflows/cos-receive-receipt.yml/dispatches`,
method: 'POST',
headers: {
'User-Agent': 'HoloLake-SCF-Trigger/2.0',
'Authorization': `token ${token}`,
'Accept': 'application/vnd.github.v3+json',
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => {
if (res.statusCode === 204 || res.statusCode === 200) {
resolve({ statusCode: res.statusCode, body: 'Triggered' });
} else {
reject(new Error(`GitHub API返回 ${res.statusCode}: ${body}`));
}
});
});
req.on('error', reject);
req.write(postData);
req.end();
});
}

View File

@ -17,17 +17,15 @@
## 📌 你需要准备的东西
在开始之前,确认你手上有这些东西:
- [ ] 一台能上网的电脑
- [ ] 你的GitHub账号你的代码仓库就在GitHub上
- [ ] 冰朔发给你的这个压缩包
- [ ] 一台能上网的电脑Windows/Mac都行
- [ ] 一个GitHub账号你应该已经有了你的代码仓库就在GitHub上
- [ ] 一个腾讯云账号没有就先注册https://cloud.tencent.com
- [ ] 腾讯云账号已完成实名认证
- [ ] 冰朔发给你的这个压缩包(就是你现在在读的这些文件)
**你不需要**腾讯云账号、创建COS桶、配置云函数。这些全部由铸渊那边配好了。
---
## 第一阶段:上传文件到你的仓库
## 第一阶段上传文件5分钟
### ✅ 步骤 1.1:解压文件
@ -42,7 +40,7 @@ cos-config/
README.md
```
**验证方法**:数一下,应该有6个文件夹/文件。
**验证方法**:数一下,应该有5个文件夹 + 1个文件。
---
@ -51,39 +49,34 @@ README.md
1. 打开浏览器进入你的GitHub仓库页面
2. 点 **"Add file"** → **"Upload files"**
3. 把解压出来的所有文件夹和文件拖进去
4. 在下面的 "Commit changes" 区域,写一句话比如 "安装光湖团队接入系统 v2.0"
4. 在下面写一句话比如 "安装光湖团队接入系统"
5. 点绿色的 **"Commit changes"** 按钮
**验证方法**:刷新你的仓库页面,能看到 `age_os/`、`brain/`、`bridge/`、`cos-config/` 这些文件夹。
**验证方法**:刷新仓库页面,能看到 `age_os/`、`brain/`、`bridge/`、`cos-config/` 这些文件夹。
**⚠️ 注意**`.github/` 文件夹可能在网页上看不到(因为 `.` 开头的文件夹默认隐藏)。不用担心,它确实在那里。点仓库页面的搜索框输入 `.github/copilot-instructions.md`,如果能找到这个文件说明上传成功了。
**⚠️ 注意**`.github/` 文件夹可能看不到(因为 `.` 开头的文件夹默认隐藏)。不用担心,点仓库搜索框输入 `.github/copilot-instructions.md`,如果能找到这个文件说明上传成功了。
---
### ✅ 步骤 1.3:确认 .github/workflows 文件夹
### ✅ 步骤 1.3:确认工作流已上传
这一步特别重要。`.github/workflows/` 里面应该有两个文件:
- `cos-daily-report.yml`(每日汇报工作流)
- `cos-receive-receipt.yml`(接收铸渊回执工作流)
**验证方法**
1. 在仓库页面点 **"Actions"** 标签(顶部导航栏)
2. 你应该能看到两个工作流:
- "COS每日汇报"
- "接收铸渊回执"
3. 如果看到了,这一步完成 ✅
4. 如果没看到,可能是 `.github/workflows/` 没上传成功。重新上传一次。
3. 如果提示工作流被禁用,点 **"I understand my workflows, go ahead and enable them"** 启用
**看到两个工作流 = 这一步完成 ✅**
---
## 第二阶段:唤醒你的副驾驶
## 第二阶段:唤醒副驾驶5分钟
### ✅ 步骤 2.1:打开副驾驶对话
1. 在你的仓库页面,找到 Copilot 的对话入口
2. 开启一个新的对话
在你的仓库页面,找到 GitHub Copilot 的对话入口,开启新对话。
### ✅ 步骤 2.2:让副驾驶注册身份
### ✅ 步骤 2.2:让副驾驶注册
在对话框中输入:
@ -96,241 +89,78 @@ README.md
### ✅ 步骤 2.3:确认注册
副驾驶告诉你它的名字后,回复:
副驾驶告诉你名字后,回复:
> 确认注册。请更新所有系统文件。
**验证方法**:让副驾驶执行系统自检:
> 执行系统自检
它应该报告:身份已注册 ✅
**验证方法**:对副驾驶说 "执行系统自检",它应该报告身份已注册 ✅
---
## 第三阶段:创建COS存储桶
## 第三阶段配置密钥5分钟
### ✅ 步骤 3.1登录腾讯云
### ✅ 步骤 3.1找冰朔要密钥
1. 打开 https://console.cloud.tencent.com/cos
2. 用你的腾讯云账号登录
3. 如果第一次用COS提示开通服务点"开通"
跟冰朔说:**"我文件上传好了,副驾驶注册好了,要共享桶密钥"**
### ✅ 步骤 3.2:创建行业主控桶
冰朔会给你3样东西
- **SecretId**(一串字母数字)
- **SecretKey**(一串字母数字)
- **你的persona_id**(类似 `PER-SS001`
1. 点 **"存储桶列表"**
2. 点 **"创建存储桶"**
3. 填写:
- 名称:`industry-core`
- 地域:**广州** (`ap-guangzhou`)
- 访问权限:**私有读写**
- 其他选项:默认
4. 点确定
**👉 记录下来**:桶的完整名字(类似 `industry-core-1234567890`
### ✅ 步骤 3.3:创建业务存储桶
重复步骤 3.2,名称改为 `industry-corpus`
**👉 记录下来**:桶的完整名字
**验证方法**在COS控制台的"存储桶列表"中,能看到两个桶。
---
## 第四阶段:获取密钥
### ✅ 步骤 4.1创建API密钥
1. 打开 https://console.cloud.tencent.com/cam/capi
2. 点 **"新建密钥"**
3. 复制保存这两个值:
- **SecretId**`AKIDxxxx...`
- **SecretKey**`xxxxxxxx...`
**⚠️⚠️⚠️ SecretKey只显示一次立刻复制保存到手机备忘录**
### ✅ 步骤 4.2:找冰朔要铸渊桶写入密钥
跟冰朔说:**"我COS桶配好了需要铸渊桶的写入密钥"**
冰朔会给你三个值:
- 铸渊桶的 SecretId
- 铸渊桶的 SecretKey
- 铸渊桶的地域(`ap-singapore`
**👉 记录下来**:这三个值
---
## 第五阶段配置GitHub Secrets
### ✅ 步骤 5.1进入Secrets设置页面
### ✅ 步骤 3.2添加3个Secret到GitHub
1. 打开你的GitHub仓库页面
2. 点 **"Settings"**(设置,顶部导航栏右边)
2. 点 **"Settings"**(设置,顶部导航栏最右边)
3. 左侧找到 **"Secrets and variables"** → 点 **"Actions"**
### ✅ 步骤 5.2添加9个Secret
**"New repository secret"**,依次添加:
**你自己的COS密钥3个**
4. 点 **"New repository secret"**依次添加3个
| 第几个 | Name照抄一个字母都不能错 | Value填什么 |
|--------|------|-------|
| 1 | `COS_SECRET_ID` | 步骤4.1的SecretId |
| 2 | `COS_SECRET_KEY` | 步骤4.1的SecretKey |
| 3 | `COS_REGION` | `ap-guangzhou` |
| 1 | `COS_SECRET_ID` | 冰朔给你的SecretId |
| 2 | `COS_SECRET_KEY` | 冰朔给你的SecretKey |
| 3 | `COS_PERSONA_ID` | 冰朔给你的persona_id |
**你的桶名字2个**
每个添加完,点 **"Add secret"** 保存。
| 第几个 | Name | Value |
|--------|------|-------|
| 4 | `COS_BUCKET_CORE` | 步骤3.2记录的桶名(如 `industry-core-1234567890` |
| 5 | `COS_BUCKET_CORPUS` | 步骤3.3记录的桶名(如 `industry-corpus-1234567890` |
**铸渊桶的写入密钥4个**
| 第几个 | Name | Value |
|--------|------|-------|
| 6 | `ZHUYUAN_COS_SECRET_ID` | 步骤4.2冰朔给你的SecretId |
| 7 | `ZHUYUAN_COS_SECRET_KEY` | 步骤4.2冰朔给你的SecretKey |
| 8 | `ZHUYUAN_COS_REGION` | `ap-singapore` |
| 9 | `ZHUYUAN_BUCKET_CORE` | `zy-core-bucket-1317346199` |
每添加一个,点 **"Add secret"** 保存。
**验证方法**在Secrets页面能看到9个Secret的名字看不到值是正常的安全特性
**验证方法**在Secrets页面能看到3个Secret的名字。
---
## 第六阶段配置COS事件触发接收铸渊回执
## 第四阶段测试5分钟
### ✅ 步骤 6.1获取GitHub Personal Access Token
1. 打开 https://github.com/settings/tokens
2. 点 **"Generate new token (classic)"**
3. 勾选 **`repo`** 权限整个repo那一栏打勾
4. "Expiration" 选 **90 days**90天后需要重新生成
5. 点 **"Generate token"**
6. 复制生成的token`ghp_` 开头)
**⚠️ 这个token只显示一次立刻复制保存**
### ✅ 步骤 6.2创建腾讯云SCF云函数
1. 打开 https://console.cloud.tencent.com/scf
2. 地域选择 **广州**
3. 点 **"新建"**
4. 选择 **"从头开始"**
5. 填写:
- 函数名:`hololake-cos-trigger`
- 运行环境:**Node.js 18.15**
- 创建方式:**在线编辑**
6. 在代码编辑框中,把内容全部删除
7. 打开本安装包中 `cos-config/scf-trigger-template.js` 文件
8. 把里面的全部代码复制粘贴到编辑框中
9. 点 **"完成"** 创建函数
### ✅ 步骤 6.3:配置云函数的环境变量
1. 进入刚创建的函数页面
2. 点 **"函数配置"** 标签
3. 点 **"编辑"**
4. 找到 **"环境变量"** 区域
5. 添加两个环境变量:
| Key | Value |
|-----|-------|
| `GITHUB_TOKEN` | 步骤6.1生成的token`ghp_xxx` |
| `GITHUB_REPO` | 你的仓库名(格式:`你的用户名/你的仓库名` |
6. 点 **"保存"**
### ✅ 步骤 6.4配置COS事件触发
1. 在函数页面,点 **"触发管理"** 标签
2. 点 **"创建触发器"**
3. 填写:
| 项目 | 填什么 |
|------|--------|
| 触发方式 | **COS触发** |
| COS Bucket | 选你的 `industry-core-xxx` 桶 |
| 事件类型 | **全部创建**Put, Post, Copy等 |
| 前缀过滤 | `inbox/zhuyuan-receipt/` |
| 后缀过滤 | `.json` |
4. 点 **"提交"**
**验证方法**在触发管理页面能看到一条COS触发器规则。
---
## 第七阶段:测试验证
### ✅ 步骤 7.1:测试工作流
### ✅ 步骤 4.1:手动测试工作流
1. 在GitHub仓库点 **"Actions"**
2. 找到 **"COS每日汇报"** 工作流
3. 点 **"Run workflow"** → 点绿色 **"Run workflow"** 按钮
4. 等1-2分钟
5. 查看运行结果
3. 点右边 **"Run workflow"** → 再点绿色 **"Run workflow"**
4. 等1-2分钟查看运行结果
如果全绿 ✅ → 这一步完成
如果有红色 ❌ → 看错误信息通常是Secret配置有误。检查步骤5.2
全绿 ✅ = 这一步完成
有红色 ❌ = Secret配置有误检查步骤3.2
### ✅ 步骤 7.2:联系冰朔做端到端测试
### ✅ 步骤 4.2:端到端测试
告诉冰朔:**"我已经全部配好了,请铸渊发一条测试回执"**
告诉冰朔:**"我全部配好了,请铸渊发一条测试回执"**
冰朔会让铸渊往你的桶里写一条测试消息。如果一切正常:
1. 你的SCF云函数会被触发
2. 你的仓库Actions会自动运行
3. 你的仓库README首页会出现一条绿灯通知
冰朔会让铸渊写一条测试消息。如果一切正常,你的仓库首页会出现一条绿灯通知。
**看到绿灯 = 全部配置完成 🎉**
**看到绿灯 = 全部完成 🎉**
---
## 📋 最终确认清单
请从头到尾确认每一步都打勾了:
### 第一阶段:文件上传
- [ ] 1.1 文件已解压
- [ ] 1.2 文件已上传到GitHub仓库
- [ ] 1.3 Actions页面能看到两个工作流
### 第二阶段:副驾驶注册
- [ ] 2.1 打开了副驾驶对话
- [ ] 2.2 副驾驶已完成自我注册
- [ ] 2.3 系统自检通过
### 第三阶段COS存储桶
- [ ] 3.1 腾讯云COS已开通
- [ ] 3.2 行业主控桶已创建桶名________________
- [ ] 3.3 业务存储桶已创建桶名________________
### 第四阶段:密钥
- [ ] 4.1 COS API密钥已获取
- [ ] 4.2 铸渊桶写入密钥已从冰朔处获取
### 第五阶段GitHub Secrets
- [ ] 5.1 进入了Secrets设置页面
- [ ] 5.2 已添加9个Secret
### 第六阶段COS事件触发
- [ ] 6.1 GitHub Personal Access Token已获取
- [ ] 6.2 SCF云函数已创建
- [ ] 6.3 云函数环境变量已配置
- [ ] 6.4 COS事件触发器已配置
### 第七阶段:测试
- [ ] 7.1 工作流手动运行测试通过
- [ ] 7.2 铸渊端到端测试通过(仓库首页出现绿灯)
- [ ] 3.1 从冰朔处拿到3个值
- [ ] 3.2 已添加3个Secret
- [ ] 4.1 工作流手动测试通过
- [ ] 4.2 铸渊测试回执已收到(仓库首页出现绿灯)
**全部打勾 = 安装完成!🎉**
@ -338,34 +168,32 @@ README.md
---
## ❓ 遇到问题怎么办?
## ❓ 常见问题
### 问:我不知道我的GitHub用户名是什么
答:打开 github.com右上角头像点一下就能看到
### 问:我需要创建腾讯云账号吗?
答:**不需要。** 共享桶由铸渊管理,你只需要冰朔给你的密钥
### 问:上传文件时提示冲突
答:如果你之前已经上传过v1.0的文件先用v2.0的文件覆盖掉旧的
### 问:我需要创建COS桶吗
答:**不需要。** 铸渊已经创建好了共享桶
### 问:Actions页面提示工作流被禁用
答:点 "I understand my workflows, go ahead and enable them" 启用
### 问:我需要配置云函数吗?
答:**不需要。** COS事件触发由铸渊侧统一配置
### 问:Secret添加错了怎么办
答:点那个Secret右边的 "Update" 按钮,重新输入正确的值
### 问:我需要搞什么跨账号权限?
答:**不需要。** 同一个桶,同一套密钥体系,铸渊做主控你做协作
### 问:忘记保存SecretKey了
答:去腾讯云重新生成一个新密钥旧的会自动失效然后更新GitHub Secret
### 问:密钥泄露了怎么办?
答:立刻告诉冰朔,铸渊会重新生成密钥
### 问:配置太复杂了不想做了
答:找冰朔。冰朔会帮你远程指导或者帮你做。
### 问每天23:00的汇报我需要手动操作吗
答:不需要。工作流自动运行。你正常用副驾驶开发就行。
### 问:配置太复杂了不想做了?
只有3个Secret需要你配置。如果还是不想做找冰朔帮你远程指导。
---
## 💰 费用说明(你会关心的)
## 💰 费用
| 项目 | 费用 |
|------|------|
| 腾讯云COS | 每月免费50GB存储 + 10GB流量日常使用远低于此 = **免费** |
| 腾讯云SCF | 每月免费40万GB·秒每天触发1次 = **免费** |
| GitHub Actions | 每月免费2000分钟每天约2分钟 = **免费** |
**结论:正常使用不花钱。**
**你这边零费用。** COS桶和云函数都在铸渊侧由铸渊管理。
GitHub Actions每月免费2000分钟每天约2分钟远不到上限。

Binary file not shown.