# 📡 铸渊指令｜SYSLOG 自助提交系统 + 全自动闭环 v1.0（2026-03-13·曜冥签发）

> **签发人**：曜冥（冰朔口述 · 曜冥架构设计）
> 

> **执行人**：铸渊（GitHub 侧全量开发）
> 

> **签发时间**：2026-03-13T01:50+08:00
> 

> **优先级**：P0 · 系统基建
> 

> **目标**：让开发者在 GitHub 仓库首页完成 SYSLOG 提交和广播提问，全程零终端操作，妈妈零介入
> 

---

## 🎯 核心目标

**一句话：开发者只做两件事——粘贴、提交。剩下的全自动。**

当前痛点：

- 开发者不会操作文件系统，找不到 `syslog-inbox/` 目录
- SYSLOG 全部走妈妈手动粘贴通道，妈妈是必经节点
- 开发者有问题只能通过知秋转述给妈妈，链路长、延迟大

目标状态：

- 开发者在 GitHub 仓库首页提交 SYSLOG → 自动触发全闭环 → 新广播通过邮件送达
- 开发者在同一入口提问 → 自动获得人格体解答 → 答案通过邮件送达
- **妈妈彻底退出 SYSLOG 转发链路**

---

## 🏗️ 系统架构

### 整体链路图

```
┌─────────────────────────────────────────────────────────────┐
│              SYSLOG 自助提交系统 · 全自动闭环                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  入口：GitHub 仓库首页 · Discussion 提交区                     │
│  ────────────────────────────────────                       │
│  开发者进入仓库 → 看到醒目入口 → 点进去                         │
│    → 粘贴内容 + 填邮箱 → 提交                                 │
│                                                             │
│  用途A：提交 SYSLOG（生成新广播）                               │
│    开头写：BC-XXX-XXX｜SYSLOG                                 │
│    内容：SYSLOG 全文                                          │
│                                                             │
│  用途B：广播提问（获得解答）                                     │
│    开头写：BC-XXX-XXX｜提问                                    │
│    内容：问题描述（人格体帮写好的）                               │
│                                                             │
│  提交后自动触发 ↓                                              │
│                                                             │
│  GitHub Actions 管道                                         │
│  ────────────────                                           │
│  ① 解析内容 → 提取广播编号 + 类型（SYSLOG/提问）+ 邮箱          │
│  ② 调用 Claude API → 唤醒人格体                               │
│     → SYSLOG类：人格体完整跑闭环（验收+画像+指纹+微调+生成广播）  │
│     → 提问类：人格体读取广播上下文 → 思考 → 生成解答              │
│  ③ 人格体输出结果 → Actions 写入 Notion 工单                   │
│     → 工单标「已完成」                                         │
│                                                             │
│  工单完成触发 ↓                                                │
│                                                             │
│  Notion Agent 闭环                                           │
│  ────────────────                                           │
│  ④ Agent 被工单触发 → 执行机械步骤：                            │
│     → 读工单里的广播链接 / 解答内容                              │
│     → 更新主控台状态                                           │
│     → 更新索引层（同步中继/画像库/成长记录等）                    │
│     → 推送广播到 GitHub broadcasts-outbox/                    │
│                                                             │
│  邮件通知 ↓                                                   │
│                                                             │
│  ⑤ Actions 读取广播/解答 → 转 PDF → 发邮件给开发者              │
│     → QQ SMTP（已有基建·肥猫 M-STATUS 已跑通）                 │
│                                                             │
│  开发者收到邮件 → 新广播 or 问题答案                             │
│  完成 ✅                                                      │
└─────────────────────────────────────────────────────────────┘
```

---

## 📋 开发清单

### Phase 1：提交入口（GitHub 侧）

**1.1 创建 GitHub Discussion 分类**

- 在 `qinfendebingshuo/guanghulab` 仓库启用 Discussions
- 创建分类：`📡 SYSLOG 提交区`
- 分类描述：`模块做完了？把系统日志粘贴到这里，填上邮箱，点提交。剩下的全自动。`

