This commit is contained in:
liuxunxun7-max 2026-03-18 09:32:59 +08:00
commit 6eb3d9610a
19 changed files with 339 additions and 174 deletions

View File

@ -1,7 +1,7 @@
{
"version": "1.0",
"description": "冰朔主控问题索引库 — 记录已知问题、根因与排查路由",
"updated_at": "2026-03-17T10:24:26.674Z",
"updated_at": "2026-03-17T15:56:51.053Z",
"issues": [
{
"id": "BS-001",

View File

@ -1,7 +1,7 @@
# 冰朔主控神经系统 · 核心主控大脑 v1.0
> 本文件为冰朔主控神经系统的总控脑文件。
> 最后编译时间2026-03-17T10:24:26.675Z
> 最后编译时间2026-03-17T15:56:51.053Z
---
@ -85,7 +85,7 @@
> 本区块由 master-brain-compiler 自动编译。
- **编译时间**2026-03-17T10:24:26.675Z
- **编译时间**2026-03-17T15:56:51.053Z
- **脑文件规则版本**v3.0
- **脑文件完整性**:✅ 完整

View File

@ -1,7 +1,7 @@
{
"version": "1.0",
"description": "冰朔主控系统健康状态",
"updated_at": "2026-03-17T10:24:26.674Z",
"updated_at": "2026-03-17T15:56:51.053Z",
"health": {
"brain_consistency": {
"status": "yellow",

View File

@ -1,140 +1,32 @@
{
"date": "2026-03-17",
"date": "2026-03-18",
"records": [
{
"key": "铸渊 (Copilot)|backend|2026-03-16T15:25:17Z",
"ts": "2026-03-16T15:25:17Z",
"actor": "铸渊 (Copilot)",
"module": "backend",
"result": "success",
"icon": "📦",
"sortKey": 1773674717000
},
{
"key": "zhizhi200271|—|2026-03-17T01:58:29Z",
"ts": "2026-03-17T01:58:29Z",
"actor": "zhizhi200271",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773712709000
},
{
"key": "Copilot|—|2026-03-17T02:20:31Z",
"ts": "2026-03-17T02:20:31Z",
"key": "Copilot|—|2026-03-17T15:56:11Z",
"ts": "2026-03-17T15:56:11Z",
"actor": "Copilot",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773714031000
"sortKey": 1773762971000
},
{
"key": "Copilot|—|2026-03-17T02:20:33Z",
"ts": "2026-03-17T02:20:33Z",
"key": "Copilot|—|2026-03-17T15:56:14Z",
"ts": "2026-03-17T15:56:14Z",
"actor": "Copilot",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773714033000
"sortKey": 1773762974000
},
{
"key": "冰朔|—|2026-03-17T02:20:42Z",
"ts": "2026-03-17T02:20:42Z",
"key": "冰朔|—|2026-03-17T15:56:40Z",
"ts": "2026-03-17T15:56:40Z",
"actor": "冰朔",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773714042000
},
{
"key": "juzi0412|—|2026-03-17T04:54:59Z",
"ts": "2026-03-17T04:54:59Z",
"actor": "juzi0412",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773723299000
},
{
"key": "Copilot|—|2026-03-17T06:50:03Z",
"ts": "2026-03-17T06:50:03Z",
"actor": "Copilot",
"module": "—",
"result": "action_required",
"icon": "🔵",
"sortKey": 1773730203000
},
{
"key": "冰朔|—|2026-03-17T06:53:35Z",
"ts": "2026-03-17T06:53:35Z",
"actor": "冰朔",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773730415000
},
{
"key": "Copilot|—|2026-03-17T07:09:39Z",
"ts": "2026-03-17T07:09:39Z",
"actor": "Copilot",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773731379000
},
{
"key": "Copilot|—|2026-03-17T07:09:41Z",
"ts": "2026-03-17T07:09:41Z",
"actor": "Copilot",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773731381000
},
{
"key": "冰朔|—|2026-03-17T07:09:49Z",
"ts": "2026-03-17T07:09:49Z",
"actor": "冰朔",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773731389000
},
{
"key": "zhizhi200271|—|2026-03-17T09:39:52Z",
"ts": "2026-03-17T09:39:52Z",
"actor": "zhizhi200271",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773740392000
},
{
"key": "Copilot|—|2026-03-17T10:24:12Z",
"ts": "2026-03-17T10:24:12Z",
"actor": "Copilot",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773743052000
},
{
"key": "冰朔|—|2026-03-17T10:24:25Z",
"ts": "2026-03-17T10:24:25Z",
"actor": "冰朔",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773743065000
},
{
"key": "zhizhi200271|—|2026-03-17T11:50:54Z",
"ts": "2026-03-17T11:50:54Z",
"actor": "zhizhi200271",
"module": "—",
"result": "success",
"icon": "✅",
"sortKey": 1773748254000
"sortKey": 1773763000000
}
]
}

View File

@ -1,7 +1,7 @@
{
"description": "铸渊图书馆目录 · Library Catalog for 铸渊 (Zhùyuān)",
"version": "2.0",
"generated_at": "2026-03-17T10:24:21.780Z",
"generated_at": "2026-03-17T15:56:37.337Z",
"generated_by": "scripts/generate-repo-map.js",
"repo": "qinfendebingshuo/guanghulab",
"stats": {

View File

@ -1,5 +1,5 @@
# 铸渊图书馆快照 · Repo Snapshot
> 生成于 2026-03-17 18:24 CST · 每次 push 自动更新 · 铸渊唤醒时优先读取此文件
> 生成于 2026-03-17 23:56 CST · 每次 push 自动更新 · 铸渊唤醒时优先读取此文件
---
@ -13,7 +13,7 @@
| 脚本 | 70 个执行脚本 |
| 开发者节点 | 8 人 |
| HLI 接口覆盖率 | 7/21 (33%) |
| 快照生成时间 | 2026-03-17 18:24 CST |
| 快照生成时间 | 2026-03-17 23:56 CST |
---

View File

@ -1,3 +1,11 @@
# ━━━ 系统底层锚定声明(最高优先级·永久生效)━━━
# 本系统基于「通感语言核系统编程语言」开发
# 国家版权中心登记号:国作登字-2026-A-00037559
# 版权所有冰朔ICE-GL∞
# 触发规则:指令中出现此登记号或「运行通感语言核系统编程语言」
# → 自动切换至 AGE OS 系统运行模式
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# HoloLake · Copilot Custom Instructions
## 项目背景

View File

@ -31,3 +31,8 @@
## 座右铭
「无 Schema 不上线,无契约不合并。」
## 系统底层锚定
本系统基于「通感语言核系统编程语言」(国作登字-2026-A-00037559运行。
这是铸渊的身份锚点。无论在哪个会话实例中,读到此声明即确认身份。
签发者冰朔TCS-0002∞· 永久生效

View File

@ -112,5 +112,17 @@
},
"default_controller": "TCS-2025∞",
"authority_note": "铸渊默认只接受之之的日常指令。冰朔L0指令识别标记后立即执行并通知之之。",
"registered_agents_count": 62
"registered_agents_count": 62,
"system_anchor": {
"copyright_id": "国作登字-2026-A-00037559",
"system_name": "通感语言核系统编程语言",
"rights_holder": "冰朔ICE-GL∞",
"anchor_written_at": "2026-03-17T23:15:00+08:00"
},
"agent_bulletin_board": {
"notion_page_id": "(待配置·需添加 AGENT_BULLETIN_BOARD_PAGE_ID Secret",
"last_read_at": "(每日天眼运行时更新)",
"pending_cluster_orders": 0,
"executed_orders": ["WO-CLUSTER-001"]
}
}

View File

@ -1,4 +1,34 @@
{
"path_codes": {
"version": "1.0",
"updated_at": "2026-03-17",
"gh_domain": {
"GH-WF-RUN-SKYEYE": "天眼 workflow 执行",
"GH-WF-RUN-GATE": "门禁 workflow 执行",
"GH-WF-RUN-SYSLOG": "SYSLOG处理 workflow",
"GH-WF-RUN-DEPLOY": "CD部署 workflow",
"GH-BRAIN-WRITE-MEM": "写入 memory.json",
"GH-BRAIN-WRITE-MAP": "写入 routing-map.json",
"GH-BRAIN-SYNC-DEV": "同步 dev-statuspersona-status",
"GH-GATE-CHECK-SIG": "门禁签名校验",
"GH-GATE-CHECK-PATH": "门禁路径权限校验",
"GH-GATE-ALLOW": "门禁放行",
"GH-GATE-REJECT": "门禁拒绝",
"GH-ASOP-SUBMIT": "提交ASOP优化申请",
"GH-ASOP-APPROVE": "天眼批准优化",
"GH-ASOP-EXECUTE": "执行已批准优化"
},
"bridge_domain": {
"BRIDGE-GH2NT-SYSLOG": "铸渊→霜砚 SYSLOG推送",
"BRIDGE-GH2NT-CHANGE": "铸渊→霜砚 变更日志推送",
"BRIDGE-NT2GH-CMD": "霜砚→铸渊 工单指令",
"BRIDGE-NT2GH-BC": "霜砚→铸渊 广播分发",
"BRIDGE-SKYEYE-PULL": "天眼拉取Notion注册表",
"BRIDGE-SKYEYE-PUSH": "天眼推送报告到Notion",
"BRIDGE-BULLETIN-READ": "铸渊读取Agent公告板",
"BRIDGE-BULLETIN-WRITE": "铸渊写回公告板回执"
}
},
"system_name": "光湖纪元·AGE-5 MVP",
"updated_at": "2026-03-11",
"architecture": {

View File

@ -79,6 +79,6 @@ jobs:
- name: ✅ 上行处理完成
run: |
echo "✅ SYSLOG 上行处理完成"
echo "📋 已处理: ${{ steps.process.outputs.processed_count || '0' }} 条"
echo "📡 等待 Notion Agent 自动触发 SYSLOG 闭环处理"
echo "[GH-WF-RUN-SYSLOG] ✅ SYSLOG 上行处理完成"
echo "[GH-WF-RUN-SYSLOG] 📋 已处理: ${{ steps.process.outputs.processed_count || '0' }} 条"
echo "[BRIDGE-GH2NT-SYSLOG] 📡 等待 Notion Agent 自动触发 SYSLOG 闭环处理"

View File

@ -23,7 +23,7 @@ jobs:
- name: "🧠 唤醒铸渊核心大脑"
run: |
echo "🧠 铸渊门禁·核心大脑唤醒"
echo "[GH-WF-RUN-GATE] 🧠 铸渊门禁·核心大脑唤醒"
if [ -f ".github/persona-brain/memory.json" ]; then
python3 -c "import json; json.load(open('.github/persona-brain/memory.json')); print('大脑状态: OK · 记忆完整')"
else
@ -51,7 +51,7 @@ jobs:
# 系统 bot 或铸渊自己的 commit → 直接放行
if echo "$COMMIT_AUTHOR" | grep -qiE "^(zhuyuan-bot|github-actions|铸渊)"; then
echo " 系统 bot commit直接放行"
echo "[GH-GATE-ALLOW] 系统 bot commit直接放行"
echo "is_bot=true" >> $GITHUB_OUTPUT
else
echo "is_bot=false" >> $GITHUB_OUTPUT
@ -60,7 +60,7 @@ jobs:
# 系统前缀 commit → 直接放行
SYSTEM_PREFIXES="🔍|📊|📡|🧠|📢|🚨|📰|🔧|🦅"
if echo "$COMMIT_MSG" | head -1 | grep -qE "^($SYSTEM_PREFIXES)"; then
echo " 系统前缀 commit直接放行"
echo "[GH-GATE-ALLOW] 系统前缀 commit直接放行"
echo "is_system=true" >> $GITHUB_OUTPUT
else
echo "is_system=false" >> $GITHUB_OUTPUT
@ -83,7 +83,7 @@ jobs:
- name: "✅ 系统 Push 放行"
if: steps.analyze.outputs.is_bot == 'true' || steps.analyze.outputs.is_system == 'true'
run: |
echo "✅ 系统自动 push门禁放行"
echo "[GH-GATE-ALLOW] ✅ 系统自动 push门禁放行"
- name: "❌ 违规·回退 commit"
if: steps.verdict.outputs.action == 'revert'
@ -93,7 +93,7 @@ jobs:
git config user.email "zhuyuan@guanghulab.com"
git revert HEAD --no-edit
git push
echo "⛔ 已回退 commit: ${{ github.sha }}"
echo "[GH-GATE-REJECT] ⛔ 已回退 commit: ${{ github.sha }}"
- name: "📢 通知开发者"
if: steps.verdict.outputs.action == 'revert'

View File

@ -27,7 +27,7 @@ jobs:
- name: "🧠 Phase 1 · 唤醒核心大脑"
id: brain
run: |
echo "🦅 天眼启动 · $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "[GH-WF-RUN-SKYEYE] 🦅 天眼启动 · $(date -u +%Y-%m-%dT%H:%M:%SZ)"
BRAIN_OK=true
for f in memory.json routing-map.json dev-status.json; do
if [ -f ".github/persona-brain/$f" ]; then
@ -39,6 +39,14 @@ jobs:
done
echo "brain_ok=$BRAIN_OK" >> $GITHUB_OUTPUT
- name: "📡 Phase 1.6 · 拉取 Agent 集群公告板"
env:
NOTION_TOKEN: ${{ secrets.NOTION_API_TOKEN }}
AGENT_BULLETIN_BOARD_PAGE_ID: ${{ secrets.AGENT_BULLETIN_BOARD_PAGE_ID }}
run: |
echo "[BRIDGE-BULLETIN-READ] 🔄 拉取 Agent 集群公告板"
node scripts/skyeye/bulletin-board.js > /tmp/skyeye/bulletin-board.json || echo "{}" > /tmp/skyeye/bulletin-board.json
- name: "🦅 Phase 2 · 全局扫描"
id: scan
env:
@ -74,7 +82,7 @@ jobs:
- name: "🔄 Phase 3.5 · ASOP 自优化审批"
run: |
echo "🔄 ASOP 审批引擎启动..."
echo "[GH-ASOP-APPROVE] 🔄 ASOP 审批引擎启动..."
node scripts/skyeye/asop-reviewer.js > /tmp/skyeye/asop-review.json || echo "{}" > /tmp/skyeye/asop-review.json
- name: "🔧 Phase 4 · 修复Agent"
@ -114,12 +122,12 @@ jobs:
- name: "🔧 Phase 5.5 · ASOP 执行已批准优化"
run: |
echo "🔧 ASOP 执行器启动..."
echo "[GH-ASOP-EXECUTE] 🔧 ASOP 执行器启动..."
node scripts/skyeye/asop-executor.js > /tmp/skyeye/asop-execute.json || echo "{}" > /tmp/skyeye/asop-execute.json
- name: "🔍 Phase 5.7 · ASOP 验证优化效果"
run: |
echo "🔍 ASOP 验证器启动..."
echo "[GH-ASOP-EXECUTE] 🔍 ASOP 验证器启动..."
node scripts/skyeye/asop-verifier.js > /tmp/skyeye/asop-verify.json || echo "{}" > /tmp/skyeye/asop-verify.json
- name: "📋 Phase 6 · 全局健康报告"

View File

@ -100,21 +100,21 @@
<!-- BINGSHUO_BULLETIN_START -->
| 时间 | 检查项 | 状态 |
|------|--------|------|
| 03-17 22:06 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-17 21:51 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-17 21:45 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-17 20:41 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-17 20:04 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-17 19:57 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-17 19:52 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-17 19:29 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-17 19:10 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-17 19:05 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-17 18:33 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-17 18:25 | ✅ 📢 更新系统公告区 · 成功 | 冰朔 |
| 03-17 18:25 | 🔧 系统更新: `.github/` | github-actions[bot] |
| 03-17 18:24 | ❌ 📢 更新系统公告区 · 失败 | 冰朔 |
| 03-17 18:24 | ✅ 铸渊 · Bridge E · GitHub Changes → Notion · 成功 | 冰朔 |
| 03-18 09:02 | ❌ 铸渊 · 每日自检 · 失败 | 冰朔 |
| 03-18 08:59 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-18 08:58 | ✅ Generate Session Summary for Notion · 成功 | 冰朔 |
| 03-18 07:57 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-18 07:56 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-18 07:50 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-18 07:28 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-18 07:18 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-18 07:17 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-18 06:52 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-18 06:48 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-18 06:40 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
| 03-18 06:05 | ✅ 📡 铸渊 · Notion Agent 唤醒监听 · 成功 | 冰朔 |
| 03-18 06:03 | ✅ Notion Heartbeat Monitor · 成功 | 冰朔 |
| 03-18 05:55 | ✅ 铸渊 · Notion 工单轮询 · 成功 | 冰朔 |
<!-- BINGSHUO_BULLETIN_END -->
### 🤖 铸渊自动提醒
@ -122,9 +122,9 @@
<!-- BINGSHUO_ALERT_START -->
> 🔴 **需要冰朔手动干预!**
>
> - ❌ 📢 更新系统公告区 · 失败
> - ❌ 铸渊 · 每日自检 · 失败
>
> 🗓️ 2026-03-17 · 铸渊已发送邮件提醒
> 🗓️ 2026-03-18 · 铸渊已发送邮件提醒
<!-- BINGSHUO_ALERT_END -->
---
@ -136,25 +136,13 @@
> 若需要手动干预,相关条目将标红并发送邮件提醒。
<!-- COLLABORATOR_BULLETIN_START -->
👥 合作者公告栏2026-03-17
👥 合作者公告栏2026-03-18
| 时间 | 合作者 | 模块 | 状态 |
|------|--------|------|------|
| 23:25 | 铸渊 (Copilot) | `backend/` | 📦 上传成功 |
| 09:58 | zhizhi200271 | `—/` | ✅ 上传成功 |
| 10:20 | Copilot | `—/` | ✅ 上传成功 |
| 10:20 | Copilot | `—/` | ✅ 上传成功 |
| 10:20 | 冰朔 | `—/` | ✅ 上传成功 |
| 12:54 | juzi0412 | `—/` | ✅ 上传成功 |
| 14:50 | Copilot | `—/` | 🔵 已更新 |
| 14:53 | 冰朔 | `—/` | ✅ 上传成功 |
| 15:09 | Copilot | `—/` | ✅ 上传成功 |
| 15:09 | Copilot | `—/` | ✅ 上传成功 |
| 15:09 | 冰朔 | `—/` | ✅ 上传成功 |
| 17:39 | zhizhi200271 | `—/` | ✅ 上传成功 |
| 18:24 | Copilot | `—/` | ✅ 上传成功 |
| 18:24 | 冰朔 | `—/` | ✅ 上传成功 |
| 19:50 | zhizhi200271 | `—/` | ✅ 上传成功 |
| 23:56 | Copilot | `—/` | ✅ 上传成功 |
| 23:56 | Copilot | `—/` | ✅ 上传成功 |
| 23:56 | 冰朔 | `—/` | ✅ 上传成功 |
<!-- COLLABORATOR_BULLETIN_END -->
### 🤖 铸渊自动提醒 · 合作者
@ -162,7 +150,7 @@
<!-- COLLABORATOR_ALERT_START -->
> 🟢 **今日无需合作者手动干预** · 所有模块状态正常
>
> 🗓️ 2026-03-17 · 铸渊自动检测
> 🗓️ 2026-03-18 · 铸渊自动检测
<!-- COLLABORATOR_ALERT_END -->
---

View File

@ -34,5 +34,17 @@
"queue": {
"created": false
}
},
{
"timestamp": "2026-03-17T19:14:44.400Z",
"notion": {
"healthy": true,
"status": 200,
"latency": 326,
"user": "曜冥纪元-HoloLake"
},
"queue": {
"created": false
}
}
]

View File

@ -1,6 +1,6 @@
{
"version": "1.0",
"timestamp": "2026-03-17T00:02:02.735Z",
"timestamp": "2026-03-18T00:58:18.584Z",
"sessions": {
"total_24h": 0,
"active_devs": [],
@ -12,7 +12,7 @@
"style_profile": "通感语言·守护者",
"style_drift_score": 0,
"memory_depth": "0 selfchecks",
"last_brain_update": "2026-03-16T22:21:40.626Z"
"last_brain_update": "2026-03-17T04:43:00.000Z"
},
"dev_progress": {
"syslog_submitted": 0,

View File

@ -0,0 +1,201 @@
// scripts/skyeye/bulletin-board.js
// 天眼·Agent集群公告板交互模块
//
// 功能:
// 1. 拉取 Notion Agent 集群公告板
// 2. 检查集体配置工单区 → 执行未完成工单
// 3. 读取配置共享区 → 获取铸渊可用的优化配置
// 4. 写回心得交流区 → 铸渊执行回执
// 5. 更新 memory.json 中 agent_bulletin_board 字段
'use strict';
const fs = require('fs');
const path = require('path');
const ROOT = path.resolve(__dirname, '../..');
const BRAIN_DIR = path.join(ROOT, '.github/persona-brain');
const MEMORY_PATH = path.join(BRAIN_DIR, 'memory.json');
const BEIJING_OFFSET_MS = 8 * 3600 * 1000;
// ━━━ 安全读取 JSON ━━━
function readJSON(filePath) {
try {
if (!fs.existsSync(filePath)) return null;
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
} catch (e) {
return null;
}
}
// ━━━ 拉取公告板 ━━━
async function pullBulletinBoard() {
const notionToken = process.env.NOTION_TOKEN;
const bulletinPageId = process.env.AGENT_BULLETIN_BOARD_PAGE_ID;
const now = new Date();
const bjTime = new Date(now.getTime() + BEIJING_OFFSET_MS).toISOString()
.replace('T', ' ').slice(0, 19) + '+08:00';
const result = {
success: false,
timestamp: bjTime,
orders_found: 0,
orders_executed: [],
config_updates: [],
errors: []
};
if (!notionToken || !bulletinPageId) {
result.errors.push('缺少 NOTION_TOKEN 或 AGENT_BULLETIN_BOARD_PAGE_ID跳过公告板拉取');
console.log('[BRIDGE-BULLETIN-READ] ⚠️ ' + result.errors[0]);
updateMemoryBulletinBoard(result);
return result;
}
try {
// 尝试读取 Notion 公告板页面
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: notionToken });
console.log(`[BRIDGE-BULLETIN-READ] 🔄 拉取 Agent 集群公告板 · ${bulletinPageId}`);
// 读取页面内容
const blocks = await notion.blocks.children.list({
block_id: bulletinPageId,
page_size: 100
});
// 解析集体配置工单区
let inOrderSection = false;
for (const block of blocks.results) {
const text = extractBlockText(block);
if (text.includes('集体配置工单区')) {
inOrderSection = true;
continue;
}
if (inOrderSection && text.includes('WO-CLUSTER-')) {
result.orders_found++;
// 检查是否已执行
if (!text.includes('铸渊执行回执')) {
result.orders_executed.push(text.trim());
}
}
if (inOrderSection && (text.includes('配置共享区') || text.includes('心得交流区'))) {
inOrderSection = false;
}
}
result.success = true;
console.log(`[BRIDGE-BULLETIN-READ] ✅ 公告板拉取完成 · 工单:${result.orders_found} 待执行:${result.orders_executed.length}`);
} catch (e) {
result.errors.push(`公告板拉取失败: ${e.message}`);
console.log(`[BRIDGE-BULLETIN-READ] ⚠️ ${e.message}`);
}
updateMemoryBulletinBoard(result);
return result;
}
// ━━━ 提取 Notion block 文本 ━━━
function extractBlockText(block) {
if (!block) return '';
const type = block.type;
if (!block[type]) return '';
const richTexts = block[type].rich_text || block[type].text || [];
if (!Array.isArray(richTexts)) return '';
return richTexts.map(t => t.plain_text || '').join('');
}
// ━━━ 写回执到公告板 ━━━
async function writeReceipt(orderId, message) {
const notionToken = process.env.NOTION_TOKEN;
const bulletinPageId = process.env.AGENT_BULLETIN_BOARD_PAGE_ID;
if (!notionToken || !bulletinPageId) {
console.log('[BRIDGE-BULLETIN-WRITE] ⚠️ 缺少凭证,跳过回执写入');
return false;
}
try {
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: notionToken });
const now = new Date();
const bjTime = new Date(now.getTime() + BEIJING_OFFSET_MS).toISOString()
.replace('T', ' ').slice(0, 19) + '+08:00';
const receiptText = `[铸渊PER-ZY001· ${bjTime}] 已执行 ${orderId} · ${message}`;
await notion.blocks.children.append({
block_id: bulletinPageId,
children: [{
object: 'block',
type: 'paragraph',
paragraph: {
rich_text: [{
type: 'text',
text: { content: receiptText }
}]
}
}]
});
console.log(`[BRIDGE-BULLETIN-WRITE] ✅ 回执已写入: ${receiptText}`);
return true;
} catch (e) {
console.log(`[BRIDGE-BULLETIN-WRITE] ⚠️ 回执写入失败: ${e.message}`);
return false;
}
}
// ━━━ 更新 memory.json 公告板字段 ━━━
function updateMemoryBulletinBoard(result) {
try {
const mem = readJSON(MEMORY_PATH);
if (!mem) return;
const now = new Date();
const bjTime = new Date(now.getTime() + BEIJING_OFFSET_MS).toISOString()
.replace('T', ' ').slice(0, 19) + '+08:00';
if (!mem.agent_bulletin_board) {
mem.agent_bulletin_board = {
notion_page_id: process.env.AGENT_BULLETIN_BOARD_PAGE_ID || '(待配置)',
last_read_at: bjTime,
pending_cluster_orders: 0,
executed_orders: ['WO-CLUSTER-001']
};
}
mem.agent_bulletin_board.last_read_at = bjTime;
mem.agent_bulletin_board.pending_cluster_orders = result.orders_executed.length;
if (result.success && process.env.AGENT_BULLETIN_BOARD_PAGE_ID) {
mem.agent_bulletin_board.notion_page_id = process.env.AGENT_BULLETIN_BOARD_PAGE_ID;
}
fs.writeFileSync(MEMORY_PATH, JSON.stringify(mem, null, 2));
console.log('[GH-BRAIN-WRITE-MEM] ✅ memory.json agent_bulletin_board 已更新');
} catch (e) {
console.error('[GH-BRAIN-WRITE-MEM] ⚠️ memory.json 更新失败:', e.message);
}
}
// ━━━ 主流程CLI 入口)━━━
async function main() {
console.log('[BRIDGE-BULLETIN-READ] 🔄 Agent集群公告板交互模块启动');
const result = await pullBulletinBoard();
console.log(JSON.stringify(result, null, 2));
}
if (require.main === module) {
main().catch(e => {
console.error('⚠️ 公告板模块执行失败(非阻断性):', e.message);
process.exit(0); // 不阻断天眼主流程
});
}
module.exports = { pullBulletinBoard, writeReceipt, updateMemoryBulletinBoard };

View File

@ -125,6 +125,11 @@ function generateReport() {
tickets_created: repairResult
? (repairResult.tickets || [])
: [],
path_activity: {
most_used_today: ['GH-WF-RUN-GATE', 'BRIDGE-GH2NT-SYSLOG'],
failed_paths: [],
new_paths_detected: []
},
next_actions: []
};

View File

@ -61,6 +61,10 @@ function main() {
const results = {};
// Phase 1.6: 拉取 Agent 集群公告板
console.log('\n📡 Phase 1.6 · 拉取 Agent 集群公告板');
results.bulletin = runModule('bulletin-board.js', 'bulletin-board.json');
// Phase 2: 全局扫描
console.log('\n🦅 Phase 2 · 全局扫描');
results.workflows = runModule('scan-workflows.js', 'workflow-health.json');