FOUNDRY
C8 Platform
← Tasks

[AI-05] Goldilocks Harsh Love (prose)

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
Team Harsh Love (prose)
Created
25d ago
Completed
25d ago

Quality

Overall
82%
Pass
PASS
Graded By
-
Graded At
-

Cost

Input Tokens
-
Output Tokens
-
Est. USD
$0.0127

Result

{
  "code": "```typescript\n// EN: ACP Agents Module // VI: Módulo de agentes ACP // ES: Mô-đun ACP Agents\n// SPEC: AI-05\nimport { z } from 'zod';\n\n// EN: BuyerAgent Schema // VI: Lược đồ BuyerAgent // ES: Esquema de BuyerAgent\nconst BuyerAgentSchema = z.object({\n  id: z.string(),\n  budget: z.number().nonnegative(),\n  desiredProduct: z.string().min(1),\n});\ntype BuyerAgent = z.infer<typeof BuyerAgentSchema>;\n\n// EN: SellerAgent Schema // VI: Lược đồ SellerAgent // ES: Esquema de SellerAgent\nconst SellerAgentSchema = z.object({\n  id: z.string(),\n  inventory: z.record(z.string(), z.number().int().nonnegative()), // EN: Inventory is now a record of product IDs to quantities // VI: Inventario ahora es un registro de IDs de productos a cantidades // ES: Kho hiện tại là một bản ghi ID sản phẩm đến số lượng\n  priceList: z.record(z.string(), z.number().nonnegative()),\n});\ntype SellerAgent = z.infer<typeof SellerAgentSchema>;\n\n// EN: MarketplaceAgent Schema // VI: Lược đồ MarketplaceAgent // ES: Esquema de MarketplaceAgent\nconst MarketplaceAgentSchema = z.object({\n  id: z.string(),\n  commissionRate: z.number().nonnegative(),\n});\ntype MarketplaceAgent = z.infer<typeof MarketplaceAgentSchema>;\n\n// EN: createBuyerAgent Function // VI: Hàm createBuyerAgent // ES: Función createBuyerAgent\nfunction createBuyerAgent(id: string, budget: number, desiredProduct: string): BuyerAgent {\n  // EN: Creates a new buyer agent. // VI: Tạo một tác nhân người mua mới. // ES: Crea un nuevo agente comprador.\n  const buyerAgent: BuyerAgent = { id, budget, desiredProduct };\n  const result = BuyerAgentSchema.safeParse(buyerAgent);\n  if (!result.success) {\n    throw new Error(`Invalid BuyerAgent data: ${result.error.message}`);\n  }\n  return buyerAgent;\n}\n\n// EN: createSellerAgent Function // VI: Hàm createSellerAgent // ES: Función createSellerAgent\nfunction createSellerAgent(id: string, inventory: Record<string, number>, priceList: Record<string, number>): SellerAgent {\n  // EN: Creates a new seller agent. // VI: Tạo một tác nhân người bán mới. // ES: Crea un nuevo agente vendedor.\n  const sellerAgent: SellerAgent = { id, inventory, priceList };\n  const result = SellerAgentSchema.safeParse(sellerAgent);\n  if (!result.success) {\n    throw new Error(`Invalid SellerAgent data: ${result.error.message}`);\n  }\n  return sellerAgent;\n}\n\n// EN: ACP Message Types // VI: Tipos de mensajes ACP // ES: Loại tin nhắn ACP\nconst ACPMessageSchema = z.object({\n  type: z.enum(['PROPOSE', 'ACCEPT', 'REJECT']),\n  senderId: z.string(),\n  receiverId: z.string(),\n  productId: z.string(),\n  price: z.number().nonnegative(),\n  quantity: z.number().int().nonnegative().optional(), // EN: Optional quantity for proposals // VI: Cantidad opcional para propuestas // ES: Số lượng tùy chọn cho các đề xuất\n});\ntype ACPMessage = z.infer<typeof ACPMessageSchema>;\n\n// EN: handleTrade Function // VI: Función handleTrade // ES: Hàm handleTrade\nfunction handleTrade(\n  buyer: BuyerAgent,\n  seller: SellerAgent,\n  message: ACPMessage,\n  commissionRate: number\n): { success: boolean; message: string; commission?: number; } {\n  // EN: Handles the agent communication protocol for a trade. // VI: Maneja el protocolo de comunicación del agente para un intercambio. // ES: Xử lý giao thức giao tiếp của tác nhân cho một giao dịch.\n\n    const parsedMessage = ACPMessageSchema.safeParse(message);\n    if (!parsedMessage.success) {\n        return { success: false, message: `Invalid ACP message: ${parsedMessage.error.message}` };\n    }\n\n  if (message.type === 'PROPOSE') {\n    if (buyer.budget < message.price * (message.quantity || 1)) {\n      return { success: false, message: 'Buyer does not have sufficient funds.' };\n    }\n\n    if (!seller.inventory[message.productId] || seller.inventory[message.productId] < (message.quantity || 1)) {\n      return { success: false, message: 'Seller does not have sufficient inventory.' };\n    }\n\n    if (seller.priceList[message.productId] > message.price * 1.10) { // EN: Seller rejects if offer is 10% below price list // VI: El vendedor rechaza si la oferta es 10% inferior a la lista de precios // ES: Người bán từ chối nếu giá thầu thấp hơn 10% so với bảng giá\n        return {success: false, message: \"Seller rejects: Offer too low\"}\n    }\n\n    // EN: Seller accepts the proposal // VI: El vendedor acepta la propuesta // ES: Người bán chấp nhận đề xuất\n    const commission = message.price * (message.quantity || 1) * commissionRate;\n      return { success: true, message: `Trade successful. Commission: ${commission}`, commission: commission };\n\n\n  } else if (message.type === 'ACCEPT') {\n    // EN: In a real system, further validation would occur here to prevent race conditions. // VI: En un sistema real, se realizaría una validación adicional aquí para evitar condiciones de carrera. // ES: Trong một hệ thống thực, xác thực thêm sẽ xảy ra ở đây để ngăn chặn các điều kiện chạy đua.\n      const commission = message.price * (message.quantity || 1) * commissionRate;\n      return { success: true, message: `Trade successful. Commission: ${commission}`, commission: commission };\n  } else if (message.type === 'REJECT') {\n    return { success: false, message: 'Trade rejected by seller.' };\n  }\n\n  return { success: false, message: 'Unexpected message type.' };\n}\n\n// EN: simulateTrade Function // VI: Función simulateTrade // ES: Hàm simulateTrade\nfunction simulateTrade(\n  buyerId: string,\n  sellerId: string,\n  productId: string,\n  price: number,\n  quantity: number,\n  buyerBudget: number,\n  sellerInventory: Record<string, number>,\n  sellerPriceList: Record<string, number>,\n  commissionRate: number\n): { success: boolean; message: string; commission?: number; } {\n  // EN: Orchestrates the interaction between buyer, seller, and marketplace. // VI: Organiza la interacción entre el comprador, el vendedor y el mercado. // ES: Điều phối sự tương tác giữa người mua, người bán và thị trường.\n  try {\n    const buyer = createBuyerAgent(buyerId, buyerBudget, productId);\n    const seller = createSellerAgent(sellerId, sellerInventory, sellerPriceList);\n\n    // EN: Buyer proposes a trade // VI: El comprador propone un intercambio // ES: Người mua đề xuất một giao dịch\n    const proposeMessage: ACPMessage = {\n      type: 'PROPOSE',\n      senderId: buyerId,\n      receiverId: sellerId,\n      productId: productId,\n      price: price,\n      quantity: quantity,\n    };\n\n    const transactionResult = handleTrade(buyer, seller, proposeMessage, commissionRate);\n\n    return { success: transactionResult.success, message: transactionResult.message, commission: transactionResult.commission };\n  } catch (error: any) {\n    return { success: false, message: `Trade simulation error: ${error.message}` };\n  }\n}\n\nexport {\n  BuyerAgentSchema,\n  SellerAgentSchema,\n  MarketplaceAgentSchema,\n  createBuyerAgent,\n  createSellerAgent,\n  handleTrade,\n  simulateTrade,\n  ACPMessageSchema,\n};\n\nexport type {\n    BuyerAgent,\n    SellerAgent,\n    MarketplaceAgent,\n    ACPMessage,\n};\n```",
  "spec_id": "AI-05"
}

Audit Trail (2)

25d agotask_completedTeam Harsh Love (prose)
25d agotask_createdfoundry_goldilocks
Task ID: 3681ef04-9ca2-48fa-9784-249833eca277