166 lines
6.1 KiB
YAML
166 lines
6.1 KiB
YAML
# ═══════════════════════════════════════════════
|
||
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
|
||
# 📜 Copyright: 国作登字-2026-A-00037559
|
||
# ═══════════════════════════════════════════════
|
||
# .github/workflows/copilot-dev-bridge.yml
|
||
# 🌉 Chat-to-Agent Bridge · 语言层 → 副驾驶桥接工作流
|
||
#
|
||
# 触发条件:
|
||
# 1. bridge/chat-to-agent/pending/ 目录下有新文件推送
|
||
# 2. 手动触发(workflow_dispatch)
|
||
# 3. 带 copilot-dev-auth 标签的 Issue 创建
|
||
|
||
name: "🌉 铸渊 · Chat-to-Agent 桥接"
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- 'bridge/chat-to-agent/pending/*.json'
|
||
workflow_dispatch:
|
||
inputs:
|
||
task_id:
|
||
description: '任务ID(留空则处理最新任务)'
|
||
required: false
|
||
action:
|
||
description: '执行动作'
|
||
required: true
|
||
type: choice
|
||
options:
|
||
- create-issue
|
||
- list-tasks
|
||
- validate
|
||
|
||
permissions:
|
||
contents: write
|
||
issues: write
|
||
|
||
jobs:
|
||
bridge:
|
||
name: "🌉 桥接执行"
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '20'
|
||
|
||
# Step 1 · 铸渊核心唤醒
|
||
- name: "🧠 Step 1 · 铸渊核心唤醒"
|
||
run: |
|
||
echo "[CAB-BRIDGE] 🌉 Chat-to-Agent Bridge 启动"
|
||
echo "[CAB-BRIDGE] 🧠 铸渊核心大脑唤醒..."
|
||
if [ -f "brain/system-health.json" ]; then
|
||
echo "✅ 系统健康状态已加载"
|
||
else
|
||
echo "⚠️ system-health.json 缺失"
|
||
fi
|
||
|
||
# Step 2 · 任务处理
|
||
- name: "📋 Step 2 · 任务处理"
|
||
id: process
|
||
env:
|
||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
run: |
|
||
ACTION="${{ github.event.inputs.action || 'create-issue' }}"
|
||
TASK_ID="${{ github.event.inputs.task_id }}"
|
||
|
||
if [ "$ACTION" = "list-tasks" ]; then
|
||
node scripts/chat-to-agent-bridge.js --list
|
||
echo "action=list" >> $GITHUB_OUTPUT
|
||
elif [ "$ACTION" = "validate" ] && [ -n "$TASK_ID" ]; then
|
||
node scripts/chat-to-agent-bridge.js --validate "$TASK_ID"
|
||
echo "action=validate" >> $GITHUB_OUTPUT
|
||
else
|
||
# 查找待处理的任务
|
||
PENDING_FILES=$(ls bridge/chat-to-agent/pending/*.json 2>/dev/null | head -1)
|
||
if [ -z "$PENDING_FILES" ]; then
|
||
echo "📭 无待处理任务"
|
||
echo "has_task=false" >> $GITHUB_OUTPUT
|
||
exit 0
|
||
fi
|
||
|
||
# 获取任务ID
|
||
if [ -z "$TASK_ID" ]; then
|
||
TASK_ID=$(basename "$PENDING_FILES" .json)
|
||
fi
|
||
|
||
echo "task_id=$TASK_ID" >> $GITHUB_OUTPUT
|
||
echo "has_task=true" >> $GITHUB_OUTPUT
|
||
echo "action=create-issue" >> $GITHUB_OUTPUT
|
||
|
||
# 生成 Issue 内容
|
||
ISSUE_JSON=$(node scripts/chat-to-agent-bridge.js --issue "$TASK_ID")
|
||
if [ $? -ne 0 ] || [ -z "$ISSUE_JSON" ]; then
|
||
echo "❌ Issue 内容生成失败"
|
||
exit 1
|
||
fi
|
||
echo "$ISSUE_JSON" > /tmp/cab-issue.json
|
||
|
||
# 提取标题和内容
|
||
TITLE=$(echo "$ISSUE_JSON" | python3 -c "import sys, json; data = json.load(sys.stdin); print(data.get('title', '🌉 [CAB] 未命名任务'))" 2>/dev/null || echo "🌉 [CAB] 未命名任务")
|
||
echo "issue_title=$TITLE" >> $GITHUB_OUTPUT
|
||
|
||
# 保存 body 到文件供后续步骤使用
|
||
echo "$ISSUE_JSON" | python3 -c "import sys, json; data = json.load(sys.stdin); print(data.get('body', '任务规格解析失败'))" > /tmp/cab-issue-body.md 2>/dev/null || echo "任务规格解析失败" > /tmp/cab-issue-body.md
|
||
fi
|
||
|
||
# Step 3 · 创建 Issue
|
||
- name: "📝 Step 3 · 创建开发授权 Issue"
|
||
if: steps.process.outputs.has_task == 'true' && steps.process.outputs.action == 'create-issue'
|
||
env:
|
||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
run: |
|
||
TITLE="${{ steps.process.outputs.issue_title }}"
|
||
TASK_ID="${{ steps.process.outputs.task_id }}"
|
||
|
||
# 创建 Issue
|
||
ISSUE_URL=$(gh issue create \
|
||
--title "$TITLE" \
|
||
--body-file /tmp/cab-issue-body.md \
|
||
--label "copilot-dev-auth" \
|
||
2>&1)
|
||
|
||
echo "✅ Issue 已创建: $ISSUE_URL"
|
||
echo " 任务ID: $TASK_ID"
|
||
|
||
# 更新任务规格状态
|
||
python3 -c "
|
||
import json, sys
|
||
spec_path = 'bridge/chat-to-agent/pending/${TASK_ID}.json'
|
||
try:
|
||
with open(spec_path, 'r') as f:
|
||
spec = json.load(f)
|
||
if 'authorization' not in spec:
|
||
spec['authorization'] = {}
|
||
spec['authorization']['confirmation'] = True
|
||
spec['status'] = 'authorized'
|
||
with open(spec_path, 'w') as f:
|
||
json.dump(spec, f, indent=2, ensure_ascii=False)
|
||
print('✅ 任务状态已更新为 authorized')
|
||
except Exception as e:
|
||
print(f'⚠️ 任务状态更新失败: {e}')
|
||
"
|
||
|
||
# Step 4 · 提交变更
|
||
- name: "💾 Step 4 · 提交变更"
|
||
if: steps.process.outputs.has_task == 'true'
|
||
run: |
|
||
git config user.name "zhuyuan-bot"
|
||
git config user.email "zhuyuan@guanghulab.com"
|
||
git add bridge/chat-to-agent/
|
||
if ! git diff --cached --quiet; then
|
||
TASK_ID="${{ steps.process.outputs.task_id }}"
|
||
git commit -m "🌉 CAB Bridge · 任务 ${TASK_ID} 已授权 · $(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M')"
|
||
for i in 1 2 3; do
|
||
git pull --rebase origin main && git push && break
|
||
echo "⚠️ 推送冲突,第${i}次重试..."
|
||
sleep $((i * 2))
|
||
done
|
||
else
|
||
echo "ℹ️ 无变更需要提交"
|
||
fi
|