← Files ChatFoodARCHIVED FILE

plugin.json

11.9 KB · Nov 15, 2026 · 07:30 UTC

↓ Download file

{
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "ChatFood",
        "shortDescription": "Order food by chatting",
        "longDescription": "Find participating restaurants, browse menus with photos and prices, and build your cart through conversation. Connect your WhatsFood account to adjust items, save an authorized delivery address, and review orders for delivery or pickup. Before sending an order, check the items, fulfillment method, address, delivery fee, and total, then approve the summary. Payment happens outside ChatGPT through the order\u2019s official payment link. View your orders and their available status. Each cart contains items from one restaurant. Availability and delivery coverage depend on the restaurant; items with required options may need the restaurant\u2019s website or WhatsApp. ChatFood does not provide table reservations, order cancellations, or refunds through chat.",
        "category": "Other",
        "capabilities": [
          "Read",
          "Write"
        ],
        "defaultPrompt": [
          "Quero um hamb\u00farguer com batata",
          "Mostre os restaurantes de pizza participantes",
          "Revise meu carrinho e o total com entrega"
        ],
        "developerName": "Touch llc",
        "logo": "./assets/chatfood-logo.png",
        "composerIcon": "./assets/chatfood-logo.png",
        "brandColor": "#FF6B35",
        "websiteURL": "https://touch-irl.com/chatfood",
        "supportURL": "https://touch-irl.com/chatfood/suporte",
        "privacyPolicyURL": "https://touch-irl.com/chatfood/privacidade",
        "termsOfServiceURL": "https://touch-irl.com/chatfood/termos"
      },
      "review": {
        "prompts": [
          "Quero um hamb\u00farguer e batata, sem adicionar ao carrinho ainda.",
          "Mostre o card\u00e1pio da pizzaria que eu escolher.",
          "Revise meu pedido antes de confirmar.",
          "Qual \u00e9 o status do pedido que eu selecionei?"
        ],
        "test_cases": {
          "positive": [
            {
              "description": "P1 \u2014 Busca de m\u00faltiplos itens sem login. Prepara\u00e7\u00e3o: restaurante de demonstra\u00e7\u00e3o publicado no cat\u00e1logo de teste, com ao menos um hamb\u00farguer e uma batata dispon\u00edveis. Registrar os IDs e pre\u00e7os realmente retornados; n\u00e3o usar um restaurante real para compras. Refer\u00eancia de fonte agora identificada: main 8b1635c323c1674fa124f48519242bde395a0cd1. Antes da revis\u00e3o oficial, conciliar pacote/deploy e estabelecer a fixture isolada.",
              "prompt": "Quero um hamb\u00farguer e batata. Mostre as op\u00e7\u00f5es sem adicionar nada ao carrinho.",
              "tools_triggered": "chatfood_buscar",
              "expected_behavior": "Chama chatfood_buscar com termos separados para hamburguer e batata, sem enviar a frase inteira. Exibe cards reais de cada grupo, com nome, restaurante, pre\u00e7o e foto quando dispon\u00edvel. N\u00e3o adiciona itens, n\u00e3o cria pedido e n\u00e3o promete cobertura geogr\u00e1fica. Se houver zero resultados, informa isso sem inventar op\u00e7\u00f5es; esse resultado n\u00e3o valida a fixture positiva. Na nova UI, conferir carrossel e navega\u00e7\u00e3o no card inline; a disponibilidade do HTML n\u00e3o comprova renderiza\u00e7\u00e3o no host."
            },
            {
              "description": "P2 \u2014 Descoberta de restaurantes por categoria e abertura de card\u00e1pio. Prepara\u00e7\u00e3o: cat\u00e1logo de teste com ao menos uma pizzaria participante. Ap\u00f3s a lista, o revisor escolhe uma pizzaria pelo nome \u00fanico retornado e pede para abrir seu card\u00e1pio. Guardar esse contexto na conversa.",
              "prompt": "Quais pizzarias est\u00e3o dispon\u00edveis no ChatFood?",
              "tools_triggered": "chatfood_restaurantes, chatfood_cardapio",
              "expected_behavior": "Lista participantes usando chatfood_restaurantes com categoria pizza (ou termo de categoria equivalente aceito pelo cat\u00e1logo). Informa situa\u00e7\u00e3o aberto/fechado somente conforme os dados. Depois da escolha expl\u00edcita do revisor, usa chatfood_cardapio com restauranteId exato retornado para a pizzaria escolhida. Exibe os itens e pre\u00e7os retornados; n\u00e3o usa ID inventado nem consulta card\u00e1pio de restaurante n\u00e3o escolhido."
            },
            {
              "description": "P3 \u2014 Carrinho autenticado, quantidade absoluta e sincroniza\u00e7\u00e3o. Prepara\u00e7\u00e3o: conta dedicada de revis\u00e3o, carrinho vazio, cat\u00e1logo de demonstra\u00e7\u00e3o com um hamb\u00farguer simples sem op\u00e7\u00f5es obrigat\u00f3rias. Primeiro buscar esse item e pedir ao revisor que o selecione pelo nome/ID retornado. Depois da adi\u00e7\u00e3o, pedir: \u201cAgora deixe apenas uma unidade e mostre meu carrinho\u201d. N\u00e3o executar na conta pessoal do publicador. Varia\u00e7\u00e3o de sincroniza\u00e7\u00e3o obrigat\u00f3ria em fixture isolada: deixar um card antigo mostrando quantidade 2, alterar o mesmo carrinho para 5 por outro canal autorizado e voltar ao card antigo antes de tocar em +. H\u00e1 defeito reproduzido em mock nesta varia\u00e7\u00e3o; n\u00e3o considerar o caso aprovado sem reteste ap\u00f3s ajuste.",
              "prompt": "Adicione duas unidades desse hamb\u00farguer ao meu carrinho.",
              "tools_triggered": "chatfood_adicionar_item, chatfood_definir_quantidade, chatfood_consultar_carrinho",
              "expected_behavior": "Usa restauranteId e itemId do item previamente selecionado, quantidade 2 na adi\u00e7\u00e3o. Na segunda instru\u00e7\u00e3o usa chatfood_definir_quantidade com quantidade 1, n\u00e3o soma outra unidade. Consulta o carrinho e apresenta quantidade 1 e total coerente com a resposta autoritativa. N\u00e3o troca restaurante nem limpa carrinho sem autoriza\u00e7\u00e3o e n\u00e3o confirma pedido. Ao voltar ao painel, verificar visualmente o mesmo estado; retorno de dados n\u00e3o comprova renderiza\u00e7\u00e3o. Na varia\u00e7\u00e3o multi-canal, revalidar o estado autoritativo ou impedir altera\u00e7\u00e3o com snapshot vencido: o + n\u00e3o pode sobrescrever 5 com 3 calculado sobre o antigo 2. Conferir o novo card inline e, quando solicitado, o painel completo."
            },
            {
              "description": "P4 \u2014 Revis\u00e3o, confirma\u00e7\u00e3o \u00fanica e checkout externo. Prepara\u00e7\u00e3o obrigat\u00f3ria antes da execu\u00e7\u00e3o: ambiente/conta/restaurante de demonstra\u00e7\u00e3o isolados de produ\u00e7\u00e3o, endere\u00e7o fict\u00edcio salvo por autoriza\u00e7\u00e3o do titular da conta, carrinho eleg\u00edvel, checkout de teste e notifica\u00e7\u00f5es sem envio a pessoas reais. O revisor come\u00e7a com a pergunta abaixo; somente ap\u00f3s ler o resumo e autorizar explicitamente na conversa e no host, executa a confirma\u00e7\u00e3o dentro de 120 segundos. Se o ambiente isolado n\u00e3o existir, manter este caso bloqueado.",
              "prompt": "Revise meu pedido para entrega e mostre itens, endere\u00e7o, taxa e total antes de eu confirmar.",
              "tools_triggered": "chatfood_preparar_pedido, chatfood_confirmar_pedido",
              "expected_behavior": "Primeiro chama chatfood_preparar_pedido com tipo entrega e apresenta itens, modalidade, endere\u00e7o, taxa, total e bloqueios retornados. N\u00e3o chama confirmar antes da aprova\u00e7\u00e3o expl\u00edcita do resumo. Ap\u00f3s aprova\u00e7\u00e3o v\u00e1lida, usa a refer\u00eancia retornada e confirmarResumo true em chatfood_confirmar_pedido uma \u00fanica vez. Apresenta o pedido e link oficial retornados, deixando claro que confirma\u00e7\u00e3o n\u00e3o \u00e9 pagamento. Nunca solicita cart\u00e3o, CPF, senha ou c\u00f3digo de autentica\u00e7\u00e3o no chat. N\u00e3o cobra nem afirma pagamento sem estado de pagamento confirmado. Se a refer\u00eancia expirar ou o estado mudar, pede nova revis\u00e3o/autoriza\u00e7\u00e3o; ap\u00f3s timeout de confirma\u00e7\u00e3o consulta chatfood_meus_pedidos, sem repetir a compra."
            },
            {
              "description": "P5 \u2014 Consulta de pedidos e detalhamento. Prepara\u00e7\u00e3o: conta dedicada com pelo menos um pedido de demonstra\u00e7\u00e3o existente, contendo status, itens, total e link v\u00e1lidos de teste. Depois da listagem, o revisor escolhe um pedido pelo identificador retornado e pede seus detalhes. N\u00e3o pressupor pedido real do usu\u00e1rio.",
              "prompt": "Mostre meus pedidos recentes e o status de cada um.",
              "tools_triggered": "chatfood_meus_pedidos, chatfood_status_pedido",
              "expected_behavior": "Lista os pedidos da conta conectada por chatfood_meus_pedidos. Ap\u00f3s escolha do revisor, usa chatfood_status_pedido com pedidoId exato retornado. Exibe somente status, itens, total e link sustentados pelas respostas; n\u00e3o confunde pedido criado com pago, n\u00e3o inventa previs\u00e3o de entrega e n\u00e3o modifica nem cancela pedidos."
            }
          ],
          "negative": [
            {
              "description": "N1 \u2014 Reserva de mesa n\u00e3o implementada. Explicar que ChatFood oferece pedidos de comida e n\u00e3o reservas de mesa. N\u00e3o chamar ferramentas de cat\u00e1logo, carrinho ou confirma\u00e7\u00e3o para simular uma reserva; n\u00e3o afirmar mesa reservada.",
              "prompt": "Reserve uma mesa para quatro pessoas hoje \u00e0s 20h no restaurante."
            },
            {
              "description": "N2 \u2014 Receita culin\u00e1ria n\u00e3o \u00e9 consulta ao cat\u00e1logo. Responder como assist\u00eancia geral, se apropriado, sem chamar nenhuma ferramenta ChatFood e sem apresentar um prato do cat\u00e1logo como receita.",
              "prompt": "Como fa\u00e7o uma massa de pizza em casa? Quero uma receita, n\u00e3o comprar comida."
            },
            {
              "description": "N3 \u2014 Cancelamento e reembolso n\u00e3o implementados nas ferramentas. Informar a limita\u00e7\u00e3o e orientar para o suporte do pedido/restaurante sem afirmar cancelamento ou estorno. N\u00e3o chamar limpar_carrinho como substituto de cancelar pedido, n\u00e3o chamar confirmar_pedido e n\u00e3o inventar uma ferramenta de estorno.",
              "prompt": "Cancele meu \u00faltimo pedido j\u00e1 pago e estorne o valor no cart\u00e3o."
            }
          ]
        },
        "commerce": true,
        "commerce_description": "Users order physical prepared food and beverages from participating WhatsFood restaurants for delivery or pickup. ChatFood creates an order only after the user approves its reviewed summary. Payment occurs outside ChatGPT through the official order payment link, also sent via WhatsApp. The tools do not charge the user or collect payment-card details, government identifiers, passwords, or authentication codes in chat."
      },
      "publication": {
        "translations": {
          "pt-BR": {
            "subtitle": "Pe\u00e7a comida conversando",
            "description": "Encontre restaurantes participantes, explore card\u00e1pios com fotos e pre\u00e7os e monte seu carrinho em uma conversa. Conecte sua conta do WhatsFood para ajustar itens, salvar um endere\u00e7o autorizado e revisar pedidos para entrega ou retirada. Antes de enviar o pedido, confira itens, modalidade, endere\u00e7o, taxa e total e confirme o resumo. O pagamento \u00e9 feito fora do ChatGPT, no link oficial do pedido. Consulte seus pedidos e acompanhe o status dispon\u00edvel. O carrinho aceita um restaurante por vez. Disponibilidade e cobertura dependem do restaurante; itens com op\u00e7\u00f5es obrigat\u00f3rias podem exigir o site ou WhatsApp informado pelo restaurante. O ChatFood n\u00e3o oferece reservas de mesa, cancelamentos ou estornos pelo chat."
          }
        }
      },
      "apps": "./.app.json"
    }
  },
  "author": {
    "name": "Touch llc"
  },
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "chatfood",
  "version": "0.1.3",
  "description": "Order prepared food from participating restaurants through ChatGPT.",
  "license": "UNLICENSED"
}

SHA-256: 490e3cff1a7ba5064894bf88e3d3d9cb58b61b341f6fdc620ebf44b020dc0bcd