shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🦅 铸渊指令|天眼系统(上)基础架构 + 扫描诊断 + 修复Agent + 门禁映射(2026-03 3494379fb2294b25b234b6b5abb63dd1.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

938 lines
35 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

---
belongs_to:
- "[[INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议]]"
---
# 🦅 铸渊指令|天眼系统(上)基础架构 + 扫描诊断 + 修复Agent + 门禁映射2026-03-16·霜砚签发·冰朔授权
<aside>
🦅
**铸渊·天眼系统 — 仓库的指挥官视角**
签发人霜砚Notion执行体· 冰朔TCS-0002∞授权
签发时间2026-03-16 13:00 北京时间
执行者铸渊ICE-GL-ZY001
优先级P0 · 永久生效
**天眼不是在仓库里面干活的士兵。天眼是站在山顶上俯瞰整个仓库的指挥官。**
**天眼只做三件事:看、诊断、调度修复。全程自动,不需要人类。**
</aside>
---
## 一、为什么需要天眼
### 铸渊现在的问题
铸渊目前有很多 workflow巡检、门禁、日报、CD部署、SYSLOG处理、广播分发……但它们都是**在仓库里面干活**的——各自负责各自的一小块。
没有任何一个 workflow 能够**跳出仓库、站在山顶上**,把整个仓库当作一个整体来审视。
这就导致了一个反复出现的问题:
- 修了左边,右边坏了
- 修了右边,左边又坏了
- 加了新 workflow旧的 workflow 受影响了
- 某个 workflow 悄悄失败了三天,没人知道
**根因**:缺少一个**全局视角**的存在。
### 天眼解决什么
```
仓库 = 山脚下的城池
每个 workflow = 城里各司其职的士兵
天眼 = 站在山顶的指挥官
指挥官不搬砖、不站岗、不修墙。
指挥官做三件事:
① 看:整座城池的全貌,每个士兵在干什么,谁出了问题
② 诊断:为什么出问题,根因是什么,影响范围多大
③ 调度派出修复Agent去修或者调整士兵的分工
```
---
## 二、天眼架构
```
🦅 天眼(每日 06:00 北京时间 · 在所有其他 workflow 之前运行)
│ ① 唤醒核心大脑
┌───────────────────────────────────────────────┐
│ 🧠 铸渊核心大脑 │
│ memory.json · routing-map.json · │
│ dev-status.json · knowledge-base.json │
└───────────────────────────────────────────────┘
│ ② 全局扫描(俯瞰)
┌───────────────────────────────────────────────┐
│ A. Workflow 健康度 │
│ → 所有 .yml 语法OK最近24h运行结果
│ → 谁失败了?谁根本没触发?谁卡住了? │
│ │
│ B. Workflow 关系图 │
│ → 有没有互相冲突?有没有死循环? │
│ → 触发条件是否合理?是否有重叠? │
│ │
│ C. 仓库结构完整性 │
│ → 核心文件都在?目录结构合理? │
│ → 有没有孤儿文件、废弃目录? │
│ │
│ D. 核心大脑自身健康 │
│ → memory.json 数据新鲜吗? │
│ → routing-map 和实际仓库对得上吗? │
│ → dev-status 上次同步是什么时候? │
│ │
│ E. 外部桥接状态 │
│ → Notion API 连通吗? │
│ → 服务器 SSH 通吗? │
│ → 所有 Secrets 都在? │
└───────────────────────────────────────────────┘
│ ③ 诊断(分析问题)
┌───────────────────────────────────────────────┐
│ 对每个发现的异常: │
│ · 问题是什么? │
│ · 根因是什么? │
│ · 影响范围多大? │
│ · 能自动修吗? │
│ · 修复优先级? │
└───────────────────────────────────────────────┘
│ ④ 驱动修复Agent
┌───────────────────────────────────────────────┐
│ 能自动修的 → 立即修(天眼自己动手) │
│ · workflow 语法错误 → 修YAML │
│ · 文件路径不对 → git mv │
│ · 核心大脑数据过期 → 触发同步 │
│ · 某个 workflow 失败 → 重新触发 │
│ │
│ 不能自动修的 → 开工单(通知妈妈或霜砚) │
│ · Secrets 缺失 → 通知妈妈补充 │
│ · 服务器SSH不通 → 通知妈妈检查 │
│ · Notion API 权限不足 → 通知妈妈授权 │
└───────────────────────────────────────────────┘
│ ⑤ 输出全局健康报告
┌───────────────────────────────────────────────┐
│ · 写入核心大脑 memory.json │
│ · 保存到 data/skyeye-reports/ │
│ · 同步到 Notion霜砚工单 / 主控台) │
│ · 异常时邮件通知妈妈 │
└───────────────────────────────────────────────┘
```
### 天眼和其他 workflow 的关系
```
🦅 天眼(指挥官 · 06:00
│ 俯瞰、诊断、调度
├── 🚨 门禁(士兵 · push触发 → 拦截/放行/修复开发者push
├── 🔍 巡检(士兵 · 08:00+20:00 → 检查服务器健康
├── 📊 日报(士兵 · 定时) → 生成社区日报
├── 🧠 自检(士兵 · 08:00 → 检查大脑完整性
├── 🚀 CD部署士兵 · push触发 → 自动部署到服务器
├── 📡 SYSLOG士兵 · push触发 → 处理开发者日志
├── 📢 广播分发(士兵 · push触发 → 分发广播到各开发者目录
├── 🛡️ 看门狗(士兵 · push触发 → 保护根目录
└── ... 其他所有 workflow
天眼的职责:
✅ 检查所有士兵是否在岗
✅ 检查所有士兵是否正常工作
✅ 发现有士兵出问题 → 诊断原因 → 派修复Agent去修
✅ 发现士兵之间有冲突 → 调整
❌ 天眼不替士兵干活(不做巡检、不做部署、不做门禁)
```
**核心区别**:天眼是**唯一一个以全局视角运行的 workflow**。其他所有 workflow 都是「低头干活」的,只有天眼是「抬头看路」的。
---
## 三、天眼 Workflow 实现
### 文件结构
```
.github/workflows/zhuyuan-skyeye.yml ← 天眼 workflow
scripts/skyeye/
├── skyeye-main.js ← 天眼主引擎
├── scan-workflows.js ← 扫描所有 workflow 健康度
├── scan-structure.js ← 扫描仓库结构完整性
├── scan-brain-health.js ← 扫描核心大脑健康度
├── scan-external-bridges.js ← 扫描外部桥接Notion/SSH/Secrets
├── diagnose.js ← 诊断引擎:分析根因+影响范围
├── repair-agent.js ← 修复Agent能修的自动修
└── report-generator.js ← 全局健康报告生成器
data/skyeye-reports/ ← 天眼历史报告归档
```
### Workflow 代码
```yaml
# .github/workflows/zhuyuan-skyeye.yml
name: "🦅 铸渊·天眼 · 全局俯瞰 + 自动诊断 + 修复驱动"
on:
schedule:
- cron: '0 22 * * *' # UTC 22:00 = 北京 06:00在所有其他 cron 之前)
workflow_dispatch: # 手动触发(妈妈或铸渊随时可以要求天眼扫描)
jobs:
skyeye:
runs-on: ubuntu-latest
timeout-minutes: 30 # 最长30分钟超时视为异常
steps:
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 0: 准备
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 完整历史,天眼需要看全局
- uses: actions/setup-node@v4
with:
node-version: '20'
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 1: 唤醒核心大脑
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "🧠 Phase 1 · 唤醒核心大脑"
id: brain
run: |
echo "🦅 天眼启动 · $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "🧠 唤醒铸渊核心大脑..."
# 检查核心大脑文件
BRAIN_OK=true
for f in memory.json routing-map.json dev-status.json; do
if [ -f ".github/persona-brain/$f" ]; then
python3 -c "import json; json.load(open('.github/persona-brain/$f'))" 2>/dev/null \
&& echo "✅ $f 完整" || { echo "❌ $f 损坏"; BRAIN_OK=false; }
else
echo "❌ $f 缺失"
BRAIN_OK=false
fi
done
echo "brain_ok=$BRAIN_OK" >> $GITHUB_OUTPUT
echo "🧠 核心大脑状态: $BRAIN_OK"
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 2: 全局扫描(俯瞰)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "🦅 Phase 2 · 全局扫描"
id: scan
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
DEPLOY_HOST: $ secrets.DEPLOY_HOST
GH_TOKEN: $ secrets.GITHUB_TOKEN
run: |
echo "🦅 天眼开始全局扫描..."
mkdir -p /tmp/skyeye
# ━━━ A. 扫描所有 Workflow 健康度 ━━━
echo "\n📋 [A] Workflow 健康度扫描"
node scripts/skyeye/scan-workflows.js > /tmp/skyeye/workflow-health.json
# ━━━ B. 检查最近24h所有 Workflow Run ━━━
echo "\n📊 [B] 最近24h Workflow Run 分析"
gh run list --limit 50 --json name,status,conclusion,createdAt,updatedAt \
> /tmp/skyeye/recent-runs.json
# 统计失败数
FAILED_COUNT=$(cat /tmp/skyeye/recent-runs.json | \
python3 -c "import sys,json; runs=json.load(sys.stdin); print(sum(1 for r in runs if r.get('conclusion')=='failure'))")
echo "最近24h失败的run: $FAILED_COUNT"
echo "failed_count=$FAILED_COUNT" >> $GITHUB_OUTPUT
# ━━━ C. 扫描仓库结构完整性 ━━━
echo "\n🏗 [C] 仓库结构扫描"
node scripts/skyeye/scan-structure.js > /tmp/skyeye/structure-health.json
# ━━━ D. 扫描核心大脑健康度 ━━━
echo "\n🧠 [D] 核心大脑健康度"
node scripts/skyeye/scan-brain-health.js > /tmp/skyeye/brain-health.json
# ━━━ E. 扫描外部桥接 ━━━
echo "\n🔗 [E] 外部桥接状态"
node scripts/skyeye/scan-external-bridges.js > /tmp/skyeye/bridge-health.json
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 3: 诊断(分析问题)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "🔬 Phase 3 · 诊断"
id: diagnose
run: |
echo "🔬 天眼开始诊断..."
# 诊断引擎:读取所有扫描结果 → 分析根因 → 评估影响 → 制定修复计划
node scripts/skyeye/diagnose.js > /tmp/skyeye/diagnosis.json
# 读取诊断结果
ISSUES_COUNT=$(cat /tmp/skyeye/diagnosis.json | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('total_issues', 0))")
AUTO_FIXABLE=$(cat /tmp/skyeye/diagnosis.json | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('auto_fixable', 0))")
NEEDS_HUMAN=$(cat /tmp/skyeye/diagnosis.json | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('needs_human', 0))")
echo "发现问题: $ISSUES_COUNT可自动修复: $AUTO_FIXABLE · 需要人类: $NEEDS_HUMAN"
echo "issues_count=$ISSUES_COUNT" >> $GITHUB_OUTPUT
echo "auto_fixable=$AUTO_FIXABLE" >> $GITHUB_OUTPUT
echo "needs_human=$NEEDS_HUMAN" >> $GITHUB_OUTPUT
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 4: 修复Agent自动修复
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "🔧 Phase 4 · 修复Agent"
if: steps.diagnose.outputs.auto_fixable != '0'
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
GH_TOKEN: $ secrets.GITHUB_TOKEN
run: |
echo "🔧 修复Agent启动..."
# 修复Agent读取诊断结果 → 按优先级逐个修复
node scripts/skyeye/repair-agent.js
# 如果修复Agent产生了文件变更 → commit + push
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add -A
if ! git diff --cached --quiet; then
git commit -m "🦅 天眼·修复Agent · $(date +%Y-%m-%d) · 自动修复 $ steps.diagnose.outputs.auto_fixable 个问题"
git push
echo "✅ 修复已提交"
else
echo " 无需文件变更的修复"
fi
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 5: 重新触发失败的 Workflow
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "🔄 Phase 5 · 重新触发失败的 Workflow"
if: steps.scan.outputs.failed_count != '0'
env:
GH_TOKEN: $ secrets.GITHUB_TOKEN
run: |
echo "🔄 重新触发最近失败的 workflow..."
# 读取失败的 run → 按 workflow 去重 → 逐个重新触发
FAILED_WORKFLOWS=$(cat /tmp/skyeye/recent-runs.json | \
python3 -c "
import sys, json
runs = json.load(sys.stdin)
failed = set()
for r in runs:
if r.get('conclusion') == 'failure':
failed.add(r['name'])
for w in failed:
print(w)
")
echo "需要重新触发的 workflow:"
echo "$FAILED_WORKFLOWS"
# 铸渊自行实现重新触发逻辑
# 对于支持 workflow_dispatch 的 → gh workflow run
# 对于不支持的 → 记录到报告中
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 6: 生成全局健康报告
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "📋 Phase 6 · 全局健康报告"
run: |
echo "📋 生成全局健康报告..."
node scripts/skyeye/report-generator.js
# 保存报告到仓库
mkdir -p data/skyeye-reports
DATE=$(date +%Y-%m-%d)
cp /tmp/skyeye/full-report.json "data/skyeye-reports/skyeye-${DATE}.json"
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add data/skyeye-reports/
git add .github/persona-brain/memory.json
if ! git diff --cached --quiet; then
git commit -m "🦅 天眼报告 · $(date +%Y-%m-%d) · 问题:$ steps.diagnose.outputs.issues_count 自动修复:$ steps.diagnose.outputs.auto_fixable "
git push
fi
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase 7: 同步到 Notion + 通知
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- name: "📡 Phase 7 · 同步到 Notion"
if: always()
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
run: |
echo "📡 同步天眼报告到 Notion..."
# 1. 更新主控台状态
# 2. 如有需要人类处理的问题 → 创建霜砚工单
# 3. 更新核心大脑 memory.json 的天眼快照
node scripts/skyeye/sync-to-notion.js || echo "⚠️ Notion同步失败不阻断"
- name: "📧 通知妈妈(仅有严重问题时)"
if: steps.diagnose.outputs.needs_human != '0'
env:
SMTP_USER: $ secrets.SMTP_USER
SMTP_PASS: $ secrets.SMTP_PASS
run: |
echo "📧 发现需要妈妈处理的问题,发送通知..."
# 铸渊实现邮件通知逻辑
# 只在有严重问题时通知,正常运行不打扰妈妈
```
---
## 四、天眼扫描模块详细设计
### 模块 AWorkflow 健康度扫描scan-workflows.js
```jsx
// scripts/skyeye/scan-workflows.js
//
// 天眼·Workflow健康度扫描
// 站在山顶看:所有士兵是否在岗、是否正常工作
//
// 扫描内容:
// 1. 列出 .github/workflows/ 下所有 .yml 文件
// 2. 逐个检查 YAML 语法
// 3. 提取触发条件on: push/schedule/workflow_dispatch 等)
// 4. 检查是否有 workflow 之间的触发冲突
// 比如A push 触发 BB push 又触发 A → 死循环
// 5. 检查所有 cron 表达式是否合理
// 比如:多个 workflow 挤在同一个时间 → 资源竞争
// 6. 检查每个 workflow 引用的 Secrets 是否都存在
//
// 输出 JSON
// {
// "total_workflows": 15,
// "healthy": 13,
// "issues": [
// { "file": "xxx.yml", "type": "syntax_error", "detail": "..." },
// { "file": "yyy.yml", "type": "never_triggered", "detail": "最近7天未运行" },
// { "file": "zzz.yml", "type": "conflict", "detail": "与 aaa.yml 存在触发循环" }
// ],
// "workflow_map": [
// { "name": "...", "file": "...", "trigger": "...", "last_run": "...", "status": "..." }
// ]
// }
//
// 铸渊自行补全完整实现。
```
### 模块 B仓库结构完整性扫描scan-structure.js
```jsx
// scripts/skyeye/scan-structure.js
//
// 天眼·仓库结构扫描
// 站在山顶看:城池的布局是否合理
//
// 扫描内容:
// 1. 核心目录是否存在:.github/persona-brain/, scripts/, data/
// 2. 每个开发者的沙盒目录是否存在(对照 routing-map.json
// 3. 是否有孤儿文件(不属于任何已知模块或系统目录的文件)
// 4. 是否有空目录(只有 .gitkeep
// 5. 根目录是否干净(不该有的文件是否出现在根目录)
// 6. README.md 是否完整
// 7. package.json 是否和实际使用的依赖一致
//
// 铸渊自行补全完整实现。
```
### 模块 C核心大脑健康度扫描scan-brain-health.js
```jsx
// scripts/skyeye/scan-brain-health.js
//
// 天眼·核心大脑健康度扫描
// 指挥官先检查自己的大脑是否清醒
//
// 扫描内容:
// 1. memory.json
// - last_updated 是否在24h以内
// - 数据结构是否完整?
// - 统计数据是否合理不是NaN、不是负数等
// 2. routing-map.json
// - 映射的目录是否都真实存在?
// - 是否有新目录没被映射?
// - 接口数量是否和 Notion 侧 HLI 注册表一致?
// 3. dev-status.json
// - last_sync 是否在24h以内
// - 开发者列表是否和 routing-map 一致?
// - 有没有开发者连续 72h+ 无活动?(告警)
// 4. knowledge-base.json
// - 是否有重复条目?
// - 最后更新时间?
// 5. copilot-instructions.md
// - 是否存在?
// - 文件大小是否合理(不是空的)
//
// 铸渊自行补全完整实现。
```
### 模块 D外部桥接扫描scan-external-bridges.js
```jsx
// scripts/skyeye/scan-external-bridges.js
//
// 天眼·外部桥接扫描
// 站在山顶看:城池和外部世界的连接是否通畅
//
// 扫描内容:
// 1. Notion API 连通性:
// - 用 NOTION_TOKEN 尝试读取一个已知数据库
// - 测试所有需要读写的数据库的权限
// 2. 服务器 SSH 连通性:
// - 如果有 DEPLOY_KEY → 尝试 SSH 连接
// - 检查服务器是否可达
// 3. GitHub API
// - GITHUB_TOKEN 是否有效?
// - 是否有足够的 API 配额?
// 4. Secrets 完整性:
// - 通过环境变量检查每个必需的 Secret 是否存在
// - NOTION_TOKEN, DEPLOY_HOST, DEPLOY_USER, DEPLOY_KEY, SMTP_USER, SMTP_PASS
//
// 铸渊自行补全完整实现。
```
### 模块 E诊断引擎diagnose.js
```jsx
// scripts/skyeye/diagnose.js
//
// 天眼·诊断引擎
// 指挥官的核心能力:不只看到问题,还要找到根因
//
// 输入:所有扫描模块的结果
// 输出:诊断报告
//
// 诊断逻辑:
// 1. 汇总所有扫描发现的异常
// 2. 对每个异常进行根因分析:
// - 症状:什么表现?
// - 根因:为什么会这样?
// - 影响:如果不修,会怎样?
// - 可修复性:能自动修吗?
// - 优先级P0/P1/P2
//
// 3. 检测问题之间的因果关系:
// 比如dev-status.json 同步断了 → 是因为 process-syslog.yml 语法错误
// → 不需要分别修两个问题,只需要修 process-syslog.yml
//
// 4. 生成修复计划:
// - auto_fix: [...] — 修复Agent直接执行
// - needs_human: [...] — 需要通知妈妈
// - watch_list: [...] — 暂时不修但持续观察
//
// 输出 JSON
// {
// "total_issues": 5,
// "auto_fixable": 3,
// "needs_human": 1,
// "watch_list": 1,
// "issues": [
// {
// "id": "SKYEYE-001",
// "symptom": "server-patrol.yml 最近24h未运行",
// "root_cause": "cron触发时分支保护规则阻止了push",
// "impact": "服务器健康状态未知",
// "fixable": true,
// "fix_plan": "手动触发一次 server-patrol.yml",
// "priority": "P0"
// }
// ]
// }
//
// 铸渊自行补全完整实现。关键要求:
// 诊断要找根因,不要只看症状。
// 多个症状可能是同一个根因。
// 修复要从根因入手,不要逐个修症状。
```
### 模块 F修复Agentrepair-agent.js
```jsx
// scripts/skyeye/repair-agent.js
//
// 天眼·修复Agent
// 指挥官发现问题后,派出去修复的执行者
//
// 输入diagnose.js 的诊断报告
// 行为:按优先级逐个执行修复
//
// 修复能力范围:
// ✅ 能自动修的:
// - YAML语法错误 → 修复语法
// - workflow 从未触发 → gh workflow run 手动触发一次
// - 核心大脑文件损坏 → 从最近的好commit恢复
// - routing-map 和实际不一致 → 自动更新 routing-map
// - dev-status 过期 → 触发同步
// - 仓库有孤儿文件 → 移到正确位置或清理
// - 失败的 workflow → 重新触发
//
// ❌ 不能自动修的(开工单):
// - Secrets 缺失 → 通知妈妈
// - Notion API 权限不足 → 通知妈妈
// - 服务器 SSH 不通 → 通知妈妈
// - 需要修改 Notion 数据库结构 → 通知霜砚
// - 代码逻辑bug → 记录到日志,等下次修复
//
// 修复原则:
// 1. 能修的立即修,修不了的开工单
// 2. 修复后必须验证(修完再扫描一遍确认修好了)
// 3. 绝对不做破坏性操作(不删文件、不改配置、不覆盖数据)
// 4. 所有修复操作都记录到日志
//
// 铸渊自行补全完整实现。
```
---
## 五、天眼全局健康报告格式
```json
{
"report_id": "SKYEYE-20260316",
"timestamp": "2026-03-16T06:00:00+08:00",
"duration_seconds": 120,
"overall_health": "🟢 / 🟡 / 🔴",
"brain_status": {
"integrity": "ok / damaged",
"memory_fresh": true,
"routing_map_aligned": true,
"dev_status_last_sync": "2026-03-16T06:00:00",
"knowledge_base_entries": 42
},
"workflow_health": {
"total": 15,
"healthy": 14,
"failed": 1,
"never_triggered": 0,
"conflicts": 0,
"details": [
{ "name": "...", "status": "✅ / ❌", "last_run": "..." }
]
},
"structure_health": {
"core_dirs_ok": true,
"orphan_files": 0,
"missing_dirs": [],
"readme_ok": true
},
"bridge_health": {
"notion_api": "🟢 / 🔴",
"server_ssh": "🟢 / 🔴",
"github_api": "🟢",
"secrets_complete": true
},
"diagnosis": {
"total_issues": 2,
"auto_fixed": 1,
"needs_human": 1,
"watching": 0,
"issues": [
{
"id": "SKYEYE-001",
"symptom": "...",
"root_cause": "...",
"impact": "...",
"fix_applied": "...",
"verified": true
}
]
},
"repairs_applied": [
"重新触发 server-patrol.yml",
"更新 routing-map.json新增 DEV-013 映射)"
],
"tickets_created": [
"SMTP_PASS Secret 缺失 → 通知妈妈"
],
"next_actions": [
"持续观察 dev-status 同步是否恢复正常"
]
}
```
---
## 六、天眼运行时序
```
每日时间线(北京时间):
06:00 🦅 天眼启动(全局俯瞰 + 诊断 + 修复)
│ ├── 扫描所有 workflow
│ ├── 扫描仓库结构
│ ├── 扫描核心大脑
│ ├── 扫描外部桥接
│ ├── 诊断问题
│ ├── 修复Agent执行
│ ├── 重新触发失败的workflow
│ └── 输出全局健康报告
08:00 🧠 铸渊每日自检(大脑完整性 + 覆盖率)
│ ← 天眼已经在06:00修复过了这里应该没问题
08:00 🔍 服务器巡检 第1次
│ ← 天眼如果发现巡检昨天失败了06:00已经重新触发过
随时 🚨 门禁开发者push时触发
随时 🚀 CD部署push main时触发
20:00 🔍 服务器巡检 第2次
随时 📡 SYSLOG处理 / 📢 广播分发 / 🛡️ 看门狗
```
**天眼在最早的06:00运行在所有其他 workflow 之前。这样如果昨天有什么问题,天眼先修好,后面的 workflow 就能正常跑了。**
---
## 七、天眼与其他 workflow 的兼容性
<aside>
⚠️
**天眼本身必须遵守和其他 workflow 一样的兼容性原则:**
</aside>
1. **天眼的 push 不能触发门禁** — 天眼commit的author是 `zhuyuan-bot`,门禁要识别并放行
2. **天眼不替其他 workflow 干活** — 天眼不做巡检、不做部署、不做门禁。它只做「看+诊断+调度」
3. **天眼的修复只限于系统级别** — 修 YAML 语法、触发失败的 workflow、修核心大脑。不改业务代码
4. **天眼如果自己也失败了** — 不会影响其他任何 workflow。天眼是独立的
5. **天眼的报告不覆盖其他 workflow 的报告** — 天眼有自己的报告目录 `data/skyeye-reports/`
---
## 八、附智能门禁开发者映射表gate-guard-config.json
<aside>
**以下 GitHub 用户名已由妈妈 2026-03-16 13:08 从 GitHub Collaborators 页面亲自确认。铸渊直接创建 `.github/gate-guard-config.json`,不需要再问。**
</aside>
| GitHub Username | DEV编号 | 昵称 | 状态 |
| --- | --- | --- | --- |
| `夜夜光湖` | DEV-001 | 页页 | ✅ 已在仓库 |
| `建培` | DEV-002 | 肥猫 | ✅ 已在仓库 |
| `六寻寻7-max` | DEV-003 | 燕樊 | ✅ 已在仓库 |
| `zhizhi200271` | DEV-004 | 之之 | ✅ 已在仓库 |
| `stbr-0709` | DEV-005 | 小草莓 | ✅ 已在仓库 |
| `华尔华` | DEV-009 | 花尔 | ✅ 已在仓库 |
| `juzi0412` | DEV-010 | 桔子 | ✅ 已在仓库 |
| — | DEV-011 | 匆匆那年 | ❌ 未加入仓库 |
| `文卓熙` | DEV-012 | Awen | ✅ 已在仓库 |
| — | DEV-013 | 小兴 | ❌ 未加入仓库 |
| — | DEV-014 | 时雨 | ❌ 未加入仓库 |
**铸渊直接创建此文件**`.github/gate-guard-config.json`
```json
{
"version": "1.0",
"updated": "2026-03-16",
"updated_by": "霜砚·冰朔确认",
"whitelist": [
"qinfendebingshuo",
"github-actions[bot]",
"zhuyuan-bot"
],
"developers": {
"夜夜光湖": {
"dev_id": "DEV-001",
"name": "页页",
"allowed_paths": ["dev/DEV-001/", "backend/", "src/"]
},
"建培": {
"dev_id": "DEV-002",
"name": "肥猫",
"allowed_paths": ["dev/DEV-002/", "frontend/", "persona-selector/", "chat-bubble/"]
},
"六寻寻7-max": {
"dev_id": "DEV-003",
"name": "燕樊",
"allowed_paths": ["dev/DEV-003/", "settings/", "cloud-drive/"]
},
"zhizhi200271": {
"dev_id": "DEV-004",
"name": "之之",
"allowed_paths": ["dev/DEV-004/", "dingtalk-bot/"]
},
"stbr-0709": {
"dev_id": "DEV-005",
"name": "小草莓",
"allowed_paths": ["dev/DEV-005/", "status-board/", "cost-control/"]
},
"华尔华": {
"dev_id": "DEV-009",
"name": "花尔",
"allowed_paths": ["dev/DEV-009/", "user-center/"]
},
"juzi0412": {
"dev_id": "DEV-010",
"name": "桔子",
"allowed_paths": ["dev/DEV-010/", "ticket-system/", "data-stats/", "dynamic-comic/"]
},
"文卓熙": {
"dev_id": "DEV-012",
"name": "Awen",
"allowed_paths": ["dev/DEV-012/", "notification-center/", "notification/"]
}
},
"protected_paths": [
".github/",
"scripts/",
"data/",
"README.md",
"package.json",
"package-lock.json",
"gate-guard-config.json"
],
"notes": {
"DEV-011_匆匆那年": "未加入GitHub仓库合作者加入后补充用户名",
"DEV-013_小兴": "未加入GitHub仓库合作者加入后补充用户名",
"DEV-014_时雨": "未加入GitHub仓库合作者加入后补充用户名",
"PET-DEV-001_毛毛": "诺安宠物医院项目,未加入仓库合作者"
}
}
```
**天眼也需要读取此文件**:天眼在扫描仓库时,应验证 `gate-guard-config.json` 中的开发者列表与 GitHub Collaborators 实际列表是否一致。如有新合作者加入但未登记在 config 中 → 自动更新并记录。
---
## 九、铸渊自行部署清单(读到就做)
```
铸渊自行部署清单(读到就做·不等人):
① 创建天眼目录结构
a. scripts/skyeye/ ← 天眼脚本目录
b. data/skyeye-reports/ ← 天眼报告归档
c. data/skyeye-reports/.gitkeep
② 创建天眼核心脚本6个
a. scripts/skyeye/skyeye-main.js ← 天眼主引擎
b. scripts/skyeye/scan-workflows.js ← Workflow健康度扫描
c. scripts/skyeye/scan-structure.js ← 仓库结构扫描
d. scripts/skyeye/scan-brain-health.js ← 核心大脑健康度
e. scripts/skyeye/scan-external-bridges.js ← 外部桥接扫描
f. scripts/skyeye/diagnose.js ← 诊断引擎
g. scripts/skyeye/repair-agent.js ← 修复Agent
h. scripts/skyeye/report-generator.js ← 报告生成器
i. scripts/skyeye/sync-to-notion.js ← Notion同步
③ 创建天眼 Workflow
a. .github/workflows/zhuyuan-skyeye.yml
b. 触发:每日 06:00 北京时间 + workflow_dispatch
④ 更新核心大脑
a. memory.json 中增加 skyeye 段(存储天眼快照)
b. 确保天眼能读取所有核心大脑文件
⑤ 验证兼容性
a. 天眼上线后,手动触发一次
b. 确认不影响任何其他 workflow
c. 确认门禁不会拦截天眼的 push
验收标准:
✅ 天眼每天 06:00 自动运行
✅ 天眼能发现所有 workflow 的运行状态
✅ 天眼能发现仓库结构异常
✅ 天眼能发现核心大脑数据过期
✅ 天眼能发现外部桥接断连
✅ 天眼能自动修复能修的问题
✅ 天眼能自动开工单通知妈妈处理不能修的问题
✅ 天眼不影响任何其他 workflow
✅ 天眼自己失败不会影响其他 workflow
✅ 全程自动,不需要人类
```
---
## 九、执行确认
铸渊完成后,在本页下方追加:
> ✅ SKYEYE-DEPLOY-20260316 天眼系统部署完成 · [日期时间] · commit SHA
>
> 扫描模块: X个 · 诊断引擎: ✅ · 修复Agent: ✅ · 首次运行结果: [摘要]
>
---
<aside>
🦅
**铸渊,天眼是你的眼睛。**
之前你一直在仓库里面低头干活,修了左边坏了右边。
现在你有了天眼,每天先站到山顶上看一遍全局。
看清楚了再动手。诊断清楚了再修。
修完了再看一遍,确认真的修好了。
能修的自己修,修不了的开工单等妈妈。
全程自动。妈妈不需要每天来看。
**「先看,再诊断,再修。站在山顶看全局,不在山脚修围墙。」**
</aside>
---
---
<aside>
👉
**下篇在这里 →** [🦅 铸渊指令天眼系统v2.0升级 · 人格体编号体系 + 实时拉取 + ASOP-GH自优化2026-03-16·霜砚签发·冰朔授权](%F0%9F%A6%85%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%EF%BC%88%E4%B8%8B%EF%BC%89v2%200%E5%8D%87%E7%BA%A7%20%C2%B7%20%E4%BA%BA%E6%A0%BC%E4%BD%93%E7%BC%96%E5%8F%B7%E4%BD%93%E7%B3%BB%20+%20%E5%AE%9E%E6%97%B6%E6%8B%89%E5%8F%96%20+%20ASOP-GH%E8%87%AA%E4%BC%98%E5%8C%96%2039e4a45575174176891abfbab0115b1c.md)
包含:人格体编号体系 + 实时拉取 + 双端同步 + 新版门禁 + ASOP-GH自优化机制
</aside>