尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Concierge de compras no WhatsApp: o cliente pede em linguagem natural, vê até 3 opções com foto de 18 vitrines locais (e do Mercado Livre como cauda longa), recebe o total na hora, paga por Pix (copia-e-cola + bolha nativa) ou cartão, o operador compra no site da loja como cliente comum e a própria loja entrega. Memória canônica: AGENTS.md (topo = regra vigente). Estado: STATUS.md. Pendências: PENDENCIAS.md. Revisão completa de 06/09 (código, negócio, compra por IA e acompanhamento): docs/revisao-completa-2026-09-06.md.檢視完整 README ↗
Concierge de compras no WhatsApp: o cliente pede em linguagem natural, vê até 3 opções com foto de 18 vitrines locais (e do Mercado Livre como cauda longa), recebe o total na hora, paga por Pix (copia-e-cola + bolha nativa) ou cartão, o operador compra no site da loja como cliente comum e a própria loja entrega.
Memória canônica: AGENTS.md (topo = regra vigente). Estado: STATUS.md. Pendências: PENDENCIAS.md. Revisão completa de 06/09 (código, negócio, compra por IA e acompanhamento): docs/revisao-completa-2026-09-06.md.
Decisão vigente — 15/09/2026: a operação vai contratar um operador humano e parou de perseguir compra automática. O operador usa a fila/manual do
/opspara cotar, comprar e acompanhar os pedidos; o comprador local, a allowlist automática e a tarefa horária ficam fora da operação até decisão posterior.
| Peça | Onde |
|---|---|
| Cérebro da conversa (máquina de estados, cesta, cotação, pagamento) | src/lib/delivery-service.ts |
| Intenções (NLU determinístico) e copy (todas as mensagens) | src/lib/lia-intents.ts, src/lib/lia-copy.ts |
| IA (extração, rerank, roteador de fallback) | src/lib/adapters/ai.ts |
| Vitrines (18 lojas + Mercado Livre), matcher, compositor de cesta | src/lib/stores/, src/lib/basket-composer.ts |
Preço (markup progressivo, parseMoneyInput) | src/lib/pricing.ts |
| Pagamentos: Mercado Pago, Pagar.me, razão, reconciliação | src/lib/payments/ |
| Webhooks: WhatsApp (Meta), Mercado Pago, Pagar.me; cron | src/app/api/** |
| Painel do operador | /ops (src/app/ops/) — mandar "ops" pra Lia no WhatsApp e tocar no link (ou /ops?key=<OPS_TOKEN> uma vez) |
| Guards de auth (fail-closed em deploy) | src/lib/auth.ts |
| Schema e migrations | prisma/ |
| Testes (unitários + E2E de conversa) | tests/ |
npm install
cp .env.example .env # preencha DATABASE_URL/DIRECT_URL (ou use só o banco de teste)
npx prisma migrate deploy
npm run dev
Landing em http://localhost:3000, painel em /ops. Sem OPENAI_API_KEY a conversa usa
o caminho determinístico; sem MERCADO_PAGO_ACCESS_TOKEN os pagamentos são mock (nunca
em deploy de produção). Para conversar sem WhatsApp: npx tsx scripts/talk-lia.mts "oi".
npm run test:unit # intents/copy, sem banco, < 1 s
npm run test:local # suíte INTEIRA num Postgres embutido (sobe, migra, confere drift, roda) — ~25 s
npm test # exige TEST_DATABASE_URL para testes com banco; não herda DATABASE_URL
Regra: nunca rodar a suíte contra o banco de produção; npm run test:local é o padrão.
CI em .github/workflows/ci.yml (tsc, lint, unit, E2E com Postgres em serviço, sem skips).
Vercel. O build (npm run build) gera o Prisma Client, aplica as migrations pendentes
só no build de produção (scripts/migrate-on-build.mjs), compila e confere o bundle
(emoji). Variáveis: ver .env.example; em deploy, segredo ausente nega (fail-closed).
Cron de reconciliação de pagamentos em vercel.json (CRON_SECRET).
Runbook do operador: docs/operador-runbook.md. Incidentes de pagamento/estorno: docs/operacao-piloto-needs-human-estorno.md.