v2.52.0
Highlights
Cloud / Local Mode Plumbing
Predictable startup mode across native launchers, Docker, and every Web UI.
- Added one canonical
JARVIS_MODEresolver with cloud as the backward-compatible default and strict validation for explicit local startup. ./bin/start --localstarts the full local-env stack; the dashboard TUI exposes Start All Services (Local) and Start UI Only (Local) without changing existing cloud actions.- Web, Canvas, Memory, Intelligence, and Docs honor explicit or inherited startup mode and report
startup_modefrom health/status endpoints. - Memory and Intelligence initialize pristine selected-mode databases; browser data-mode choices remain independent through URL/localStorage selectors.
- API/services validate the selected env before migration or sync and initialize/migrate only the selected Memory database.
- Compose
JARVIS_MODEreaches every UI; entrypoint validation happens before init and DB checks follow only selected sync modes. - Compose mounts
config/read-only, allowing local-only installs without acloud.envstub and exposing read-only runtime registries without rebuilding.
OpenCode Service Hardening
Safer host OpenCode integration for coding-agent workflows.
- OpenCode systemd rendering now uses the target user's home instead of root expansion, starts the server in
~/jarvis-workspace, createsprojects/,temp/, anddeployments/, and pins temp env vars to~/jarvis-workspace/temp. - Added optional HTTP Basic auth for the OpenCode server and web UI via
OPENCODE_SERVER_USERNAME/OPENCODE_SERVER_PASSWORD. - Jarvis OpenCode API calls, status polling, and
bin/opencode-clear-sessionsnow send Basic auth when configured. - Added a git-safe
config/opencode.config.json.template, xAI/Grok Build examples, provider-key setup notes, and install/update syncing for workspace-protection plugins. opencodeis single-call capped per user request to prevent duplicate build/summary passes.check_opencode_sessionsenriches weak OpenCode/sessionmetadata with Jarvis JSONL log summaries: task, model, response preview, duration, token usage, and completion status.- OpenCode provider/model defaults now centralize through
model_catalogwhenOPENCODE_*env values are unset.
Jarvis Web — Vision, Canvas, and Video
- Multi-image vision — upload and analyze several images in one turn (up to 6 cloud / 2 local); image-to-image and image-to-video stay single-reference.
- Lightweight socket upload metadata with server-side hydration from disk.
- Centralized multimodal request building in
lib/vision_multimodal.py. - Follow-up grounding: batch stash labels/tags,
uploaded_imagesmetadata, ordinal stash-ref hints in context.
- Vision upload limit raised to 30MB — supports full-resolution iPhone photos before server-side resize to 1024px.
- Image Action Modal fixes — provider defaults respect AI config overrides after settings save; Gemini-only options like Google Search grounding appear/hide correctly.
- Inline Canvas previews — compact vertical page cards with clickable thumbnails and direct links in chat; cards hydrate from the Canvas API for image-backed and text pages.
- Canvas video embeds — direct and stash-backed videos render generically in Canvas; added a compact Send to Canvas action for the latest Jarvis response.
- Modular video playback — any stash-backed MP4 tool result can play inline in the Web UI.
New Tool: create_social_clip
MoneyPrinterTurbo B-roll social videos (stock footage + narration + subtitles + BGM).
- Distinct from
generate_video(xAI/Sora/Veo AI animation). - POST create → poll task → download MP4 → stash.
- Configurable voice and wait timeouts via
MONEYPRINTER_*env vars. - Cursor skill:
.cursor/skills/social-clip-video/SKILL.md
Memory UI Alert Notifications
- Background polling for pending alerts with browser-tab favicon/title flash for newly observed alerts.
- Optional Alerts-only ding toggle.
- Server-filtered alert pagination so older pending records remain visible.
- Alert history lazy-loads while scrolling.
Price Alerts and Runtime Storage
- Mutable price-alert thresholds moved to shared
data/price-alerts.yaml. - Legacy config migrates on first use; the one-tool Compose override file is no longer needed.
- Added
lib/price_alert_config.pywith focused regression coverage.
Providers and Model Catalog
- Added Claude Sonnet 4.6 to the model catalog.
- Dropped retired Anthropic Sonnet 4 / Opus 4 entries; legacy IDs map to Sonnet 4.6 and Opus 4.8.
- Refreshed example env defaults for the Web UI and tool builder.
Install, Dashboard, and Docker Ops
- Install guide clarifies automatic OpenCode environment setup and the dashboard-first operating flow.
- Dashboard startup uses stable tmux control sessions, closes them automatically, and Stop All cleans active and legacy launch sessions.
- Documented single-service starts and a core post-install checklist.
- Updated Docker command examples and PowerShell troubleshooting (including local Tool RAG sync commands).
Tools and Small Fixes
stock_price— added SpaceX (SPCE) symbol mapping.- Completion Guard env examples and AI Config clarify eval vs repair behavior (eval model is auto-mode only; repair passes use the main chat provider).
Fixes & Polish
- Canvas image embedding: a plain stash-reference note no longer suppresses Markdown image insertion.
- Suppress redundant Canvas receipt prose without hiding substantive assistant answers.
- Preserve Canvas preview behavior when conversation history is reopened.
- OpenCode client exception handling cleanup during config load.
- Compare-models integration test updated for
gemma4.
Docs & README
- Full mode-plumbing documentation in
docs/INSTALL_GUIDE.mdanddocs/docker/README.md. - Multi-image vision docs in
docs/JARVIS_WEB_UI.md,docs/api/QUERY.md, anddocs/api/IMAGES.md. - OpenCode auth/workspace docs in
docs/opencode/OPENCODE.mdanddocs/opencode/OPENCODE_PLUGINS.md. - Price alert storage/docs refresh across API and Docker guides.
- README roadmap and version banner updated for v2.52.0.
Upgrade Notes
Native Installs
Native workflow is unchanged:
git pull
source ~/jarvis-venv/bin/activate # or your JARVIS_VENV
./bin/start --stop && ./bin/startOptional after pull:
./bin/backfill-memory-types cloud # and/or local
./bin/check-memory-sync-health.py cloudIf you use OpenCode with server auth, add credentials to config/cloud.env and run:
./bin/update-opencode-service.shDocker Users
No structural compose changes required beyond pulling latest. Price alerts now live in data/price-alerts.yaml (auto-migrated from legacy config on first use).
If the Web UI loops on tool_search after switching to local mode:
docker compose exec jarvis-api python bin/sync-tools.py local --forceSee:
Do not run the native watchdog cron while Docker manages background services.
Local Mode
Use explicit local startup when you want the full local stack:
./bin/start --localOr from the dashboard: Start All Services (Local).
New Optional Environment Variables
Review these optional settings in config/cloud.env.example:
# OpenCode server Basic auth (optional)
# OPENCODE_SERVER_USERNAME=opencode
# OPENCODE_SERVER_PASSWORD=your-opencode-password
# MoneyPrinterTurbo social clips (optional)
# MONEYPRINTER_API_URL="http://192.168.x.xx:8080"
# MONEYPRINTER_MAX_WAIT_SEC=1200
# MONEYPRINTER_VOICE="en-CA-LiamNeural-Male"Existing OpenCode settings remain authoritative when set:
OPENCODE_PROVIDER="xai"
OPENCODE_MODEL="grok-build-0.1"Links
- Full changelog: docs/README.md — see the Change Log section.
- Previous release: v2.51.0