Repository navigation
v0.2.65
Downloads
Desktop App
| Platform | Download | Size |
|---|---|---|
| Windows (x64) | CachiBot-Setup-0.2.65-win.exe |
153.2 MB |
| macOS (Apple Silicon) | CachiBot-0.2.65-mac.dmg |
213.2 MB |
| Linux (x64 AppImage) | CachiBot-0.2.65-linux.AppImage |
205.7 MB |
| Linux (x64 .deb) | CachiBot-0.2.65-linux.deb |
171.6 MB |
| Linux (x64 .rpm) | CachiBot-0.2.65-linux.rpm |
172.9 MB |
macOS users: This build is not yet notarized by Apple. After installing, open Terminal and run:
xattr -cr /Applications/CachiBot.appThen open the app normally. This only needs to be done once.
Python Package (pip)
pip install cachibot==0.2.65Changes
Every datetime.utcnow() call in the codebase was living on borrowed deprecation warnings. This PR replaces all of them with timezone-aware datetime.now(timezone.utc) across 28 files — models, routes, services, plugins, and websockets — so timestamps actually know what timezone they belong to. On top of that, usage stats now report the model that actually ran the request (not the one configured on the bot), and the dashboard finally counts room activity alongside regular chats.
Highlights
- Dashboard stats now include room messages and room counts alongside regular chats
- Usage metadata shows the actual model used per request, not just the bot's configured default
- Room WebSocket usage events are now tracked in the dashboard usage store
- Azure provider configuration supports additional per-backend keys and endpoints (Claude, Mistral)
- Desktop splash screen upgraded to a proper HTML file with app icon, version display, and animated progress bar
Technical changes
- Replaced all
datetime.utcnow()anddatetime.now()calls withdatetime.now(timezone.utc)across 28 backend files (routes, models, services, plugins, websockets) - Changed
default_factory=datetime.utcnowin Pydantic/dataclass fields todefault_factory=lambda: datetime.now(timezone.utc)inautomations.py,chat.py,command.py,instruction.py,job.py,work.py - Fixed
datetime.utcfromtimestamp()inauth_service.pyto usedatetime.fromtimestamp(ts, tz=timezone.utc) - Bot export timestamp in
routes/bots.pynow uses.isoformat()directly (already UTC-aware) instead of appending"Z"manually message_processor.pyextracts the actual model from Prompture'sper_modelusage breakdown, falling back toeffective_modelorbot.modeluseWebSocket.tsreads model frompayload.perModelkeys instead ofcurrentBot?.model, ensuring usage stats reflect the real model useduseRoomWebSocket.tsnow callsuseUsageStore.getState().recordUsage()onroom_usageevents, previously these were not tracked in the dashboardDashboardView.tsximportsuseRoomStore, aggregatesroomMessagesinto total message count, counts room-based bot connections, and displays "X chats · Y rooms" in stat cardsPROVIDERSdict inroutes/providers.pyexpanded withAZURE_CLAUDE_API_KEY,AZURE_CLAUDE_ENDPOINT,AZURE_MISTRAL_API_KEY,AZURE_MISTRAL_ENDPOINTbot_environment.pyadds_PROVIDER_EXTRA_ENV_KEYSmapping andprovider_extrasfield onResolvedEnvironment, loaded from bothos.environand bot-level overrideswebsocket.pypassesprovider_extrasas kwargs tobuild_driver_with_key()so per-provider endpoints reach the driver- Desktop splash screen extracted from inline data URL in
main.jstodesktop/splash.htmlwith icon, version query params, progress bar, and cycling status messages