Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Plataforma con un único chatbot configurable. Contexto: constitution.md, roadmap.md, specs/. La app no arranca si falta DATABASE_URL o si ENCRYPTION_KEY no es de 32 bytes en base64. Sin estas variables todo funciona, pero el chatbot dice que no puede agendar citas. Para habilitarlo:查看完整 README ↗
Plataforma con un único chatbot configurable. Contexto: constitution.md, roadmap.md, specs/.
Requisitos: Node 22.9 o superior (npm run db:migrate usa --env-file-if-exists, que existe desde esa versión) y
Docker, para la base de datos.
npm install
docker compose up -d # PostgreSQL 17 en localhost:5432
cp .env.example .env.local # y completar ENCRYPTION_KEY con: openssl rand -base64 32
npm run db:migrate # aplica las migraciones de ./drizzle
npm run dev # http://localhost:3000
La app no arranca si falta DATABASE_URL o si ENCRYPTION_KEY no es de 32 bytes en base64.
Si el puerto 5432 ya está ocupado por otro PostgreSQL, cambia el puerto en docker-compose.yml
(por ejemplo "55432:5432") y ajusta el puerto en DATABASE_URL.
Para que el chatbot responda hay que cargar un proveedor (OpenAI u OpenRouter), un modelo y una API key en la
pantalla «Tu chatbot». Eso se guarda cifrado en la base, no en .env.local. Sin eso la plataforma funciona, pero el
chat no contesta.
Variable opcional: AGENDA_TIME_ZONE es la zona horaria de las citas (006). Por defecto, America/Bogota.
Sin estas variables todo funciona, pero el chatbot dice que no puede agendar citas. Para habilitarlo:
http://localhost:3000/api/google/callback.env.local (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI).Después, en «Tu chatbot» → «Agendamiento de citas», conecta la cuenta y define el horario de atención.
Los permisos que se piden son los mínimos: crear eventos (calendar.events) y consultar disponibilidad
(calendar.freebusy). El permiso se guarda cifrado, igual que la API key.
Variables de entorno en Vercel, solo en Production (las cadenas salen del botón «Connect» de Supabase):
DATABASE_URL — Transaction pooler (puerto 6543): la usa la app.DATABASE_MIGRATION_URL — Session pooler (puerto 5432): la usan las migraciones, que Supabase recomienda correr por la conexión directa o por este pooler, no por el de transacciones.ENCRYPTION_KEY — una nueva, distinta de la local. Si se pierde, hay que volver a cargar la API key y reconectar Google.npm run build aplica las migraciones después de compilar, solo cuando VERCEL_ENV=production. Si fallan, el despliegue
no sale. Mientras corre el build, la versión anterior sigue atendiendo con el esquema nuevo: un cambio que borre o
renombre columnas se hace en dos despliegues.
npm test — Vitest (unitarios e integración; requiere la base levantada)npm run lint, npm run typecheck, npm run buildnpm run db:generate — genera una migración a partir de lib/schema.tsPara comprobar que quedó bien montado, con la base levantada:
npm test && npm run lint && npm run typecheck && npm run build