Files
librechat-custom/CloudronManifest.json
T
inference-admin 4e28b7a612 Key sync runs inside the app: scheduler addon task every 10 min, plus write guards
The per-member key seed ran from a steward cron on the co-op agent VM, shelling
into this app over the Cloudron API. That made a member-facing function depend on
a separate machine's uptime and paths (it went silently stale once, exiting 127
on schedule while the job looked healthy).

- CloudronManifest.json: addons.scheduler gains librechat_key_sync
  (cd /app/code/librechat/api && node /app/data/sync-keys.js, */10 * * * *).
  Official addon set (postgresql, mongodb, localstorage, oidc, sendmail) and the
  dockerImage pin are untouched.
- sync-keys.js: refuse to write unless CREDS_KEY can first decrypt an existing
  key row, and unless each fresh ciphertext round-trips back to the plaintext.
  Scheduled runs get a different environment than an interactive exec, so a wrong
  or absent CREDS_KEY must fail loudly instead of overwriting working member keys.
2026-10-25 22:25:10 +00:00

60 lines
2.3 KiB
JSON

{
"id": "ai.librechat.cloudronapp",
"version": "1.4.1",
"title": "LibreChat",
"upstreamVersion": "0.8.8",
"author": "Danny Avila",
"description": "LibreChat is an open-source chatbot client that supports multiple AI providers and models including:\n\n- OpenAI GPT Models\n- Anthropic Claude Models\n- Google PaLM Models\n- Various open-source local models\n\nFeatures:\n- Switch between various AI models\n- Conversation history\n- Plugins support\n- File upload and processing\n- Custom instructions\n- Multiple conversation modes\n\n",
"changelog": "* Update uv to 0.13.1\n",
"tagline": "ChatGPT-like interface with model switching",
"website": "https://github.com/danny-avila/LibreChat",
"documentationUrl": "https://docs.cloudron.io/packages/librechat/",
"forumUrl": "https://forum.cloudron.io/category/210/librechat",
"contactEmail": "support@cloudron.io",
"healthCheckPath": "/health",
"httpPort": 3080,
"addons": {
"postgresql": {},
"mongodb": {},
"localstorage": {},
"oidc": {
"loginRedirectUri": "/oauth/openid/callback"
},
"sendmail": {
"supportsDisplayName": true
},
"scheduler": {
"librechat_key_sync": {
"schedule": "*/10 * * * *",
"command": "cd /app/code/librechat/api && node /app/data/sync-keys.js"
}
}
},
"checklist": {
"register-admin": {
"message": "On the first visit, register yourself as an admin user"
},
"disable-registration": {
"message": "Disable registration, if required, to prevent misuse"
},
"set-api-keys": {
"message": "Set API keys in /app/data/env file and restart the app"
}
},
"optionalSso": true,
"manifestVersion": 2,
"memoryLimit": 1073741824,
"minBoxVersion": "8.1.0",
"tags": [
"ai",
"chat",
"gpt"
],
"mediaLinks": [
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-00.png",
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png"
],
"icon": "file://logo.png",
"dockerImage": "registry.inference.coop/co-op/librechat-custom:20261023-65a38bb"
}