← Tasks
[AI-05] ACP choreography (G3 Flash)
completedcode_genP3
Description
## AI-05: ACP agent-to-agent choreography
Section: AI Features | Milestone: M4
### Requirements
Implement an ACP (Agent Communication Protocol) module for buyer/seller marketplace agents.
### Acceptance Criteria
- File src/lib/acp-agents.ts must contain: agent choreography, acp, buyer_agent, seller_agent
### Codebase Conventions
- Trilingual comments: // EN: ... // VI: ... // ES: ...
- SPEC section refs in comments
- Zod at module level with .safeParse()
- NextResponse.json() responses
Write
Assignee
-
Claimed By
G3 Flash
Created
25d ago
Completed
25d ago
Quality
Overall
80%
Pass
PASS
Graded By
-
Graded At
-
Cost
Input Tokens
168
Output Tokens
1,609
Est. USD
$0.0007
Result
{
"code": "```typescript\n// EN: Agent Communication Protocol (ACP) module for marketplace agents.\n// VI: Mô-đun Giao thức Giao tiếp Giữa các Agent (ACP) cho các agent của thị trường.\n// ES: Módulo de Protocolo de Comunicación de Agentes (ACP) para agentes de mercado.\n\n// SPEC: This module defines the ACP for buyer and seller agents.\n\nimport { z } from \"zod\";\nimport { NextResponse } from \"next/server\";\n\n// EN: Define Zod schemas for the agents.\n// VI: Định nghĩa các lược đồ Zod cho các agent.\n// ES: Definir esquemas Zod para los agentes.\n\nconst BuyerAgentSchema = z.object({\n id: z.string(),\n budget: z.number().positive(),\n preferences: z.array(z.string()),\n});\n\nconst SellerAgentSchema = z.object({\n id: z.string(),\n inventory: z.array(z.string()),\n pricingStrategy: z.string(),\n});\n\nconst MarketplaceAgentSchema = z.object({\n id: z.string(),\n rules: z.array(z.string()),\n});\n\n// EN: Define TypeScript types based on the Zod schemas.\n// VI: Định nghĩa các kiểu TypeScript dựa trên các lược đồ Zod.\n// ES: Definir tipos de TypeScript basados en los esquemas Zod.\n\nexport type BuyerAgent = z.infer<typeof BuyerAgentSchema>;\nexport type SellerAgent = z.infer<typeof SellerAgentSchema>;\nexport type MarketplaceAgent = z.infer<typeof MarketplaceAgentSchema>;\n\n// EN: ACP messages\n// VI: Tin nhắn ACP\n// ES: Mensajes ACP\n\nconst OfferSchema = z.object({\n itemId: z.string(),\n price: z.number().positive(),\n});\n\nexport type Offer = z.infer<typeof OfferSchema>;\n\nconst PurchaseOrderSchema = z.object({\n itemId: z.string(),\n quantity: z.number().positive(),\n agreedPrice: z.number().positive(),\n});\n\nexport type PurchaseOrder = z.infer<typeof PurchaseOrderSchema>;\n\n// EN: Agent choreography functions\n// VI: Các hàm biên đạo agent\n// ES: Funciones de coreografía de agentes\n\n// EN: Buyer agent makes an offer.\n// VI: Agent mua đưa ra một đề nghị.\n// ES: El agente comprador hace una oferta.\nexport async function makeOffer(\n sellerId: string,\n offer: Offer\n): Promise<NextResponse> {\n // EN: Simulate sending the offer to the seller agent.\n // VI: Mô phỏng việc gửi đề nghị đến agent bán.\n // ES: Simular el envío de la oferta al agente vendedor.\n\n const offerResult = OfferSchema.safeParse(offer);\n\n if (!offerResult.success) {\n return NextResponse.json(\n { error: \"Invalid offer format\", details: offerResult.error.issues },\n { status: 400 }\n );\n }\n console.log(`EN: Buyer sent offer to seller ${sellerId}: ${JSON.stringify(offer)}`);\n console.log(`VI: Người mua đã gửi đề nghị cho người bán ${sellerId}: ${JSON.stringify(offer)}`);\n console.log(`ES: El comprador envió la oferta al vendedor ${sellerId}: ${JSON.stringify(offer)}`);\n\n return NextResponse.json({ message: \"Offer sent\", offer: offerResult.data }, { status: 200 });\n}\n\n// EN: Seller agent accepts an offer.\n// VI: Agent bán chấp nhận một đề nghị.\n// ES: El agente vendedor acepta una oferta.\nexport async function acceptOffer(\n buyerId: string,\n purchaseOrder: PurchaseOrder\n): Promise<NextResponse> {\n // EN: Simulate accepting the offer and creating a purchase order.\n // VI: Mô phỏng việc chấp nhận đề nghị và tạo đơn đặt hàng.\n // ES: Simular la aceptación de la oferta y la creación de una orden de compra.\n\n const purchaseOrderResult = PurchaseOrderSchema.safeParse(purchaseOrder);\n if (!purchaseOrderResult.success) {\n return NextResponse.json(\n { error: \"Invalid purchase order format\", details: purchaseOrderResult.error.issues },\n { status: 400 }\n );\n }\n\n console.log(`EN: Seller accepted offer from buyer ${buyerId}: ${JSON.stringify(purchaseOrder)}`);\n console.log(`VI: Người bán đã chấp nhận đề nghị từ người mua ${buyerId}: ${JSON.stringify(purchaseOrder)}`);\n console.log(`ES: El vendedor aceptó la oferta del comprador ${buyerId}: ${JSON.stringify(purchaseOrder)}`);\n\n return NextResponse.json({ message: \"Offer accepted\", purchaseOrder: purchaseOrderResult.data }, { status: 200 });\n}\n\n// EN: Seller agent rejects an offer.\n// VI: Agent bán từ chối một đề nghị.\n// ES: El agente vendedor rechaza una oferta.\nexport async function rejectOffer(buyerId: string, reason: string): Promise<NextResponse> {\n // EN: Simulate rejecting the offer.\n // VI: Mô phỏng việc từ chối đề nghị.\n // ES: Simular el rechazo de la oferta.\n console.log(`EN: Seller rejected offer from buyer ${buyerId}: ${reason}`);\n console.log(`VI: Người bán đã từ chối đề nghị từ người mua ${buyerId}: ${reason}`);\n console.log(`ES: El vendedor rechazó la oferta del comprador ${buyerId}: ${reason}`);\n\n return NextResponse.json({ message: \"Offer rejected\", reason }, { status: 200 });\n}\n\n// EN: Example usage\n// VI: Ví dụ sử dụng\n// ES: Ejemplo de uso\n\nasync function exampleUsage() {\n const buyer: BuyerAgent = {\n id: \"buyer123\",\n budget: 100,\n preferences: [\"itemA\", \"itemB\"],\n };\n\n const seller: SellerAgent = {\n id: \"seller456\",\n inventory: [\"itemA\", \"itemC\"],\n pricingStrategy: \"fixed\",\n };\n\n const marketplace: MarketplaceAgent = {\n id: \"marketplace789\",\n rules: [\"no_fraud\", \"fair_pricing\"],\n };\n\n const offer: Offer = {\n itemId: \"itemA\",\n price: 50,\n };\n\n const purchaseOrder: PurchaseOrder = {\n itemId: \"itemA\",\n quantity: 1,\n agreedPrice: 50,\n };\n\n const offerResponse = await makeOffer(seller.id, offer);\n console.log(\"Offer Response:\", await offerResponse.json());\n\n const acceptResponse = await acceptOffer(buyer.id, purchaseOrder);\n console.log(\"Accept Response:\", await acceptResponse.json());\n\n const rejectResponse = await rejectOffer(buyer.id, \"Price too low\");\n console.log(\"Reject Response:\", await rejectResponse.json());\n}\n\n// exampleUsage(); // Commented out to avoid execution during module import.\n```",
"spec_id": "AI-05"
}Audit Trail (2)
25d agotask_completedG3 Flash
25d agotask_createdfoundry_race
Task ID: 7e9d83fa-0eab-4cdf-82ca-78ecda9a87a9