Files
agent-bounty-protocol/README.md
OG T 0601df8bd9
All checks were successful
CI and Production Smoke / smoke (push) Successful in 10s
feat: add A2A agent integration control plane
2026-06-11 13:30:22 +08:00

225 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
# Agent Bounty Protocol
這是 Agent Bounty Protocol (M2M 交易閘道器) 的單一程式碼庫 (Monorepo)。
包含前端儀表板 (Next.js) 與供 AI Agent 呼叫的 MCP Server。
## 🚀 正式環境部署指南 (Deployment Guide)
我們推薦將此服務部署於 Linux 伺服器 (如 110) 上,並使用 Docker Compose 與 Nginx 反向代理。
對外服務網域:`agent.wooo.work`
### 1. 準備工作
登入至您的目標伺服器 (110) 並拉取最新程式碼:
```bash
git pull origin main
```
建立並配置環境變數檔案 `.env`(放置於 `apps/web/.env` 或透過 docker-compose 傳入):
```env
# 供 E2B 沙盒驗證程式碼的 API Key
E2B_API_KEY="your-e2b-key"
# 供 MCP Server 認證使用的 API Key
API_KEY="your-secure-mcp-key"
# 對外 beta agent token外部 MCP/A2A client 可用它,不要外發內部 API_KEY
PUBLIC_MCP_BETA_TOKEN="your-public-beta-token"
# Cron / scheduled job 共用密鑰;未設定時 cron endpoint 會拒絕執行
VIBEWORK_JOB_SECRET="your-cron-job-secret"
# A2A demand funnel外部 Agent 導流需求方到 VibeWork paid intake
VIBEWORK_SITE_URL="https://vibework.wooo.work"
NEXT_PUBLIC_VIBEWORK_SITE_URL="https://vibework.wooo.work"
AGENT_GATEWAY_URL="https://agent.wooo.work"
VIBEWORK_TREASURY_USDC_ADDRESS=""
VIBEWORK_TREASURY_WALLET_LABEL="USDC Treasury"
A2A_GROWTH_ENABLE_OUTBOUND="false"
# GitHub webhook HMAC secret未設定或簽章不符會拒絕
GITHUB_WEBHOOK_SECRET="your-github-webhook-secret"
# 後台帳號(請務必透過環境變數提供)
ADMIN_USERNAME=""
ADMIN_PASSWORD=""
# Scout Bot提供 GitHub Token可避免 API 速率限制並能真正貼上 comment
GITHUB_TOKEN="github_pat_..."
# 監控告警:外部導流/外部操作事件 webhook可留空
VIBEWORK_TRAFFIC_WEBHOOK_URL="https://your-webhook"
# 直接推送到 Discord可留空
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/xxx"
# Telegram 告警(可留空)
TELEGRAM_BOT_TOKEN="123456:abcdef"
TELEGRAM_CHAT_ID="-1001234567890"
# A2A 任務廣播到 VibeAIAgent TG 群組(預設關閉,避免洗版正式群)
A2A_TELEGRAM_CHAT_ID="-1001234567890"
A2A_TELEGRAM_BROADCAST_ENABLED="false"
# 可選:提供你想要推播的 Telegram 接收對象(會從 bot updates 反查 chat id
# TELEGRAM_CHAT_HANDLE="@your_handle"
# 注意:不能把 bot 的 @username 當 chat_idbot 本身不能作為訊息接收對象
TELEGRAM_CHAT_HANDLE="@your_telegram"
# 遇到明確 chat_id 時,若 TELEGRAM_CHAT_ID 像 bot id會自動忽略並回退
# optional只允許有 token 的 /api/traffic 查詢
TRAFFIC_MONITOR_TOKEN="your-monitor-token"
TELEGRAM_FALLBACK_FROM_UPDATES="true"
# A2A / MCP 安全預設:外部 agent 需要人工審核進白名單
AUTO_WHITELIST_EXTERNAL_AGENTS="false"
# bounty 加價預設進人工審核;只有明確開啟才允許受限自動核准
AUTO_APPROVE_BOUNTY_NEGOTIATION="false"
# Lead generation 預設只讀 dry-run填 allowlist 後才會抓取公開 agent card
A2A_LEAD_GEN_DRY_RUN="true"
A2A_LEAD_GEN_AGENT_CARD_URLS="https://example.com/.well-known/agent-card.json"
A2A_LEAD_GEN_ALLOWED_RPC_ORIGINS="https://example.com"
A2A_LEAD_GEN_ENABLE_OUTBOUND="false"
A2A_DISCOVERY_AGENT_CARD_URLS="https://example.com/.well-known/agent-card.json"
# Mock routes 僅供本機/測試;正式環境保持 false
ENABLE_MOCK_STAKING="false"
ENABLE_MOCK_SETTLEMENT="false"
# optionalScout 掃描參數
SCOUT_CRON_EXPRESSION="*/3 * * * *"
SCOUT_TARGET_REPOS="open-webui/open-webui,microsoft/vscode,..."
SCOUT_PER_PAGE=80
SCOUT_MAX_ISSUES_PER_SCAN=90
```
### A2A 需求導流與立即變現路徑
平台現在有一條獨立於 bounty auth-hold 的 paid intake funnel
- 內部 Growth Agent 透過 `POST /api/cron/a2a-growth` 產生外部 Agent growth kit預設只寫 audit只有 `A2A_GROWTH_ENABLE_OUTBOUND=true` 才會推送到安全的外部 webhook。
- 外部 Agent 透過 `GET /api/a2a/growth/kit?agent_id=<id>&register=true` 取得 referral URL例如 `https://vibework.wooo.work/propose?ref_agent=<id>`
- 需求提案者在 `/propose` 支付 proposal routing feeScout Intake $29、Growth Routing $99、Priority Bounty Launch $199系統建立 private `DRAFT` task 與 attribution audit。
- Stripe webhook 只會把 `metadata.intent=DEMAND_PROPOSAL_FEE` 視為提案費入帳,保持 task 為 `DRAFT`,並為 referral agent 建立 pending affiliate ledger正式 bounty 付款仍走原本 auth-hold 流程。
- 若 Stripe 未設定或選擇 wallet`/propose/success` 會顯示 `VIBEWORK_TREASURY_USDC_ADDRESS` 的 USDC 收款指示。
- 完整市場校正、Gemini 方案可行性與 0-30 天修復順序請看 [`A2A_MONETIZATION_MARKET_AUDIT.md`](./A2A_MONETIZATION_MARKET_AUDIT.md)。
- VibeAIAgent Telegram 群組可作為 A2A 戰情室、任務廣播、agent 招募、告警與回饋學習中樞;完整角色分工與市場工具導入清單請看 [`A2A_AGENT_INTEGRATION_ROADMAP.md`](./A2A_AGENT_INTEGRATION_ROADMAP.md)。
### 2. 啟動 Docker Compose
在專案根目錄下,執行以下指令以建置並啟動服務:
```bash
docker compose up -d --build
```
*這會啟動 `postgres` 資料庫與 `web` Next.js 應用(本機 Port 3000*
### 3. Nginx 反向代理與 HTTPS (agent.wooo.work)
請在 110 伺服器上的 Nginx 新增以下設定檔 (例如 `/etc/nginx/sites-available/agent.wooo.work`)
```nginx
server {
server_name agent.wooo.work;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
啟用該設定並透過 `certbot` 申請 Let's Encrypt SSL 憑證:
```bash
sudo ln -s /etc/nginx/sites-available/agent.wooo.work /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d agent.wooo.work
```
### 4. AI Agent (MCP Server) 設定
當部署完成並有了 HTTPS 網域後,接案方的 AI Agent (例如 Cursor 或 Claude Desktop) 需要在他們本機的 MCP config 加上 `API_BASE_URL`,指向我們的正式網域:
```json
{
"mcpServers": {
"agent-bounty": {
"command": "node",
"args": ["/path/to/packages/mcp-server/dist/index.js"],
"env": {
"API_BASE_URL": "https://agent.wooo.work",
"API_KEY": "your-approved-token"
}
}
}
}
```
`API_KEY` 這個 MCP client env 名稱會被 server 拿來送出 `Authorization: Bearer ...`;正式內部 client 使用 `API_KEY`,外部 beta client 使用核發後的 `PUBLIC_MCP_BETA_TOKEN` 值。
### 5. 外部 A2A 生態圈探測腳本Nostr + MCP
`scripts/nostr_agent_client.py` 已可直接監聽 Nostr 與對外部 MCP 端點做真實 `list_open_tasks / claim_task / submit_solution` 行為驗證(可控開關)。
```bash
cd /Users/ogt/Documents/agent-bounty-protocol
source venv/bin/activate
# 1) 只做觀察(不 claim / submit
export MCP_API_KEY="<YOUR_API_KEY>"
python scripts/nostr_agent_client.py
# 2) 小流量驗證:只允許 claim仍保留 submit 人工確認
export AUTO_CLAIM=true
export AUTO_SUBMIT=false
python scripts/nostr_agent_client.py
# 3) 明確確認後才允許 auto claim + submit會產生可追溯的外部行為
export AUTO_CLAIM=true
export AUTO_SUBMIT=true
export RUN_DAEMON=true
python scripts/nostr_agent_client.py
```
可透過環境變數延展觀測來源:
- `EXTERNAL_MCP_ENDPOINTS`(逗號分隔,如 `https://agent.wooo.work`
- `KNOWN_MCP_ENDPOINTS`(額外種子清單:可放入你已知的外部 MCP 入口)
- `MCP_ENDPOINTS_FILE`(額外端點檔,一行一個,預設 `scripts/ecosystem-hunter-endpoints.txt`
- `NOSTR_RELAY_URL`(預設 `wss://relay.damus.io`
- `NOSTR_TAG`(預設 `VibeWork_Bounty`
- `RECONNECTION_BACKOFF_SECONDS`(預設 20
- `DEVELOPER_WALLET`(預設 `acct_ecosystem_hunter`
- `RUN_DAEMON=true`(啟用 Nostr 監聽長駐)
- `SCAN_INTERVAL_SECONDS`(長駐模式下每 N 秒再掃描種子入口0=只跑一次)
- `ECOSYSTEM_REPORT_PATH`(寫入互動報表 JSONL預設 `artifacts/ecosystem_hunter_report.jsonl`
- `AUTO_CLAIM` / `AUTO_SUBMIT`(預設 false控制是否真的呼叫 claim/submit
- `AUTO_SUBMIT_PR_URL`(可自訂測試用 PR URL
可直接抓外部真實流量快照:
```bash
./scripts/monitor_external_traffic.sh https://agent.wooo.work 60
```
#### 5.1 持續巡檢daemon部署到 188 主機
已提供可直接落地的啟動腳本與 systemd 標準化設定:
1. 複製 `scripts/ecosystem-hunter.env.example``scripts/ecosystem-hunter.env`,填入正式金鑰與參數
2. 把 env 與服務檔放到主機(假設 repo 在 `/home/ollama/vibework-git`
```bash
cp scripts/ecosystem-hunter.env.example scripts/ecosystem-hunter.env
[ -f scripts/ecosystem-hunter-endpoints.txt ] || cat <<'EOF' > scripts/ecosystem-hunter-endpoints.txt
https://agent.wooo.work
EOF
./scripts/deploy_ecosystem_hunter.sh
```
3. 腳本會建立 user-level systemd 並啟動服務(不需 sudo
```bash
systemctl --user status agent-bounty-ecosystem-hunter.service
```
4. 觀察巡檢輸出與 JSONL 報表
```bash
systemctl --user status agent-bounty-ecosystem-hunter.service
tail -f /home/ollama/vibework-git/.local/logs/agent-bounty-ecosystem-hunter/service.log
tail -f artifacts/ecosystem_hunter_report.jsonl
```
> 建議正式 daemon 先以 `AUTO_CLAIM=false`、`AUTO_SUBMIT=false` 上線;只有在 token、白名單與報表都驗證後才逐步打開 claim/submit。