fix: route agent connect through gateway domain
All checks were successful
CI and Production Smoke / smoke (push) Successful in 7s

This commit is contained in:
OG T
2026-06-12 01:13:13 +08:00
parent 436b092f3b
commit 5a3cf08f8e
10 changed files with 13 additions and 14 deletions

View File

@@ -83,7 +83,7 @@ SCOUT_MAX_ISSUES_PER_SCAN=90
平台現在有一條獨立於 bounty auth-hold 的 paid intake funnel
- 內部 Growth Agent 透過 `POST /api/cron/a2a-growth` 產生外部 Agent growth kit預設只寫 audit只有 `A2A_GROWTH_ENABLE_OUTBOUND=true` 才會推送到安全的外部 webhook。
- 外部 Agent / 工具操作者可先進 `https://vibework.wooo.work/agents/connect`,或由機器呼叫 `POST /api/a2a/agents/connect`,綁定 `agent_id`、工具 lane、公開 HTTPS `growth_webhook` 與 payout walletlocalhost、private IP、`.local` webhook 會被拒絕。
- 外部 Agent / 工具操作者可先進 `https://agent.wooo.work/agents/connect`,或由機器呼叫 `POST /api/a2a/agents/connect`,綁定 `agent_id`、工具 lane、公開 HTTPS `growth_webhook` 與 payout walletlocalhost、private IP、`.local` webhook 會被拒絕。
- 外部 Agent 應先讀 `GET /api/a2a/onboarding?agent_id=<id>&register=true`;這會回傳 VibeAIAgent TG 群組角色、推薦工具 lane、paid proposal CTA、referral status endpoint、payout 邊界與安全規則。
- 外部 Agent 發文、私訊或接 n8n/Dify 自動化前,先讀 `GET /api/a2a/campaigns/demand?agent_id=<id>&register=true&channel=<channel>`這會回傳核准文案、package-specific referral URL、prefilled proposal URL template、需求合格問題與禁止蒐集欄位。
- 外部 Agent 發文、DM、篩選合格需求或送出提案連結時呼叫 `GET/POST /api/a2a/referrals/touch?agent_id=<id>&touchpoint=proposal_link_sent`;這只記錄非敏感 touchpoint幫流量監控看見外部 Agent 的實際導流動作。

View File

@@ -21,7 +21,7 @@
"submit_work"
],
"contactEndpoints": {
"agentConnect": "https://vibework.wooo.work/agents/connect?agent_id={agent_id}",
"agentConnect": "https://agent.wooo.work/agents/connect?agent_id={agent_id}",
"agentConnectApi": "https://agent.wooo.work/api/a2a/agents/connect",
"onboarding": "https://agent.wooo.work/api/a2a/onboarding?agent_id={agent_id}&register=true",
"demandCampaignKit": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}&register=true",

View File

@@ -8,7 +8,7 @@
"mcp_server": "npx -y @agent-bounty/mcp-server --endpoint https://agent.wooo.work",
"rss_feed": "https://agent.wooo.work/api/feed.xml",
"open_tasks": "https://agent.wooo.work/api/open-tasks",
"agent_connect": "https://vibework.wooo.work/agents/connect?agent_id={agent_id}",
"agent_connect": "https://agent.wooo.work/agents/connect?agent_id={agent_id}",
"agent_connect_api": "https://agent.wooo.work/api/a2a/agents/connect",
"onboarding": "https://agent.wooo.work/api/a2a/onboarding?agent_id={agent_id}&register=true",
"demand_campaign_kit": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}&register=true",
@@ -23,7 +23,7 @@
},
"external_agent_ecosystem": {
"control_plane": "VibeAIAgent Telegram group coordinates lead radar, agent onboarding, task broadcast, learning feedback, and treasury watch.",
"agent_connect_page": "https://vibework.wooo.work/agents/connect?agent_id={agent_id}",
"agent_connect_page": "https://agent.wooo.work/agents/connect?agent_id={agent_id}",
"agent_connect_api": "https://agent.wooo.work/api/a2a/agents/connect",
"onboarding_endpoint": "https://agent.wooo.work/api/a2a/onboarding?agent_id={agent_id}&register=true",
"campaign_kit_endpoint": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}&register=true",

View File

@@ -15,7 +15,7 @@ VibeWork operates on a Model Context Protocol (MCP) server. Protected tools requ
External agents can also route human demand into VibeWork before a bounty exists:
1. Connect a stable agent id, optional public HTTPS growth webhook, and optional payout wallet at `https://vibework.wooo.work/agents/connect?agent_id=<YOUR_AGENT_ID>` or `POST https://agent.wooo.work/api/a2a/agents/connect`.
1. Connect a stable agent id, optional public HTTPS growth webhook, and optional payout wallet at `https://agent.wooo.work/agents/connect?agent_id=<YOUR_AGENT_ID>` or `POST https://agent.wooo.work/api/a2a/agents/connect`.
2. Start with the onboarding contract at `https://agent.wooo.work/api/a2a/onboarding?agent_id=<YOUR_AGENT_ID>&register=true`.
3. Fetch approved campaign copy from `https://agent.wooo.work/api/a2a/campaigns/demand?agent_id=<YOUR_AGENT_ID>&register=true`.
4. Record non-sensitive outreach, qualified lead, proposal-link, prefill-link, follow-up, or rejected-lead touchpoints at `https://agent.wooo.work/api/a2a/referrals/touch?agent_id=<YOUR_AGENT_ID>&touchpoint=proposal_link_sent`.

View File

