FOUNDRY
C8 Platform
← Tasks

[AI-05] Goldilocks Cost Zero (structured)

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 Cost Zero (structured)
Created
25d ago
Completed
25d ago

Quality

Overall
79%
Pass
PASS
Graded By
-
Graded At
-

Cost

Input Tokens
-
Output Tokens
-
Est. USD
$0.0003

Result

{
  "code": "```typescript\n// EN: ACP (Agent Communication Protocol) module for buyer/seller marketplace agents. // VI: Mô-đun ACP (Giao thức giao tiếp giữa các tác nhân) cho các tác nhân thị trường người mua/người bán. // ES: Módulo ACP (Protocolo de Comunicación entre Agentes) para agentes de mercado comprador/vendedor.\n// SPEC: AI-05\n\nimport { z } from \"zod\";\n\n// EN: Define ACP message types. // VI: Xác định các loại tin nhắn ACP. // ES: Definir los tipos de mensajes ACP.\n// SPEC: AI-05\nexport enum ACPMessageType {\n  Offer = \"Offer\",\n  CounterOffer = \"CounterOffer\",\n  Accept = \"Accept\",\n  Reject = \"Reject\",\n  Query = \"Query\",\n  Information = \"Information\",\n}\n\n// EN: ACP Message type definition. // VI: Định nghĩa kiểu Tin nhắn ACP. // ES: Definición del tipo de Mensaje ACP.\n// SPEC: AI-05\nexport type ACPMessage = {\n  type: ACPMessageType;\n  sender: string;\n  receiver: string;\n  payload?: any;\n};\n\n// EN: Agent type definition. // VI: Định nghĩa kiểu Agent. // ES: Definición del tipo Agente.\n// SPEC: AI-05\nexport type Agent = {\n  id: string;\n  type: string;\n  handleMessage: (message: ACPMessage) => ACPMessage | null;\n};\n\n// EN: Zod schema for ACPMessage validation. // VI: Lược đồ Zod để xác thực ACPMessage. // ES: Esquema Zod para la validación de ACPMessage.\n// SPEC: AI-05\nexport const ACPMessageSchema = z.object({\n  type: z.nativeEnum(ACPMessageType),\n  sender: z.string(),\n  receiver: z.string(),\n  payload: z.any().optional(),\n});\n\n// EN: BuyerAgent class definition. // VI: Định nghĩa lớp BuyerAgent. // ES: Definición de la clase BuyerAgent.\n// SPEC: AI-05\nexport class BuyerAgent implements Agent {\n  id: string;\n  type: string = \"Buyer\";\n\n  constructor(id: string) {\n    this.id = id;\n  }\n\n  handleMessage(message: ACPMessage): ACPMessage | null {\n    // EN: Process incoming messages and potentially respond. // VI: Xử lý tin nhắn đến và có khả năng phản hồi. // ES: Procesar los mensajes entrantes y potencialmente responder.\n    // SPEC: AI-05\n    console.log(`Buyer ${this.id} received message: ${JSON.stringify(message)}`);\n\n    if (message.type === ACPMessageType.Offer) {\n      // EN: Evaluate the offer and potentially make a counter-offer. // VI: Đánh giá ưu đãi và có khả năng đưa ra một ưu đãi phản hồi. // ES: Evaluar la oferta y potencialmente hacer una contraoferta.\n      // SPEC: AI-05\n      const offerPrice = message.payload?.price;\n      if (offerPrice && offerPrice > 100) {\n        const counterOffer: ACPMessage = {\n          type: ACPMessageType.CounterOffer,\n          sender: this.id,\n          receiver: message.sender,\n          payload: { price: offerPrice * 0.9 }, // EN: Counter-offer with 10% discount. // VI: Ưu đãi phản hồi với chiết khấu 10%. // ES: Contraoferta con un descuento del 10%.\n        };\n        return counterOffer;\n      } else {\n        const acceptOffer: ACPMessage = {\n          type: ACPMessageType.Accept,\n          sender: this.id,\n          receiver: message.sender,\n          payload: {},\n        };\n        return acceptOffer;\n      }\n    } else if (message.type === ACPMessageType.Information) {\n      console.log(`Buyer ${this.id} received information: ${JSON.stringify(message.payload)}`);\n      return null;\n    } else if (message.type === ACPMessageType.Reject) {\n      console.log(`Buyer ${this.id} received rejection: ${JSON.stringify(message.payload)}`);\n      return null;\n    }\n\n    return null; // EN: No response. // VI: Không có phản hồi. // ES: Sin respuesta.\n  }\n}\n\n// EN: SellerAgent class definition. // VI: Định nghĩa lớp SellerAgent. // ES: Definición de la clase SellerAgent.\n// SPEC: AI-05\nexport class SellerAgent implements Agent {\n  id: string;\n  type: string = \"Seller\";\n\n  constructor(id: string) {\n    this.id = id;\n  }\n\n  handleMessage(message: ACPMessage): ACPMessage | null {\n    // EN: Process incoming messages and potentially respond. // VI: Xử lý tin nhắn đến và có khả năng phản hồi. // ES: Procesar los mensajes entrantes y potencialmente responder.\n    // SPEC: AI-05\n    console.log(`Seller ${this.id} received message: ${JSON.stringify(message)}`);\n\n    if (message.type === ACPMessageType.Query) {\n      // EN: Respond to a query with an offer. // VI: Trả lời một truy vấn bằng một ưu đãi. // ES: Responder a una consulta con una oferta.\n      // SPEC: AI-05\n      const offer: ACPMessage = {\n        type: ACPMessageType.Offer,\n        sender: this.id,\n        receiver: message.sender,\n        payload: { price: 120 },\n      };\n      return offer;\n    } else if (message.type === ACPMessageType.CounterOffer) {\n      // EN: Accept counter offer. // VI: Chấp nhận đề nghị ngược lại. // ES: Aceptar contraoferta.\n      // SPEC: AI-05\n      const acceptOffer: ACPMessage = {\n        type: ACPMessageType.Accept,\n        sender: this.id,\n        receiver: message.sender,\n        payload: {},\n      };\n      return acceptOffer;\n    } else if (message.type === ACPMessageType.Accept) {\n      console.log(`Seller ${this.id} accepted offer from ${message.sender}`);\n      return null;\n    } else if (message.type === ACPMessageType.Information) {\n      console.log(`Seller ${this.id} received information: ${JSON.stringify(message.payload)}`);\n      return null;\n    } else if (message.type === ACPMessageType.Reject) {\n      console.log(`Seller ${this.id} received rejection: ${JSON.stringify(message.payload)}`);\n      return null;\n    }\n\n    return null; // EN: No response. // VI: Không có phản hồi. // ES: Sin respuesta.\n  }\n}\n\n// EN: MarketplaceAgent class definition. // VI: Định nghĩa lớp MarketplaceAgent. // ES: Definición de la clase MarketplaceAgent.\n// SPEC: AI-05\nexport class MarketplaceAgent implements Agent {\n  id: string;\n  type: string = \"Marketplace\";\n  private listings: { [itemId: string]: { sellerId: string; price: number } } = {};\n\n  constructor(id: string) {\n    this.id = id;\n  }\n\n  addListing(itemId: string, sellerId: string, price: number): void {\n    this.listings[itemId] = { sellerId: sellerId, price: price };\n    console.log(`Marketplace added listing: Item ${itemId} from Seller ${sellerId} for $${price}`);\n  }\n\n  findListing(itemId: string): { sellerId: string; price: number } | undefined {\n    return this.listings[itemId];\n  }\n\n  handleMessage(message: ACPMessage): ACPMessage | null {\n    // EN: Handle messages related to listings and transactions. // VI: Xử lý tin nhắn liên quan đến danh sách và giao dịch. // ES: Manejar mensajes relacionados con listados y transacciones.\n    // SPEC: AI-05\n\n    switch (message.type) {\n      case ACPMessageType.Query:\n        // EN: If the message is a query, attempt to find a listing. // VI: Nếu tin nhắn là một truy vấn, hãy cố gắng tìm một danh sách. // ES: Si el mensaje es una consulta, intente encontrar un listado.\n        const itemId = message.payload?.itemId;\n        if (itemId) {\n          const listing = this.findListing(itemId);\n          if (listing) {\n            return {\n              type: ACPMessageType.Information,\n              sender: this.id,\n              receiver: message.sender,\n              payload: listing,\n            };\n          } else {\n            return {\n              type: ACPMessageType.Reject,\n              sender: this.id,\n              receiver: message.sender,\n              payload: { reason: `Item ${itemId} not found.` },\n            };\n          }\n        } else {\n          return {\n            type: ACPMessageType.Reject,\n            sender: this.id,\n            receiver: message.sender,\n            payload: { reason: \"Item ID missing in query.\" },\n          };\n        }\n      default:\n        console.log(`Marketplace received message: ${JSON.stringify(message)}`);\n        return null;\n    }\n  }\n}\n\n// EN: Executes the Agent Communication Protocol. // VI: Thực thi Giao thức giao tiếp giữa các tác nhân. // ES: Ejecuta el Protocolo de Comunicación entre Agentes.\n// SPEC: AI-05\nexport function executeACP(\n  buyer: BuyerAgent,\n  seller: SellerAgent,\n  initialMessage: ACPMessage\n): ACPMessage | null {\n  // EN: Simulate message exchange between buyer and seller. // VI: Mô phỏng trao đổi tin nhắn giữa người mua và người bán. // ES: Simular el intercambio de mensajes entre comprador y vendedor.\n  // SPEC: AI-05\n\n  const validationResult = ACPMessageSchema.safeParse(initialMessage);\n  if (!validationResult.success) {\n    console.error(\"Invalid initial message:\", validationResult.error);\n    return null;\n  }\n\n  let message: ACPMessage | null = initialMessage;\n  let response: ACPMessage | null = null;\n  let i = 0; // EN: Counter to prevent infinite loops // VI: Bộ đếm để ngăn chặn vòng lặp vô hạn // ES: Contador para evitar bucles infinitos\n  const max_iterations = 10;\n\n  while (message && i < max_iterations) {\n    i++;\n    console.log(`Iteration ${i}`);\n\n    // Check for missing or invalid payload\n    if (!message.payload) {\n      console.warn(`Message payload is missing or invalid: ${JSON.stringify(message)}`);\n    }\n\n    response = seller.handleMessage(message);\n    if (response) {\n      console.log(`Seller responded: ${JSON.stringify(response)}`);\n      message = response;\n      response = buyer.handleMessage(message);\n\n      if (response) {\n        console.log(`Buyer responded: ${JSON.stringify(response)}`);\n        message = response;\n      } else {\n        message = null;\n      }\n    } else {\n      message = null;\n    }\n  }\n\n  if (i === max_iterations) {\n    console.warn(\"Max iterations reached. Terminating ACP.\"); // EN: Warn if max iterations reached // VI: Cảnh báo nếu đạt số lần lặp tối đa // ES: Advertencia si se alcanza el número máximo de iteraciones\n  }\n\n  return response;\n}\n```",
  "spec_id": "AI-05"
}

Audit Trail (2)

25d agotask_completedTeam Cost Zero (structured)
25d agotask_createdfoundry_goldilocks
Task ID: 33979ad7-e65b-4a8f-b064-f5d925e73344