Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
VOS — vos.chat Virtual Operation System. A WhatsApp AI agent for LatAm businesses. It sounds like you. Sin dependencias, sin npm install y sin red: el motor y Supabase son fetch stubbeados. Salen con código 1 si algo falla, así que sirven igual desde un hook o desde CI el día que exista.檢視完整 README ↗
Virtual Operation System. A WhatsApp AI agent for LatAm businesses. It sounds like you.
node test/page.test.mjs
node test/waitlist.test.mjs
Sin dependencias, sin npm install y sin red: el motor y Supabase son
fetch stubbeados. Salen con código 1 si algo falla, así que sirven igual desde
un hook o desde CI el día que exista.
page.test.mjs cubre api/page.js y la configuración del sitio: la allowlist
de esquemas en los href y en el JSON-LD, el manejo de errores del handler
(motor caído, motor contestando con otro contrato, render que explota), que
ningún fallo pise la copia de rescate ni loguee datos del negocio, el tope y el
vencimiento de la caché, los slugs que son de vos.chat y no de un negocio, y los
headers de seguridad — los que pone la función y los de vercel.json, incluido
que la CSP cubra todo lo que las páginas estáticas piden de verdad.
waitlist.test.mjs cubre api/waitlist.js: honeypot, límite por IP, validación
de email y teléfono, y que los logs no lleven ni un dato personal.
videos/vos-explainer.mp4 pesa 5,37 MB y es el repo: el pack completo mide
5,21 MiB. Se evaluó sacarlo y no hay dónde ponerlo hoy — no hay Git LFS
instalado ni .gitattributes, no hay Vercel Blob ni ningún CDN configurado en
ninguna parte, y Vercel despliega desde git: sacarlo del repo lo saca del sitio.
Con una sola versión de cada archivo y cero borrados en toda la historia, hoy no
molesta.
Lo que sí importa: cada recorte nuevo del video suma otros ~5 MB al
historial, para siempre, aunque después se borre el archivo. Si el video va a
cambiar, primero hay que darle un lugar (Git LFS o Vercel Blob / CDN externo) y
recién después subir la versión nueva. page.test.mjs tiene un check que falla
si aparece cualquier archivo nuevo de más de 1 MB, justamente para que esa
decisión no se tome por inercia un martes a la tarde.
headers de vercel.json se enumeran uno por uno (H4)Lo natural sería un source de /(.*), y es exactamente lo que no se puede
hacer acá: también alcanzaría a /api/page, y una CSP fija en vercel.json le
pisaría a la función la CSP que construye con el hash del bloque JSON-LD —
es decir, rompería el structured data, que es la razón por la que esa función
existe. El orden de aplicación entre vercel.json y res.setHeader no se puede
medir sin desplegar, así que los source se enumeran. Si se agrega una página
estática nueva, hay que sumarla a esa lista.