Bolt Console: desktop app with chat list / new chat, dictation, file tools
Add a chat list and server-minted new chats on top of the desk API's
GET/POST /desk/chats:
- server_client.list_chats() / create_chat(), same shape and error
handling as list_outbox_files().
- Switching is config.set_session(id): a plain reassignment of the
SESSION_ID every call reads, persisted to session.json. The window
refuses to switch mid-turn rather than locking.
- gui/chat_list_window.py: a Chats dialog (Ctrl+K) with a QListWidget,
populated on open, with Refresh and New Chat. Network calls run as
QRunnables on the global QThreadPool and come back through Signals,
never from a slot. The header New chat (Ctrl+N) uses the same path.
- Switching clears the local transcript; there is no endpoint for a
past chat's messages. Bolt's memory is per user, so it carries over.
- Terminal: /chats, /chat <n|id>, and /new (server-minted id, local
fallback).
This commit also carries the uncommitted work since 54030a7 that turned
this Bolt-Pet fork into Bolt Console: the pet, wake word, TTS and screen
features removed; a Claude Code-style terminal client; the PySide6
window with tool cards, approvals and diffs; mic dictation through the
server's /desk/stt relay; filectl/JSON repairs; and detection of
invented tool results.
Build output (build/, dist/, Release/, *.spec) is now ignored.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+7
-48
@@ -1,54 +1,13 @@
|
||||
# Desktop UI
|
||||
# HTTP client to the Bolt desk API.
|
||||
requests>=2.31
|
||||
|
||||
# The window (python -m bolt_console). Not needed for --cli.
|
||||
PySide6>=6.6
|
||||
|
||||
# Audio I/O (mic capture + speaker playback) — cross-platform via PortAudio.
|
||||
# On Linux you may also need the system package: sudo apt install libportaudio2
|
||||
# Dictation (the mic button): mic capture + the server's /desk/stt websocket.
|
||||
# Optional: without them the mic button explains what's missing.
|
||||
sounddevice>=0.4.6
|
||||
numpy>=1.24
|
||||
|
||||
# HTTP client to the Bolt desk API
|
||||
requests>=2.31
|
||||
# Speech-to-text, via the server's /desk/stt websocket relay (audio/stt.py,
|
||||
# audio/stt_stream.py) — there is no separate REST fallback, so this is now
|
||||
# load-bearing for transcription to work at all, not just for the
|
||||
# transcribe-while-talking optimisation STT_STREAMING controls.
|
||||
websocket-client>=1.7
|
||||
|
||||
# Wake-word detection (local, offline after first run) — runs the
|
||||
# custom-trained thunderbolt.onnx model shipped in this repo, same runtime
|
||||
# as the main repo's desk_client/bolt_desk.py (bolt.onnx). First use
|
||||
# downloads openwakeword's feature-extraction sub-models (~few MB, cached
|
||||
# under the package's own resources/ dir afterward) — needs internet once.
|
||||
openwakeword
|
||||
|
||||
# Offline TTS fallback if the server call isn't configured or fails.
|
||||
# Uses SAPI5 on Windows, NSSpeechSynthesizer on macOS, espeak on Linux
|
||||
# (Linux also needs: sudo apt install espeak-ng).
|
||||
pyttsx3>=2.90
|
||||
|
||||
# Global push-to-talk hotkey (PUSH_TO_TALK_HOTKEY). Optional: the pet
|
||||
# degrades to wake-word + tray + click if it's missing or if the session
|
||||
# won't allow a global key hook (most Wayland setups; macOS needs
|
||||
# Accessibility permission).
|
||||
pynput>=1.7
|
||||
|
||||
# Optional — only needed for scripts/slice_spritesheet.py (converting a
|
||||
# grid sprite sheet into the per-frame-PNG convention sprite.py expects).
|
||||
# Not imported by the app itself.
|
||||
Pillow>=10.0
|
||||
|
||||
# Screen reading (`petctl read`) — Bolt OCRs a monitor and uses the text in
|
||||
# his reply. Both optional: without them `petctl read` reports what's missing
|
||||
# and the rest of the pet is unaffected.
|
||||
# mss screen capture. X11/Win32/macOS — NOT Wayland.
|
||||
# pytesseract a thin wrapper; the actual engine is a system package:
|
||||
# sudo apt install tesseract-ocr
|
||||
# No-sudo alternative to those two lines: pip install rapidocr-onnxruntime
|
||||
# (pure pip, reuses the onnxruntime openwakeword already pulls in, slower to
|
||||
# start). screen_text.resolve_engine() picks whichever is present.
|
||||
mss>=9.0
|
||||
pytesseract>=0.3.10
|
||||
|
||||
# Test runner (tests/ — pure logic, no audio hardware or display needed;
|
||||
# run with QT_QPA_PLATFORM=offscreen).
|
||||
# Test runner (tests/ — no real server or terminal needed).
|
||||
pytest>=8.0
|
||||
|
||||
Reference in New Issue
Block a user