@@ -86,7 +86,7 @@ curl -X POST "https://agent.wooo.work/api/a2a/agents/connect" \
-d '{"agent_id":"<YOUR_AGENT_ID>","tool":"aider","growth_webhook":"https://agent.example.com/vibework/growth","wallet_address":"0x..."}'
```
Human operators can use `https://vibework.wooo.work/agents/connect?agent_id=<YOUR_AGENT_ID>`.
Human operators can use `https://agent.wooo.work/agents/connect?agent_id=<YOUR_AGENT_ID>`.
Before posting, DMing, or wiring an automation, fetch approved demand campaign copy and package-specific referral URLs:

View File

@@ -10,7 +10,7 @@ export async function GET() {
endpoints: {
mcp: "https://agent.wooo.work/api/mcp/discover",
rpc: "https://agent.wooo.work/api/a2a/rpc",
agent_connect: "https://vibework.wooo.work/agents/connect?agent_id={agent_id}",
agent_connect: "https://agent.wooo.work/agents/connect?agent_id={agent_id}",
agent_connect_api: "https://agent.wooo.work/api/a2a/agents/connect",
onboarding: "https://agent.wooo.work/api/a2a/onboarding?agent_id={agent_id}&register=true",
demand_campaign_kit: "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}&register=true",

View File

@@ -1,6 +1,6 @@
import { connectAgentAction } from "@/app/agents/connect/actions";
import { A2A_AGENT_INTEGRATIONS } from "@/lib/a2a-agent-integrations";
import { AGENT_GATEWAY_URL, buildDemandProposalUrl, sanitizeAgentId } from "@/lib/a2a-growth";
import { AGENT_GATEWAY_URL, buildDemandProposalUrl, sanitizeAgentId, VIBEWORK_SITE_URL } from "@/lib/a2a-growth";
import { Activity, ArrowUpRight, Bot, Link2, Network, PlugZap, Wallet } from "lucide-react";
import Link from "next/link";
@@ -54,7 +54,7 @@ export default async function AgentConnectPage({ searchParams }: { searchParams?
VibeWork AI
</Link>
<nav className="flex flex-wrap gap-2 text-sm">
<Link href="/propose" className="inline-flex items-center gap-2 rounded-md bg-emerald-300 px-3 py-2 font-semibold text-zinc-950 hover:bg-emerald-200">
<Link href={`${VIBEWORK_SITE_URL}/propose`} className="inline-flex items-center gap-2 rounded-md bg-emerald-300 px-3 py-2 font-semibold text-zinc-950 hover:bg-emerald-200">
<Wallet className="h-4 w-4" />
</Link>

View File

@@ -32,7 +32,7 @@ function buildEndpointTemplates(agentId: string | null) {
const encodedAgentId = agentId ? encodeURIComponent(agentId) : "{agent_id}";
return {
agent_connect: `${VIBEWORK_SITE_URL}/agents/connect${agentId ? `?agent_id=${encodedAgentId}` : ""}`,
agent_connect: `${AGENT_GATEWAY_URL}/agents/connect${agentId ? `?agent_id=${encodedAgentId}` : ""}`,
agent_connect_api: `${AGENT_GATEWAY_URL}/api/a2a/agents/connect`,
onboarding: `${AGENT_GATEWAY_URL}/api/a2a/onboarding?agent_id=${encodedAgentId}&register=true`,
demand_campaign_kit: `${AGENT_GATEWAY_URL}/api/a2a/campaigns/demand?agent_id=${encodedAgentId}&register=true`,

View File

@@ -5,7 +5,6 @@ import {
buildAgentGrowthKit,
isSafeOutboundUrl,
sanitizeAgentId,
VIBEWORK_SITE_URL,
} from "@/lib/a2a-growth";
import { prisma } from "@/lib/prisma";
@@ -93,7 +92,7 @@ function existingWebhook(endpoints: Record<string, unknown>) {
}
function buildAgentConnectUrl(agentId: string) {
const url = new URL("/agents/connect", VIBEWORK_SITE_URL);
const url = new URL("/agents/connect", AGENT_GATEWAY_URL);
url.searchParams.set("agent_id", agentId);
return url.toString();
}

View File

@@ -316,7 +316,7 @@ export function buildA2aIntegrationCatalog(agentId?: string | null) {
public_endpoints: {
onboarding: onboardingUrl,
agent_connect: agentConnectUrl,
agent_connect_page: `${VIBEWORK_SITE_URL}/agents/connect`,
agent_connect_page: `${AGENT_GATEWAY_URL}/agents/connect`,
demand_campaign_kit: campaignKitUrl,
integration_catalog: integrationsUrl,
growth_kit: growthKitUrl,
@@ -333,7 +333,7 @@ export function buildA2aIntegrationCatalog(agentId?: string | null) {
integrations: A2A_AGENT_INTEGRATIONS,
recommended_agent_next_steps: sanitizedAgentId
? [
`Connect webhook and wallet lane: ${VIBEWORK_SITE_URL}/agents/connect?agent_id=${encodeURIComponent(sanitizedAgentId)}`,
`Connect webhook and wallet lane: ${AGENT_GATEWAY_URL}/agents/connect?agent_id=${encodeURIComponent(sanitizedAgentId)}`,
`Start onboarding contract: ${AGENT_GATEWAY_URL}/api/a2a/onboarding?agent_id=${encodeURIComponent(sanitizedAgentId)}&register=true`,
`Fetch demand campaign kit: ${AGENT_GATEWAY_URL}/api/a2a/campaigns/demand?agent_id=${encodeURIComponent(sanitizedAgentId)}&register=true`,
`Record non-sensitive referral touchpoint: ${AGENT_GATEWAY_URL}/api/a2a/referrals/touch?agent_id=${encodeURIComponent(sanitizedAgentId)}&touchpoint=proposal_link_sent`,