0.1.38
Deterministic passphrase-lock voice prompts: locked PSTN calls are voiced from pre-rendered clips in the box voice, not by the speech-to-speech model (which paraphrased rejections as "Unlocked"). Clips live in a dedicated joshu_voice_clips volume and heal on voice-realtime startup.
Highlights
Deterministic lock prompts
- Fixed lock lines (greeting, retry, unlock, hang-up, session timeout) are rendered ahead of time via Gemini/OpenAI TTS in the box Joshu voice
- While locked, the model is muted — it still hears the caller for passphrase transcription, but nothing it generates reaches them
- Partial clip sets keep the old model-spoken fallback rather than risk a silent call
ensureLockPromptClips()runs when voice-realtime starts listening for PSTN
Runtime
- New writable volume
joshu_voice_clips→/var/lib/joshu-voice(ArozOS stays read-only for voice-realtime) - Docs: passphrase tips for phone ASR (short words blur into neighbours); lock-prompt troubleshooting in
voice-realtime.md
Docker images
ghcr.io/db-aeon/joshu-oss:0.1.38
ghcr.io/db-aeon/joshu-oss-voice-realtime:0.1.38
Pins
| Component | Ref |
|---|---|
| Hermes | a91a57fa5a13d516c38b07a141a9ce8a3daabeb0 |
| gbrain | fa2c7a6990a7a57b251979ef6e1988ff09529021 |
| Camofox base | ghcr.io/jo-inc/camofox-browser@sha256:3ab61b4742105922aab6f8c99460f55563b6f93e906975383ddce16ec8917f3f |
How to update
Existing self-host VPS — full guide: VPS quickstart → Upgrade.
cd /opt/joshu && git pull origin main
# pin instance.env:
JOSHU_RELEASE_VERSION=0.1.38
JOSHU_IMAGE_REF=ghcr.io/db-aeon/joshu-oss:0.1.38
JOSHU_VOICE_IMAGE_REF=ghcr.io/db-aeon/joshu-oss-voice-realtime:0.1.38
set -a && source /etc/joshu/instance.env && set +a
docker pull "$JOSHU_IMAGE_REF"
docker pull "$JOSHU_VOICE_IMAGE_REF" 2>/dev/null || true
bash scripts/sync-dist-from-image.sh
bash deploy/scripts/render-caddyfile.sh /etc/joshu/instance.env
cd deploy && docker compose -f docker-compose.yml --env-file /etc/joshu/instance.env --profile voice-rt up -d --force-recreate