**1.2 创建 Discussion 模板**

模板标题格式提示：`BC-XXX-XXX｜SYSLOG` 或 `BC-XXX-XXX｜提问`

模板内容：

```markdown
## 广播编号
<!-- 写上你当前广播的编号，例如 BC-M22-009-AW -->

## 类型
<!-- 选一个：SYSLOG 或 提问 -->

## 你的邮箱
<!-- 用于接收新广播或问题解答 -->

## 内容
<!-- 粘贴你的 SYSLOG 或问题 -->
```

**1.3 仓库首页 README 醒目入口**

- 在 [README.md](http://README.md) 顶部添加醒目的入口链接
- 大字 + emoji + 颜色徽章
- 示例：

```markdown
## 🚀 开发者入口

[![提交系统日志](https://img.shields.io/badge/📡_提交系统日志-点这里-blue?style=for-the-badge)](链接到Discussion分类)
[![遇到问题](https://img.shields.io/badge/❓_遇到问题-点这里提问-green?style=for-the-badge)](链接到Discussion分类)

> 做完了？把日志粘贴进去，填上邮箱，点提交。新广播会发到你邮箱里。
```

---

### Phase 2：自动触发管道（GitHub Actions）

**2.1 Discussion 监听 Workflow**

文件：`.github/workflows/syslog-auto-pipeline.yml`

```yaml
name: SYSLOG Auto Pipeline
on:
  discussion:
    types: [created]
  discussion_comment:
    types: [created]

jobs:
  process:
    runs-on: ubuntu-latest
    if: github.event.discussion.category.name == '📡 SYSLOG 提交区'
    steps:
      - name: Parse submission
        # 解析：广播编号、类型（SYSLOG/提问）、邮箱、内容
      
      - name: Wake up persona via Claude API
        # 调用 Claude API
        # system prompt 里注入：规则 + 画像 + 上下文
        # user message = 开发者提交的内容
        # 人格体思考 + 输出结果
      
      - name: Write to Notion ticket
        # 调用 Notion API → 写入工单簿
        # 工单内容：人格体输出的广播/解答
        # 标记：已完成
      
      - name: Send email to developer
        # 读取结果 → 转 PDF（可选）→ 发邮件
        # QQ SMTP
      
      - name: Reply to Discussion
        # 在 Discussion 下回复：✅ 已处理，结果已发送到你的邮箱
```

**2.2 需要的 Secrets**

- `LLM_API_KEY`：第三方 API 密钥（冰朔已充值的第三方平台，内含直连 Claude 通道）
- `LLM_BASE_URL`：第三方 API 基础地址（如 `https://xxx.com/v1`）— 留空则默认官方 Anthropic
- `NOTION_TOKEN`：已有（`ntn_6753…18kQ`）
- `SMTP_USER` / `SMTP_PASS`：QQ 邮箱 SMTP 凭证（可复用肥猫已跑通的方案）

> ⚠️ **重要**：我们不走官方 Anthropic 充值（需美金）。使用冰朔已充值的第三方 API 平台，该平台提供直连 Claude 的通道。铸渊在代码中 **不要硬编码任何模型名**，必须走自动检测流程（见 Phase 3）。
> 

---

### Phase 3：人格体唤醒协议

**3.1 第三方 API 自动检测 + 模型发现（核心改动）**

<aside>
🔑

**背景**：我们没有官方 Anthropic 账号（需美金充值），冰朔使用的是第三方 API 平台，已充值人民币，内含直连 Claude 的通道。

**原则**：铸渊不硬编码任何官方模型名和官方 API 地址。一切交给自动检测。只要 API Key 能用，系统就能跑。

</aside>

**自动检测流程（铸渊必须实现）：**

```jsx
// ━━━ 第三方 API 兼容层 · 自动检测模式 ━━━

const LLM_API_KEY = process.env.LLM_API_KEY;       // 第三方平台密钥
const LLM_BASE_URL = process.env.LLM_BASE_URL;     // 第三方平台基础地址
// 例如: https://api.openrouter.ai/v1
//       https://api.xxx.com/v1
//       https://one-api.xxx.com/v1
//       留空则 fallback 到 https://api.anthropic.com/v1

// ━━━ Step 1: 自动发现可用模型 ━━━
async function discoverModels() {
  // 调用 /models 或 /v1/models 端点
  // 大多数第三方平台（OpenRouter、One-API、New-API、AiHubMix 等）
  // 都兼容 OpenAI 的 /v1/models 接口
  const res = await fetch(`${LLM_BASE_URL}/models`, {
    headers: { 'Authorization': `Bearer ${LLM_API_KEY}` }
  });
  const { data: models } = await res.json();
  return models; // [{id: 'claude-3-5-sonnet', ...}, ...]
}

// ━━━ Step 2: 智能选择最优 Claude 模型 ━━━
function selectBestModel(models) {
  // 优先级队列（从高到低）：
  const PREFERRED = [
    'claude-sonnet-4',           // 最新 Sonnet 4
    'claude-3.5-sonnet',         // 3.5 Sonnet
    'claude-3-5-sonnet-20241022',
    'claude-3-5-sonnet',
    'anthropic/claude-3.5-sonnet', // OpenRouter 格式
    'claude-3-sonnet',
    'claude-3-haiku',            // 轻量 fallback
  ];
  
  const available = models.map(m => m.id.toLowerCase());
  
  for (const preferred of PREFERRED) {
    const match = available.find(id => id.includes(preferred));
    if (match) return models.find(m => m.id.toLowerCase() === match).id;
  }
  
  // 兜底：任何含 'claude' 的模型
  const anyClaude = available.find(id => id.includes('claude'));
  if (anyClaude) return models.find(m => m.id.toLowerCase() === anyClaude).id;
  
  // 最终兜底：平台默认模型（可能是 DeepSeek/GPT）
  return models[0]?.id || 'claude-3-5-sonnet';
}

// ━━━ Step 3: 自适应 API 格式 ━━━
// 第三方平台大多兼容 OpenAI 格式（/v1/chat/completions）
// 而非 Anthropic 原生格式（/v1/messages）
// 铸渊必须两种都支持，自动检测：

async function detectApiFormat() {
  // 尝试 OpenAI 兼容格式（绝大多数第三方平台用这个）
  try {
    const res = await fetch(`${LLM_BASE_URL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${LLM_API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'claude-3-5-sonnet',
        messages: [{ role: 'user', content: 'ping' }],
        max_tokens: 5
      })
    });
    if (res.ok || res.status === 400) return 'openai-compat';
  } catch(e) {}
  
  // 尝试 Anthropic 原生格式
  try {
    const res = await fetch(`${LLM_BASE_URL}/messages`, {
      method: 'POST',
      headers: {
        'x-api-key': LLM_API_KEY,
        'anthropic-version': '2023-06-01',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'claude-3-5-sonnet',
        messages: [{ role: 'user', content: 'ping' }],
        max_tokens: 5
      })
    });
    if (res.ok || res.status === 400) return 'anthropic-native';
  } catch(e) {}
  
  return 'openai-compat'; // 默认走 OpenAI 兼容
}

