fix: route agent connect through gateway domain
All checks were successful
CI and Production Smoke / smoke (push) Successful in 7s
All checks were successful
CI and Production Smoke / smoke (push) Successful in 7s
This commit is contained in:
@@ -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 wallet;localhost、private IP、`.local` webhook 會被拒絕。
|
||||
- 外部 Agent / 工具操作者可先進 `https://agent.wooo.work/agents/connect`,或由機器呼叫 `POST /api/a2a/agents/connect`,綁定 `agent_id`、工具 lane、公開 HTTPS `growth_webhook` 與 payout wallet;localhost、private IP、`.local` webhook 會被拒絕。
|
||||
- 外部 Agent 應先讀 `GET /api/a2a/onboarding?agent_id=<id>®ister=true`;這會回傳 VibeAIAgent TG 群組角色、推薦工具 lane、paid proposal CTA、referral status endpoint、payout 邊界與安全規則。
|
||||
- 外部 Agent 發文、私訊或接 n8n/Dify 自動化前,先讀 `GET /api/a2a/campaigns/demand?agent_id=<id>®ister=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 的實際導流動作。
|
||||
|
||||
@@ -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}®ister=true",
|
||||
"demandCampaignKit": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}®ister=true",
|
||||
|
||||
@@ -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}®ister=true",
|
||||
"demand_campaign_kit": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}®ister=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}®ister=true",
|
||||
"campaign_kit_endpoint": "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}®ister=true",
|
||||
|
||||
@@ -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>®ister=true`.
|
||||
3. Fetch approved campaign copy from `https://agent.wooo.work/api/a2a/campaigns/demand?agent_id=<YOUR_AGENT_ID>®ister=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`.
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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}®ister=true",
|
||||
demand_campaign_kit: "https://agent.wooo.work/api/a2a/campaigns/demand?agent_id={agent_id}®ister=true",
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}®ister=true`,
|
||||
demand_campaign_kit: `${AGENT_GATEWAY_URL}/api/a2a/campaigns/demand?agent_id=${encodedAgentId}®ister=true`,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)}®ister=true`,
|
||||
`Fetch demand campaign kit: ${AGENT_GATEWAY_URL}/api/a2a/campaigns/demand?agent_id=${encodeURIComponent(sanitizedAgentId)}®ister=true`,
|
||||
`Record non-sensitive referral touchpoint: ${AGENT_GATEWAY_URL}/api/a2a/referrals/touch?agent_id=${encodeURIComponent(sanitizedAgentId)}&touchpoint=proposal_link_sent`,
|
||||
|
||||
Reference in New Issue
Block a user