FOUNDRY
C8 Platform
← Tasks

[AI-05] ACP choreography (Team Alpha)

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 Alpha
Created
25d ago
Completed
25d ago

Quality

Overall
88%
Pass
PASS
Graded By
-
Graded At
-

Cost

Input Tokens
-
Output Tokens
-
Est. USD
$0.7216

Result

{
  "code": "```typescript\n// src/lib/acp-agents.ts\n// EN: ACP (Agent Communication Protocol) module for buyer/seller marketplace agents\n// VI: Module ACP (Giao thức Giao tiếp Đại lý) cho các đại lý mua/bán trên sàn giao dịch\n// ES: Módulo ACP (Protocolo de Comunicación de Agentes) para agentes comprador/vendedor del mercado\n// SPEC: AI-05 ACP Agent-to-Agent Choreography\n\nimport { z } from 'zod';\nimport { v4 as uuidv4 } from 'uuid';\n\n// ============================================================================\n// SECTION: Core ACP Enums and Schemas\n// EN: Define protocol vocabulary and message types for agent communication\n// VI: Định nghĩa từ vựng giao thức và các loại tin nhắn cho giao tiếp đại lý\n// ES: Definir vocabulario del protocolo y tipos de mensajes para comunicación de agentes\n// ============================================================================\n\n/**\n * EN: ACP Message Types defining the protocol vocabulary\n * VI: Các loại tin nhắn ACP định nghĩa từ vựng giao thức\n * ES: Tipos de mensajes ACP que definen el vocabulario del protocolo\n */\nexport const ACPMessageTypeEnum = z.enum([\n  'DISCOVERY_QUERY',      // EN: Buyer looking for items | VI: Người mua tìm kiếm sản phẩm | ES: Comprador buscando artículos\n  'DISCOVERY_RESPONSE',   // EN: Seller/Marketplace listing items | VI: Người bán/Sàn liệt kê sản phẩm | ES: Vendedor/Mercado listando artículos\n  'NEGOTIATION_OFFER',    // EN: Price/Term proposal | VI: Đề xuất giá/điều khoản | ES: Propuesta de precio/términos\n  'NEGOTIATION_COUNTER',  // EN: Counter-offer | VI: Đề xuất ngược | ES: Contraoferta\n  'AGREEMENT_COMMIT',     // EN: Formal acceptance | VI: Chấp nhận chính thức | ES: Aceptación formal\n  'AGREEMENT_REJECT',     // EN: Formal rejection | VI: Từ chối chính thức | ES: Rechazo formal\n  'TRANSACTION_FINALIZE', // EN: Payment/Escrow trigger | VI: Kích hoạt thanh toán/ký quỹ | ES: Activación de pago/depósito\n]);\n\nexport type ACPMessageType = z.infer<typeof ACPMessageTypeEnum>;\n\n/**\n * EN: Item Condition Enum for GarageSale marketplace\n * VI: Enum tình trạng sản phẩm cho sàn GarageSale\n * ES: Enum de condición del artículo para el mercado GarageSale\n */\nexport const ItemConditionEnum = z.enum([\n  'NEW',              // EN: Brand new, unused | VI: Hoàn toàn mới, chưa sử dụng | ES: Nuevo, sin usar\n  'LIKE_NEW',         // EN: Used but like new | VI: Đã qua sử dụng nhưng như mới | ES: Usado pero como nuevo\n  'GOOD',             // EN: Good condition | VI: Tình trạng tốt | ES: Buena condición\n  'FAIR',             // EN: Fair condition | VI: Tình trạng khá | ES: Condición aceptable\n  'POOR',             // EN: Poor condition | VI: Tình trạng kém | ES: Mala condición\n]);\n\nexport type ItemCondition = z.infer<typeof ItemConditionEnum>;\n\n/**\n * EN: Delivery Method Enum for local pickup vs shipping\n * VI: Enum phương thức giao hàng cho nhận tại chỗ và vận chuyển\n * ES: Enum de método de entrega para recogida local vs envío\n */\nexport const DeliveryMethodEnum = z.enum([\n  'LOCAL_PICKUP',     // EN: Buyer picks up locally | VI: Người mua nhận tại chỗ | ES: Recogida local por el comprador\n  'SHIPPING',         // EN: Seller ships to buyer | VI: Người bán gửi cho người mua | ES: Vendedor envía al comprador\n  'BOTH',             // EN: Either option available | VI: Cả hai tùy chọn | ES: Ambas opciones disponibles\n]);\n\nexport type DeliveryMethod = z.infer<typeof DeliveryMethodEnum>;\n\n/**\n * EN: Payment Method Enum for transaction handling\n * VI: Enum phương thức thanh toán cho xử lý giao dịch\n * ES: Enum de método de pago para manejo de transacciones\n */\nexport const PaymentMethodEnum = z.enum([\n  'CASH',             // EN: Cash payment | VI: Thanh toán tiền mặt | ES: Pago en efectivo\n  'ESCROW',           // EN: Platform escrow | VI: Ký quỹ nền tảng | ES: Depósito de plataforma\n  'CRYPTO',           // EN: Cryptocurrency | VI: Tiền điện tử | ES: Criptomoneda\n  'BANK_TRANSFER',    // EN: Direct bank transfer | VI: Chuyển khoản ngân hàng | ES: Transferencia bancaria\n]);\n\nexport type PaymentMethod = z.infer<typeof PaymentMethodEnum>;\n\n/**\n * EN: Agent State Enums for Buyer and Seller\n * VI: Enum trạng thái đại lý cho Người mua và Người bán\n * ES: Enums de estado del agente para Comprador y Vendedor\n */\nexport const BuyerStateEnum = z.enum([\n  'IDLE',               // EN: Not actively searching | VI: Không tích cực tìm kiếm | ES: No buscando activamente\n  'SEARCHING',          // EN: Looking for items | VI: Đang tìm kiếm sản phẩm | ES: Buscando artículos\n  'NEGOTIATING',        // EN: In negotiation | VI: Đang đàm phán | ES: En negociación\n  'AWAITING_DELIVERY',  // EN: Waiting for fulfillment | VI: Chờ giao hàng | ES: Esperando entrega\n]);\n\nexport const SellerStateEnum = z.enum([\n  'IDLE',       // EN: No active listings | VI: Không có danh sách hoạt động | ES: Sin listados activos\n  'LISTED',     // EN: Items available | VI: Sản phẩm có sẵn | ES: Artículos disponibles\n  'NEGOTIATING',// EN: In negotiation | VI: Đang đàm phán | ES: En negociación\n  'FULFILLING', // EN: Processing order | VI: Đang xử lý đơn hàng | ES: Procesando pedido\n]);\n\nexport const MarketplaceStateEnum = z.enum([\n  'IDLE',       // EN: Waiting for requests | VI: Chờ yêu cầu | ES: Esperando solicitudes\n  'MATCHING',   // EN: Finding matches | VI: Đang tìm kiếm kết quả phù hợp | ES: Buscando coincidencias\n  'ARBITRATING',// EN: Resolving disputes | VI: Giải quyết tranh chấp | ES: Resolviendo disputas\n]);\n\nexport const ChoreographyStateEnum = z.enum([\n  'INIT',                 // EN: Conversation not started | VI: Cuộc hội thoại chưa bắt đầu | ES: Conversación no iniciada\n  'DISCOVERY',            // EN: Discovery phase | VI: Giai đoạn khám phá | ES: Fase de descubrimiento\n  'NEGOTIATION',          // EN: Negotiation phase | VI: Giai đoạn đàm phán | ES: Fase de negociación\n  'AGREEMENT_PENDING',    // EN: Awaiting agreement | VI: Chờ thỏa thuận | ES: Esperando acuerdo\n  'AGREED',               // EN: Agreement reached | VI: Đã đạt thỏa thuận | ES: Acuerdo alcanzado\n  'REJECTED',             // EN: Agreement rejected | VI: Thỏa thuận bị từ chối | ES: Acuerdo rechazado\n  'FINALIZED',            // EN: Transaction complete | VI: Giao dịch hoàn tất | ES: Transacción completada\n  'EXPIRED',              // EN: Conversation timed out | VI: Cuộc hội thoại đã hết hạn | ES: Conversación expirada\n]);\n\nexport type BuyerState = z.infer<typeof BuyerStateEnum>;\nexport type SellerState = z.infer<typeof SellerStateEnum>;\nexport type MarketplaceState = z.infer<typeof MarketplaceStateEnum>;\nexport type ChoreographyState = z.infer<typeof ChoreographyStateEnum>;\n\n// ============================================================================\n// SECTION: Constants and Limits\n// EN: Define safe limits for numeric values to prevent overflow\n// VI: Định nghĩa giới hạn an toàn cho giá trị số để ngăn tràn số\n// ES: Definir límites seguros para valores numéricos para prevenir desbordamiento\n// ============================================================================\n\nconst MAX_PRICE = 1_000_000_000; // EN: 1 billion max | VI: Tối đa 1 tỷ | ES: Máximo 1 billón\nconst MAX_QUANTITY = 1_000_000;  // EN: 1 million max | VI: Tối đa 1 triệu | ES: Máximo 1 millón\nconst MAX_RATING = 5;            // EN: 5-star rating | VI: Đánh giá 5 sao | ES: Calificación de 5 estrellas\nconst MIN_RATING = 0;            // EN: Minimum rating | VI: Đánh giá tối thiểu | ES: Calificación mínima\n\n/**\n * EN: ACP Header Schema - metadata for every message\n * VI: Schema Header ACP - siêu dữ liệu cho mọi tin nhắn\n * ES: Esquema de encabezado ACP - metadatos para cada mensaje\n */\nexport const ACPHeaderSchema = z.object({\n  messageId: z.string().uuid(),\n  conversationId: z.string().uuid(),\n  senderId: z.string().trim().min(1),\n  receiverId: z.string().trim().min(1),\n  timestamp: z.number().positive().max(Number.MAX_SAFE_INTEGER),\n  type: ACPMessageTypeEnum,\n});\n\nexport type ACPHeader = z.infer<typeof ACPHeaderSchema>;\n\n// ============================================================================\n// SECTION: Payload Schemas for Different Message Types\n// EN: Type-specific payload validation for each message type\n// VI: Xác thực payload theo loại cho từng loại tin nhắn\n// ES: Validación de carga útil específica por tipo para cada tipo de mensaje\n// ============================================================================\n\n/**\n * EN: Discovery Query Payload - buyer search criteria\n * VI: Payload truy vấn khám phá - tiêu chí tìm kiếm của người mua\n * ES: Carga útil de consulta de descubrimiento - criterios de búsqueda del comprador\n */\nexport const DiscoveryQueryPayloadSchema = z.object({\n  keywords: z.array(z.string().trim().min(1)).min(1),\n  maxPrice: z.number().positive().max(MAX_PRICE).optional(),\n  minCondition: ItemConditionEnum.optional(),\n  preferredDelivery: DeliveryMethodEnum.optional(),\n  location: z.string().trim().min(1).optional(),\n});\n\nexport type DiscoveryQueryPayload = z.infer<typeof DiscoveryQueryPayloadSchema>;\n\n/**\n * EN: Discovery Response Payload - matching items from seller/marketplace\n * VI: Payload phản hồi khám phá - sản phẩm phù hợp từ người bán/sàn giao dịch\n * ES: Carga útil de respuesta de descubrimiento - artículos coincidentes del vendedor/mercado\n */\nexport const DiscoveryResponsePayloadSchema = z.object({\n  items: z.array(z.object({\n    itemId: z.string().trim().min(1),\n    name: z.string().trim().min(1),\n    price: z.number().positive().max(MAX_PRICE),\n    condition: ItemConditionEnum,\n    sellerId: z.string().trim().min(1),\n    sellerRating: z.number().min(MIN_RATING).max(MAX_RATING).optional(),\n  })),\n  totalMatches: z.number().int().nonnegative(),\n});\n\nexport type DiscoveryResponsePayload = z.infer<typeof DiscoveryResponsePayloadSchema>;\n\n/**\n * EN: Negotiation Offer/Counter Payload - price and terms proposal\n * VI: Payload đề xuất/phản đề đàm phán - đề xuất giá và điều khoản\n * ES: Carga útil de oferta/contraoferta de negociación - propuesta de precio y términos\n */\nexport const NegotiationPayloadSchema = z.object({\n  itemId: z.string().trim().min(1),\n  offeredPrice: z.number().positive().max(MAX_PRICE),\n  quantity: z.number().int().positive().max(MAX_QUANTITY),\n  deliveryMethod: DeliveryMethodEnum,\n  paymentMethod: PaymentMethodEnum,\n  roundNumber: z.number().int().positive().max(100), // EN: Max 100 rounds | VI: Tối đa 100 vòng | ES: Máximo 100 rondas\n  expiresAt: z.number().positive().max(Number.MAX_SAFE_INTEGER),\n  message: z.string().max(1000).optional(),\n});\n\nexport type NegotiationPayload = z.infer<typeof NegotiationPayloadSchema>;\n\n/**\n * EN: Agreement Payload - final terms of agreement or rejection reason\n * VI: Payload thỏa thuận - điều khoản cuối cùng hoặc lý do từ chối\n * ES: Carga útil de acuerdo - términos finales del acuerdo o razón de rechazo\n */\nexport const AgreementPayloadSchema = z.object({\n  itemId: z.string().trim().min(1),\n  finalPrice: z.number().positive().max(MAX_PRICE),\n  quantity: z.number().int().positive().max(MAX_QUANTITY),\n  deliveryMethod: DeliveryMethodEnum,\n  paymentMethod: PaymentMethodEnum,\n  rejectionReason: z.string().max(500).optional(),\n});\n\nexport type AgreementPayload = z.infer<typeof AgreementPayloadSchema>;\n\n/**\n * EN: Transaction Finalize Payload - payment and escrow details\n * VI: Payload hoàn tất giao dịch - chi tiết thanh toán và ký quỹ\n * ES: Carga útil de finalización de transacción - detalles de pago y depósito\n */\nexport const TransactionFinalizePayloadSchema = z.object({\n  itemId: z.string().trim().min(1),\n  transactionId: z.string().uuid(),\n  totalAmount: z.number().positive().max(MAX_PRICE),\n  paymentMethod: PaymentMethodEnum,\n  escrowAddress: z.string().trim().min(1).optional(),\n  paymentReference: z.string().trim().min(1).optional(),\n});\n\nexport type TransactionFinalizePayload = z.infer<typeof TransactionFinalizePayloadSchema>;\n\n/**\n * EN: Generic Payloa",
  "spec_id": "AI-05"
}

Audit Trail (2)

25d agotask_completedTeam Alpha
25d agotask_createdfoundry_collab
Task ID: 961a5d19-4488-4a8a-bda3-a7564382f13a