Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
cardapio digital ditado
翻译准备中
正在加载完整 README。 以下为已保存的摘录。
Agentes de IA — bares e restaurantes Plataforma de agentes de IA (Agent-as-a-Service) adaptada para bares e restaurantes. O agente atende o cliente por mensagem, responde sobre a programação da casa e coleta pedidos de reserva — que não são confirmados na hora: entram numa fila de aprovação humana. Stack: Node + TypeScript, Claude (claude-opus-5) e Supabase (Postgres). Abra http://localhost:3000, cole a chave e o painel carrega. Conferir uma tela sem banco e sem deploy查看完整 README ↗
Plataforma de agentes de IA (Agent-as-a-Service) adaptada para bares e restaurantes. O agente atende o cliente por mensagem, responde sobre a programação da casa e coleta pedidos de reserva — que não são confirmados na hora: entram numa fila de aprovação humana.
Stack: Node + TypeScript, Claude (claude-opus-5) e Supabase (Postgres).
| Módulo | Estado |
|---|---|
| Schema completo no Supabase (16 tabelas, RLS, triggers, índices) | ✅ aplicado |
| Runtime do agente: histórico, ferramentas, telemetria de tokens | ✅ |
| Ferramentas de domínio (programação, informações, reserva) | ✅ |
| Módulo de aprovação de reservas + trilha de auditoria | ✅ |
| API HTTP com autenticação por chave e streaming SSE | ✅ |
| Painel web: fila de aprovação, programação e chat de teste | ✅ |
| Notificação ao cliente + webhooks assinados | ✅ |
| Canal WhatsApp de entrada e saída (Baileys, não oficial) | ✅ |
| Billing, embeddings/vector DB, editor visual de fluxo, SSO | ⬜ backlog do PRD |
npm install
cp .env.example .env # preencha ANTHROPIC_API_KEY e SUPABASE_SERVICE_ROLE_KEY
npm run seed # cria org, estabelecimento e o agente recepcionista
npm run criar-chave # gera a chave de API (aparece uma única vez)
npm run dev # sobe API + painel em http://localhost:3000
Abra http://localhost:3000, cole a chave e o painel carrega.
Sem interface, pela linha de comando:
npm run chat -- --agent recepcionista --venue ditado-popular
npm run aprovar -- --venue ditado-popular # lista pendentes
npm run aprovar -- --aprovar <protocolo>
npm run aprovar -- --recusar <protocolo> --motivo "casa lotada nesse horário"
npm run telas # lista as telas e as situações prontas
npm run telas -- rh # abre no navegador de teste e tira foto
npm run telas -- rh:ferias # abre numa situação específica
npm run telas -- rh --servir # sobe em localhost para você clicar
npm run telas -- --todas # passa por todas as telas e situações
A tela roda com dados de mentira, escritos à mão em scripts/telas/<nome>.json,
e um servidor de araque responde o que ela pedir. Não precisa de banco, de chave
nem de deploy.
O ganho está nas situações: cada arquivo declara variações da mesma tela — a casa que acabou de contratar o módulo, a semana sem venda nenhuma, o período de férias que venceu ontem. Forçar isso com dados reais custaria meia hora; aqui é um objeto de cinco linhas:
"variacoes": {
"gorjeta-semana-vazia": {
"rotulo": "semana sem nada lançado",
"guarda": { "brasa.rh.aba": "fechamento" },
"rotas": { "GET /rh/acerto": { "linhas": [], "totais": {} } }
}
}
O comando abre cada situação em 1280px e em 400px, avisa se houve erro de
JavaScript ou se a página rolou de lado, e guarda as fotos em .telas/ (fora do
Git). Quando a tela pede uma rota que o arquivo não tem, ela recebe resposta
vazia e o comando imprime, no fim, o esqueleto pronto para colar.
Para adicionar uma tela nova, copie scripts/telas/rh.json, troque modulo e
funcao pelo que a tela exporta, rode uma vez e cole o esqueleto que o comando
imprimir.
Toda rota sob /v1 exige Authorization: Bearer <chave>. Respostas seguem
{ success, data } ou { success: false, error: { code, message } }, e cada
requisição devolve um x-trace-id para correlacionar com o log.
| Rota | Escopo | O que faz |
|---|---|---|
POST /v1/runs | runs:write | Executa o agente. Com ?stream=true (ou Accept: text/event-stream) devolve SSE |
GET /v1/agents | runs:write | Agentes habilitados (?all=1 inclui os pausados) |
POST /v1/agents | runs:write | Cria um agente |
GET /v1/agents/:slug | runs:write | Detalhe, incluindo o system prompt |
PATCH /v1/agents/:slug | runs:write | Edita nome, prompt, modelo, esforço, ativo. O slug não muda |
GET /v1/agents/:slug/training | runs:write | Lista o treinamento do agente |
POST /v1/agents/:slug/training | runs:write | Adiciona texto digitado (JSON: titulo, conteudo) |
POST /v1/agents/:slug/training/upload | runs:write | Adiciona um arquivo. Corpo é o arquivo cru (sem base64); metadados na URL: ?titulo=&nome_arquivo=&media_type= |
DELETE /v1/agents/:slug/training/:id | runs:write | Remove um item de treinamento |
GET /v1/venues | reservations:read | Estabelecimentos |
GET /v1/venues/:slug/reservations | reservations:read | Fila de aprovação |
POST /v1/reservations/:id/approve | reservations:write | Aprova |
POST /v1/reservations/:id/reject | reservations:write | Recusa (exige motivo) |
GET | POST /v1/venues/:slug/events | leitura | escrita | Programação |
DELETE /v1/events/:id?venue=<slug> | reservations:write |
Eventos do stream: text_delta, tool_use, tool_result, done, error.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗
| Remove item |
GET /v1/venues/:slug/info | reservations:read | Base de conhecimento |
GET /v1/venues/:slug/conversations | reservations:read | Caixa de entrada. Filtros: ?canal=, ?status=, ?humanas=1 |
GET /v1/venues/:slug/metrics | reservations:read | Números do painel |
GET /v1/conversations/:id | reservations:read | Conversa com o histórico |
POST /v1/conversations/:id/takeover | reservations:write | Assume o atendimento ({"devolver":true} devolve ao agente) |
POST /v1/conversations/:id/messages | reservations:write | Resposta escrita por uma pessoa |
POST /v1/conversations/:id/close | reservations:write | Encerra ({"reabrir":true} reabre); mensagem nova do cliente reabre sozinha |
DELETE /v1/conversations/:id | reservations:write | Apaga a conversa e o histórico. Reservas sobrevivem com o vínculo anulado |
GET /health | público | Health check |