Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 0 additions & 288 deletions .github/workflows/agent-fix.yml

This file was deleted.

34 changes: 0 additions & 34 deletions .github/workflows/agent-reconcile.yml

This file was deleted.

137 changes: 0 additions & 137 deletions .github/workflows/agent-triage.yml

This file was deleted.

6 changes: 0 additions & 6 deletions automation/viking-forge/.dockerignore

This file was deleted.

37 changes: 25 additions & 12 deletions automation/viking-forge/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,37 @@
# VikingForge

VikingForge 是 OpenViking 的人工把关 Issue 自动处理系统。它接收 GitHub Issue Webhook,在网页面板列出待处理项;维护者选择“忽略”或“继续分析”后,GitHub Actions 才会调用 Codex 分诊。维护者随后在 GitHub 添加 `agent:ready`,Codex 才会生成修复、执行策略校验并创建草稿 PR。系统通过飞书通知维护者审核,不自动合并。
VikingForge 是 OpenViking 的人工把关 Issue 自动处理服务。GitHub 负责 Issue、标签、分支和 PR;维护者本地机器负责 Codex 分诊、代码修改、验证和发布。GitHub Actions 不运行 Codex,也不保存 OpenAI API Key、GitHub App 私钥或飞书 Webhook。

## 最终效果

1. 新 Issue 出现在网页面板,初始状态为 `awaiting_decision`,不会自动调用 Codex。
2. 维护者在面板选择“忽略”或“继续分析”。
3. “继续分析”会在本机启动一个只读 Codex 会话,结果写入 Issue 评论。
4. 维护者确认分诊结论后,在 GitHub 添加 `agent:ready`。
5. 本机为该 Issue 创建新的 worktree 和新的 Codex 会话,修改代码并运行门禁与测试。
6. 验证通过后,GitHub App 创建分支和草稿 PR,飞书通知维护者审核。
7. 系统不会自动批准、转为 Ready、合并或发布 PR。

不同 Issue 使用不同运行记录、worktree 和 Codex 会话;单个 Worker 串行执行,避免任务互相污染。

## 目录

- `src/viking_forge/`:面板、Webhook、状态存储、回调和飞书通知。
- `scripts/`:Actions 使用的上下文、策略、验证、回调和对账脚本。
- `prompts/`、`schemas/`:Codex 提示词与结构化输出约束。
- `deploy/`:Docker Compose、Caddy 和环境变量样例。
- `docs/design.md`:系统设计和状态流转。
- `docs/deployment.md`:完整部署及 GitHub 配置步骤。
- `.github/workflows/agent-*.yml`:仓库级触发入口,是唯一放在本目录之外的文件。
- `src/viking_forge/`:Webhook、面板、SQLite 队列、Worker、GitHub 发布和飞书通知。
- `prompts/`、`schemas/`:Codex 分诊与修复提示词及结构化输出约束。
- `scripts/labels.py`:初始化 GitHub 标签。
- `deploy/`:本地环境变量样例和 systemd 服务单元。
- `docs/design.md`:已落地架构与安全边界。
- `docs/deployment.md`:部署、GitHub 配置、使用和恢复步骤。

## 本地测试
## 验证

```bash
cd automation/viking-forge
uv sync --extra test
uv run pytest
uv run pytest -q
uv run ruff check src tests scripts
uv run ruff format --check src tests scripts
codex login status
```

生产部署参见 [docs/deployment.md](docs/deployment.md)。

部署和实际使用参见 [部署文档](docs/deployment.md)。
20 changes: 12 additions & 8 deletions automation/viking-forge/deploy/.env.example
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
VIKING_FORGE_DOMAIN=forge.example.com
REPOSITORY=volcengine/OpenViking
DATABASE_PATH=/data/viking-forge.sqlite3
REPOSITORY=wlff123/OpenViking
REPOSITORY_PATH=/data/wlf1/viking-forge-workspace
VALIDATION_VENV=/data/wlf1/viking-forge-workspace/.venv
DATABASE_PATH=/data/wlf1/viking-forge-runtime/viking-forge.sqlite3
RUNS_DIRECTORY=/data/wlf1/viking-forge-runtime/runs
GIT_REMOTE=fork
BASE_BRANCH=main
CODEX_EXECUTABLE=/usr/local/nvm/versions/node/v25.9.0/bin/codex
DASHBOARD_USERNAME=maintainer
DASHBOARD_PASSWORD=replace-with-a-long-random-value
DASHBOARD_CSRF_SECRET=replace-with-a-random-value
GITHUB_WEBHOOK_SECRET=replace-with-the-github-app-webhook-secret
CALLBACK_SECRET=replace-with-a-shared-callback-secret
GITHUB_WEBHOOK_SECRET=replace-with-the-repository-webhook-secret
GITHUB_APP_ID=123456
GITHUB_APP_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nreplace-me\n-----END PRIVATE KEY-----
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/replace-me

GITHUB_APP_SLUG=vikingforge-example
GITHUB_APP_PRIVATE_KEY_FILE=/data/wlf1/viking-forge-runtime/github-app-private-key.pem
FEISHU_WEBHOOK_URL=
9 changes: 0 additions & 9 deletions automation/viking-forge/deploy/Caddyfile

This file was deleted.

17 changes: 0 additions & 17 deletions automation/viking-forge/deploy/Dockerfile

This file was deleted.

37 changes: 0 additions & 37 deletions automation/viking-forge/deploy/docker-compose.yml

This file was deleted.

22 changes: 22 additions & 0 deletions automation/viking-forge/deploy/viking-forge.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[Unit]
Description=VikingForge local Codex issue worker
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=wlf1
Group=wlf1
WorkingDirectory=/data/wlf1/viking-forge-workspace/automation/viking-forge
EnvironmentFile=/data/wlf1/viking-forge-runtime/viking-forge.env
Environment=CODEX_HOME=/home/wlf1/.codex
Environment=PATH=/home/wlf1/.local/bin:/usr/local/nvm/versions/node/v25.9.0/bin:/usr/local/bin:/usr/bin:/bin
ExecStart=/home/wlf1/.local/bin/uv run uvicorn viking_forge.main:app --host 0.0.0.0 --port 18081
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
UMask=0077
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
Loading