You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit f3bf76c
Browse filesBrowse the repository at this point in the historyBrowse files
Guide ScreenPipe capture-node setup in wizard (#339)
* feat: guide ScreenPipe capture-node setup
* fix: refresh capture timeline and tolerate recorder startup
* fix: group Timeline audio chunks into sessions
* fix: unblock CI — test env defaults + workers-test startup deadlock
- tests/conftest.py: provide AUTH_SECRET_KEY/ADMIN_PASSWORD defaults so
collection works without a local .env (CI has none; auth.py raises at
import since the readiness/fleet work landed).
- docker-compose-test.yml: drop workers-test dependency on backend
health. /readiness now requires the worker-fleet heartbeat, so gating
workers on backend health deadlocked startup (backend unhealthy ->
workers never start). Matches prod compose: workers need mongo+redis.
* fix: land SessionStore conversation-assignment API tested by #336
test_session_store.py was committed in #336 but the SessionStore
implementation it exercises (set/get/clear/expire current conversation,
conversation_create_lock) stayed in a local stash. Bring the
implementation in so the committed tests pass.
* feat: add Linux Chronicle desktop tray
* feat: add ScreenPipe context thumbnails to Timeline
* ci: install libopus0 for advanced backend unit tests
services/device_audio.py imports opuslib at module level, which needs
the native Opus library; the GitHub runner doesn't ship it. Was masked
until now by the earlier AUTH_SECRET_KEY collection error.
* fix: preserve meaningful ScreenPipe transitions
* fix: normalize ScreenPipe audio timestamps
* fix: ignore opuslib SyntaxWarning under pytest error filter
opuslib 3.x contains `is not 0`, a SyntaxWarning on py3.12. With
filterwarnings=error it becomes a SyntaxError on first import in a
fresh venv (CI), killing collection. Cached .pyc masked it locally.
* fix: make memory.processed fire under the no-api mock config
Two layers were breaking the plugin-event tests:
1. mock-services.yml had no defaults.fallback_llm, so the memory agent's
note-guarantee recovery pass (force_fallback=True) raised 'No fallback
LLM is configured' and the memory job failed with nothing recorded.
Add mock-llm-fallback (same mock server, distinct name — a fallback
identical to defaults.llm is rejected as pointless).
2. chronicle.py treated a recovery-pass exception as fatal, skipping the
source-preserving fallback note entirely. The note guarantee now
degrades: log the recovery failure, write the fallback note, return
its path — so memory.processed still fires and the vault keeps the
conversation.
Also lands the speaker-rename guard in _speaker_rename_guidance:
conversation-scoped relabels between real named people no longer trigger
a vault-wide rename_person (which merged the wrong person's history);
only placeholder labels (Speaker N / Unknown Speaker N) may be globally
renamed.
* ci: real redis/mongo services for backend unit tests; upload robot service logs
- test_vault_rename_person needs Redis (vault locks are Redis-backed and
fail closed) and test_leading_silence_trim_db needs Mongo; both passed
locally only because a dev stack was listening. Give the CI job real
service containers on the ports the code defaults to.
- robot-tests saved backend/worker logs to files but never uploaded
them, leaving container-side failures undiagnosable. Upload them.
* fix: resolve host.docker.internal in test containers on Docker/CI
Every real HTTP caller in the test stack (memory-agent LLM, streaming
STT consumer) addresses the mock services as host.docker.internal, but
Docker on Linux does not resolve that name without an explicit
host-gateway mapping — CI workers logged 'Name or service not known'
for every LLM and streaming-STT call. This broke memory.processed
events and streaming speech detection (open_conversation) in the no-api
suite, while passing locally under podman, which resolves the name
natively. Prod compose already carries the same extra_hosts.
* fix: runtime config overrides survive reloads
save_config_section() patched the in-memory config cache once, but any
subsequent reload_config() (frequent in normal operation) rebuilt the
cache from disk and silently reverted the change whenever CONFIG_FILE
points away from config.yml (test environments). The always-persist
robot test toggles always_persist_enabled via /api/misc-settings and
raced exactly this: on slow CI a reload landed between the toggle and
the stream open, so a placeholder conversation appeared despite
always_persist=false. Register overrides and re-apply them on every
load instead.
* fix: first runtime settings save no longer fails without config.yml
save_config_section() passed a plain {} to OmegaConf.update() when
config.yml didn't exist yet, raising 'Unexpected type: {}' — so the
very first runtime settings save on a fresh install failed (and the
API reported it only in the response body, still HTTP 200).
0 commit comments