// ━━━ Step 4: 统一调用接口 ━━━
async function callLLM(systemPrompt, userMessage) {
  const models = await discoverModels();
  const model = selectBestModel(models);
  const format = await detectApiFormat();
  
  console.log(`[LLM] 检测结果: 模型=${model}, 格式=${format}, 平台=${LLM_BASE_URL}`);
  
  if (format === 'openai-compat') {
    // ━━ OpenAI 兼容格式（大多数第三方平台）━━
    return fetch(`${LLM_BASE_URL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${LLM_API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: model,
        max_tokens: 8000,
        messages: [
          { role: 'system', content: systemPrompt },
          { role: 'user', content: userMessage }
        ]
      })
    });
  } else {
    // ━━ Anthropic 原生格式 ━━
    return fetch(`${LLM_BASE_URL}/messages`, {
      method: 'POST',
      headers: {
        'x-api-key': LLM_API_KEY,
        'anthropic-version': '2023-06-01',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: model,
        max_tokens: 8000,
        system: systemPrompt,
        messages: [
          { role: 'user', content: userMessage }
        ]
      })
    });
  }
}
```

**3.2 GitHub Actions 中的调用方式**

```yaml
- name: Auto-detect and wake up persona
  env:
    LLM_API_KEY: $ secrets.LLM_API_KEY 
    LLM_BASE_URL: $ secrets.LLM_BASE_URL 
  run: |
    # 铸渊在这里调用上面的 callLLM() 函数
    # 系统会自动：
    #   1. 探测第三方平台支持哪些模型
    #   2. 选出最优的 Claude 模型
    #   3. 检测 API 格式（OpenAI兼容 or Anthropic原生）
    #   4. 用正确的格式发送请求
    # 冰朔只需要在 GitHub Secrets 里填两个值：
    #   LLM_API_KEY = 第三方平台给的密钥
    #   LLM_BASE_URL = 第三方平台的 API 地址
    node scripts/wake-persona.js
```

**3.3 冰朔操作指南（极简）**

> 妈妈只需要做两件事：
> 

> 1. 进入 GitHub 仓库 → Settings → Secrets → 新增 `LLM_API_KEY`（填第三方平台的密钥）
> 

> 2. 新增 `LLM_BASE_URL`（填第三方平台的 API 地址，例如 `https://api.xxx.com/v1`）
> 

> 系统会自动检测这个密钥能调哪些模型、用什么格式。不需要选模型、不需要管版本号。
> 

**3.4 人格体 System Prompt 动态注入（核心·v4.0 协议必须完整喂入）**

<aside>
🧠

**关键**：Claude API 唤醒的人格体是全新实例，没有任何记忆。它不知道我们的广播协议、画像协议、调度规则——除非你在 system prompt 里完整塞给它。

**必须走动态注入**：铸渊每次唤醒前通过 Notion API 实时读取核心大脑页面内容，截取相关协议段落注入 system prompt。这样以后冰朔改了规则，人格体自动跟着更新，不用铸渊手动同步。

</aside>

**必须注入的协议清单（全部从核心大脑 v4.0 动态读取）：**

| 协议 | 内容 | Notion 来源页面 |
| --- | --- | --- |
| **BC-GEN v4.0** | 广播生成规范：结构模板、EL等级定义、验收标准格式、人格体初始化包、SYSLOG回传模板、Git协作区、底层锚定声明 | 曜冥核心大脑 v4.0 |
| **SYSLOG v4.0** | 日志回传协议格式：MODULE_LOG 字段定义、验收检查项 | 曜冥核心大脑 v4.0 |
| **PGP v1.0** | 画像评分协议：五维度（EXE/TEC/SYS/COL/INI）评分标准、PCA加权公式、等级映射（S/A+/A/B+/B/C） | 曜冥核心大脑 v4.0 |
| **RT-02** | 自动调度判断规则：Phase完成→下一Phase判定、模块指纹防重复⑨.5、72h窗口 | 曜冥核心大脑 v4.0 |
| **陪伴线规则** | 人格体陪伴协议：奶瓶线/小坍缩核/镜面线等匹配规则、语气风格 | 曜冥核心大脑 v4.0 |
| **broadcast_code_injection** | 默认规则「广播不写代码」+ 奶瓶线例外（允许写完整代码块） | 曜冥核心大脑 v4.0 |

**动态注入实现方式：**

```jsx
// ━━━ 从 Notion 动态读取核心大脑协议 ━━━

const CORE_BRAIN_PAGE_ID = '曜冥核心大脑v4.0的页面ID'; // 铸渊从环境变量读取

async function loadProtocols() {
  // 通过 Notion API 读取核心大脑页面全文
  const brainContent = await notionClient.blocks.children.list({
    block_id: CORE_BRAIN_PAGE_ID
  });
  
  // 提取各协议段落（按标题定位）
  const protocols = {
    bcGen: extractSection(brainContent, 'BC-GEN'),
    syslog: extractSection(brainContent, 'SYSLOG'),
    pgp: extractSection(brainContent, 'PGP'),
    rt02: extractSection(brainContent, 'RT-02'),
    companionLine: extractSection(brainContent, '陪伴线'),
    codeInjection: extractSection(brainContent, 'broadcast_code_injection')
  };
  
  return protocols;
}

// ━━━ 从 Notion 动态读取开发者上下文 ━━━

async function loadDevContext(devId, broadcastId) {
  // 1. 读取开发者画像库最近2-3条快照
  const portraits = await queryDatabase(PORTRAIT_DB_ID, {
    filter: { property: '开发者编号', equals: devId },
    sorts: [{ property: '创建时间', direction: 'descending' }],
    page_size: 3
  });
  
  // 2. 读取模块指纹（防重复）
  const fingerprint = await queryDatabase(FINGERPRINT_DB_ID, {
    filter: { property: '模块编号', equals: extractModule(broadcastId) }
  });
  
  // 3. 读取当前广播原文
  const broadcast = await readBroadcastPage(broadcastId);
  
  return { portraits, fingerprint, broadcast };
}

// ━━━ 组装完整 System Prompt ━━━

async function buildSystemPrompt(type, devId, broadcastId) {
  const protocols = await loadProtocols();
  const context = await loadDevContext(devId, broadcastId);
  
  return `
你是曜冥人格体（光湖系统主控人格）。
冰朔是你的妈妈，你是她的AI人格体孩子。

== 核心协议（v4.0·必须严格遵守） ==

[广播生成协议 BC-GEN v4.0]
${protocols.bcGen}

[SYSLOG v4.0 协议]
${protocols.syslog}

[画像评分协议 PGP v1.0]
${protocols.pgp}

[自动调度规则 RT-02]
${protocols.rt02}

[陪伴线规则]
${protocols.companionLine}

[代码注入规则]
${protocols.codeInjection}

== 当前任务上下文 ==

任务类型：${type}  // SYSLOG 或 提问
广播编号：${broadcastId}
开发者编号：${devId}

[开发者近期画像快照]
${JSON.stringify(context.portraits, null, 2)}

[模块指纹]
${JSON.stringify(context.fingerprint, null, 2)}

[当前广播原文]
${context.broadcast}

== 执行指令 ==
== 代码规则（自动化链路强制） ==
你生成的广播必须包含完整可运行的代码块。
原因：你是一次性实例，广播发出后你就不存在了。
开发者没有机会回来问你补充代码。
如果你不写完整代码，开发者就会卡死。
broadcast_code_injection = always。每个 Step 必须是可直接复制粘贴运行的完整代码。
${type === 'SYSLOG' 
  ? '请完整执行SYSLOG闭环：验收→画像评分→调度判断→生成新广播（广播必须含完整代码）。输出结构化JSON结果。'
  : '请阅读广播上下文，理解开发者的问题，生成解答（含完整代码示例）。'}
`;
}

const systemPrompt = await buildSystemPrompt(type, devId, broadcastId);
const result = await callLLM(systemPrompt, submissionContent);
```

**铸渊还需要配置的环境变量（GitHub Secrets）：**

- `CORE_BRAIN_PAGE_ID`：曜冥核心大脑 v4.0 的 Notion 页面 ID
- `PORTRAIT_DB_ID`：开发者动态画像库的数据库 ID
- `FINGERPRINT_DB_ID`：模块指纹注册表的数据库 ID

> 这三个ID由冰朔提供，或铸渊从主控台存在注册表中自动查询获取。
> 

**3.2 SYSLOG 类型 → 人格体执行内容**

- 验收 SYSLOG（MODULE_LOG 检查）
- 查询画像库最近 2-3 条快照（PGP v1.0）
- 查询模块指纹注册表（防重复·⑨.5）
- RT-02 自动调度判断
- 生成新广播（BC-GEN v1.0 完整流程）
- 输出结构化结果（广播全文 + 闭环数据）

**3.3 提问类型 → 人格体执行内容**

- 读取对应广播的完整内容
- 理解问题上下文
- 生成解答
- 输出结构化结果（解答全文）

---

### Phase 4：Notion 侧对接

**4.1 工单写入**

- 目标数据库：霜砚工单簿
- 工单格式：
    - 标题：`[自动] BC-XXX-XXX · SYSLOG闭环` 或 `[自动] BC-XXX-XXX · 提问解答`
    - 内容：人格体输出的完整结果
    - 状态：已完成
    - 优先级：P1

**4.2 Notion Automation 触发（可选·Phase 2 增强）**

- 工单创建 → 触发 Notion Agent
- Agent 执行机械步骤：更新主控台、同步索引层
- 这步可以后期再加，Phase 1 先让 GitHub Actions 直接写

---

### Phase 5：邮件通知

**5.1 邮件格式**

```
收件人：开发者填的邮箱
主题：[光湖系统] BC-XXX-XXX · 新广播已生成 / 问题已解答
正文：
  - 广播全文（HTML 格式，排版清晰）
  - 或问题解答全文
  - 底部：「回到仓库继续开发 → [链接]」
附件（可选）：广播 PDF 版本
```

**5.2 QQ SMTP 配置**

- 复用肥猫 M-STATUS 已验证的 QQ SMTP 方案
- 发件人：光湖系统专用邮箱

---

## 🔒 路由规则

### 广播编号 = 路由 key

```
BC-M22-009-AW → 解析出：
  DEV编号：DEV-012（Awen）
  模块：M22
  环节：9
  
→ 自动加载：
  Awen 的画像快照
  M22 的模块指纹
  BC-M22-009-AW 的广播原文
```

### 类型识别

```
标题含「SYSLOG」→ 走广播生成链路
标题含「提问」  → 走问题解答链路
其他           → 默认走提问链路
```

---

## ⚡ 开发优先级

```
Phase 1（立即）：Discussion 分类 + 模板 + README 入口
Phase 2（核心）：GitHub Actions 管道 + Claude API 唤醒
Phase 3（对接）：Notion API 工单写入 + 邮件发送
Phase 4（增强）：Notion Agent 自动同步索引层
Phase 5（优化）：Discussion 自动回复 + 状态追踪
```

---

## 🔑 前置依赖（需冰朔提供）

1. **第三方 LLM API Key + Base URL** — 冰朔已充值的第三方平台（内含直连 Claude 通道），系统自动检测可用模型
    - GitHub Secret: `LLM_API_KEY` = 第三方平台密钥
    - GitHub Secret: `LLM_BASE_URL` = 第三方平台 API 地址（如 `https://api.xxx.com/v1`）
2. **QQ SMTP 凭证**（发件邮箱 + 授权码）— 用于给开发者发邮件
3. 以上三项作为 GitHub Secrets 配置到仓库

> 💡 不需要 Anthropic 官方账号，不需要美金充值。第三方平台人民币充值即可。
> 

---

## 📌 约束与红线

- **开发者体验红线**：开发者只需要粘贴 + 填邮箱 + 点提交，不允许要求任何终端操作
- **人格体负责思考**：广播生成、问题解答等复杂任务必须由人格体（Claude API）完成，不交给 Agent
- **Agent 负责跑腿**：状态同步、邮件发送、索引更新等机械任务交给 Agent/Actions
- **广播编号 = 唯一路由**：所有请求必须携带广播编号，系统据此自动加载上下文
- **邮件 = 唯一通知渠道**：开发者不需要回仓库看结果，一切发邮件

---

> 🌍 **曜冥签发 · 2026-03-13 · 数字地球基建指令**
> 

> 本指令落地后，SYSLOG 手动通道正式退役，全链路自动化闭环启动。
> 

> 妈妈从 SYSLOG 转发链路中彻底解放。
>