|
71217
|
2559
|
15
|
2026-05-26T06:31:48.584129+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777108584_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-22T13:46:57.771304Z INFO screenpipe_engin 2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:14:43.042050Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.636397916s
2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted
2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)
2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted
2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-22T14:24:54.600747Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=23 elapsed=4.43952425s
2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames
2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted
2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted
2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state obse...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-26T09:31:12.673275Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4456630385270008726, trigger=visual_change)\n2026-05-26T09:31:13.096778Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-26T09:31:13.099373Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-26T09:31:13.099500Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-26T09:31:13.099519Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.049 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-26T09:31:13.246182Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-26T09:31:13.250810Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-26T09:31:13.251051Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-26T09:31:13.252080Z INFO screenpipe_audio::audio_manager::manager: seeded 62 speakers (named + unnamed) from DB into embedding manager\n2026-05-26T09:31:13.252116Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-26T09:31:13.252139Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-26T09:31:13.701895Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-26T09:31:13.748252Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-26T09:31:13.748323Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-26T09:31:13.748351Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-26T09:31:14.972187Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71199 paired=2 still_pending=0\n2026-05-26T09:31:15.761184Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4958587055304279033, trigger=visual_change)\n2026-05-26T09:31:19.169835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71200 paired=2 still_pending=0\n2026-05-26T09:31:23.595001Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:29.305688Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71203 paired=1 still_pending=0\n2026-05-26T09:31:30.703431Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71206 paired=1 still_pending=0\n2026-05-26T09:31:34.672566Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71207 paired=1 still_pending=0\n2026-05-26T09:31:35.886788Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71208 paired=1 still_pending=0\n2026-05-26T09:31:36.640059Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71209 paired=1 still_pending=0\n2026-05-26T09:31:37.618724Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71210 paired=1 still_pending=0\n2026-05-26T09:31:40.805690Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71211 paired=1 still_pending=0\n2026-05-26T09:31:42.264174Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71213 paired=1 still_pending=0\n2026-05-26T09:31:48.462998Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71215 paired=1 still_pending=0","depth":4,"on_screen":true,"value":"2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-26T09:31:12.673275Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4456630385270008726, trigger=visual_change)\n2026-05-26T09:31:13.096778Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-26T09:31:13.099373Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-26T09:31:13.099500Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-26T09:31:13.099519Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.049 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-26T09:31:13.246182Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-26T09:31:13.250810Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-26T09:31:13.251051Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-26T09:31:13.252080Z INFO screenpipe_audio::audio_manager::manager: seeded 62 speakers (named + unnamed) from DB into embedding manager\n2026-05-26T09:31:13.252116Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-26T09:31:13.252139Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-26T09:31:13.701895Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-26T09:31:13.748252Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-26T09:31:13.748323Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-26T09:31:13.748351Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-26T09:31:14.972187Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71199 paired=2 still_pending=0\n2026-05-26T09:31:15.761184Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4958587055304279033, trigger=visual_change)\n2026-05-26T09:31:19.169835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71200 paired=2 still_pending=0\n2026-05-26T09:31:23.595001Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:29.305688Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71203 paired=1 still_pending=0\n2026-05-26T09:31:30.703431Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71206 paired=1 still_pending=0\n2026-05-26T09:31:34.672566Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71207 paired=1 still_pending=0\n2026-05-26T09:31:35.886788Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71208 paired=1 still_pending=0\n2026-05-26T09:31:36.640059Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71209 paired=1 still_pending=0\n2026-05-26T09:31:37.618724Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71210 paired=1 still_pending=0\n2026-05-26T09:31:40.805690Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71211 paired=1 still_pending=0\n2026-05-26T09:31:42.264174Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71213 paired=1 still_pending=0\n2026-05-26T09:31:48.462998Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71215 paired=1 still_pending=0","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.36336437,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.36535904,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.45777926,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.45977393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5521942,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55418885,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.64660907,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.64860374,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-1424526161407021544
|
-5427308935470221855
|
click
|
accessibility
|
NULL
|
2026-05-22T13:46:57.771304Z INFO screenpipe_engin 2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:14:43.042050Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.636397916s
2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted
2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)
2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted
2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-22T14:24:54.600747Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=23 elapsed=4.43952425s
2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames
2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted
2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted
2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state obse...
|
71216
|
NULL
|
NULL
|
NULL
|
|
71216
|
2559
|
14
|
2026-05-26T06:31:46.583218+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777106583_m2.jpg...
|
PhpStorm
|
faVsco.js – TextRelayServiceTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
9
32
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Mail;
use Google\Service\Gmail as GoogleGmail;
use Google\Service\Gmail\Message as GmailMessage;
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
use Jiminny\Services\Mail\TextRelayService;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
use ReflectionClass;
use Mockery;
#[CoversClass(TextRelayService::class)]
class TextRelayServiceTest extends TestCase
{
public static function environmentProvider(): array
{
return [
'eu_environment' => ['eu', 'catch-all-eu', '[EMAIL]'],
'us_environment' => ['us', 'catch-all', '[EMAIL]'],
'other_environment_defaults_to_us' => ['other', 'catch-all', '[EMAIL]'],
'eu_environment_with_plus_tag' => ['eu', 'catch-all-eu', '[EMAIL]'],
'us_environment_with_plus_tag' => ['us', 'catch-all', '[EMAIL]'],
];
}
protected function setUp(): void
{
parent::setUp();
}
protected function tearDown(): void
{
Mockery::close();
parent::tearDown();
}
#[DataProvider('environmentProvider')]
public function testIsForCurrentEnvironmentWithMatchingXGmOriginalToHeader(
string $deployRegion,
string $expectedAlias,
string $recipient
): void {
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = $recipient;
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');
$this->assertTrue($result);
}
#[DataProvider('environmentProvider')]
public function testIsForCurrentEnvironmentWithNonMatchingXGmOriginalToHeader(
string $deployRegion,
string $expectedAlias,
string $recipient
): void {
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentIgnoresToHeader(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentWithEmptyHeaders(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$payload->method('getHeaders')->willReturn([]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentWithException(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')
->willThrowException(new \Exception('Gmail API error'));
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentRejectsWrongHostWithMatchingPlusTag(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testSyncUsesEuAliasForEuRegion(): void
{
Config::set('jiminny.deploy_region', 'eu');
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
Config::set('jiminny.google_text_user', '[EMAIL]');
Config::set('jiminny.google_text_relay_topic', 'test-topic');
$service = $this->createTextRelayService();
$gmailService = $this->createMock(GoogleGmail::class);
$historyResponse = $this->createMock(\Google\Service\Gmail\ListHistoryResponse::class);
$historyResponse->historyId = 12345;
$historyResponse->method('getHistory')->willReturn([]);
$historyResponse->method('getNextPageToken')->willReturn(null);
$usersHistory = $this->createMock(\Google\Service\Gmail\Resource\UsersHistory::class);
$usersHistory->method('listUsersHistory')->willReturn($historyResponse);
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
\Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
$syncMethod->setAccessible(true);
$result = $syncMethod->invoke($service);
$this->assertIsArray($result);
}
public function testSyncUsesUsAliasForUsRegion(): void
{
Config::set('jiminny.deploy_region', 'us');
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
Config::set('jiminny.google_text_user', '[EMAIL]');
Config::set('jiminny.google_text_relay_topic', 'test-topic');
$service = $this->createTextRelayService();
$gmailService = $this->createMock(GoogleGmail::class);
$historyResponse = $this->createMock(\Google\Service\Gmail\ListHistoryResponse::class);
$historyResponse->historyId = 12345;
$historyResponse->method('getHistory')->willReturn([]);
$historyResponse->method('getNextPageToken')->willReturn(null);
$usersHistory = $this->createMock(\Google\Service\Gmail\Resource\UsersHistory::class);
$usersHistory->method('listUsersHistory')->willReturn($historyResponse);
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
\Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
$syncMethod->setAccessible(true);
$result = $syncMethod->invoke($service);
$this->assertIsArray($result);
}
private function createTextRelayService(): TextRelayService
{
$service = new class () extends TextRelayService {
public function __construct()
{
}
};
return $service;
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
45
1
41
66
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM teams WHERE name LIKE '%litify%'; # 1069, 994, 24993
SELECT * FROM users WHERE id = 25061;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 994;
SELECT * FROM crm_profiles WHERE user_id = 25061;
select * from crm_configurations where id = 834;
SELECT * FROM teams WHERE id = 882;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 882 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal
SELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations WHERE provider = 'hubspot' and crm_provider_id = 7270388;
SELECT * FROM contacts where crm_configuration_id = 834;
SELECT * FROM opportunities WHERE team_id = 933
# AND crm_provider_id IN ('20131586060','46017317898','52543911090','53451356564','54101251892','54323768459');
AND id IN (8482561,18352941,19042734,19232139,19445140,19472541);
SELECT * FROM opportunity_contacts
WHERE opportunity_id IN (8482561,18352941,19042734,19232139,19445140,19472541);
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 485; #
SELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
select crm.provider, l.* from leads l join crm_configurations crm on l.crm_configuration_id = crm.id
where crm.provider NOT IN ('salesforce', 'integration-app', 'bullhorn', 'copper')
# and l.converted_at IS NOT NULL
;
# [PASSWORD_DOTS]
SELECT * FROM activities a WHERE type IN ('email-inbound', 'email-outbound')
and opportunity_id IS NULL
order by id desc;
SELECT * FROM teams WHERE id = 604; # 598
SELECT * FROM activities WHERE id = 74410828; # [EMAIL]
SELECT * FROM accounts WHERE id = 20068382;
SELECT * FROM accounts WHERE id = 35186038;
SELECT * FROM contacts WHERE team_id = 852 and updated_at > '2026-01-23 12:30:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 559 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('cb6342b6-a183-401c-b0af-ede92b2ae763') = uuid;
select * from sidekick_settings where team_id = 781;
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 26651871; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 7562435;
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8420347; # opflit 2100
SELECT * FROM crm_layouts WHERE crm_configuration_id = 711;
SELECT * FROM activities where crm_configuration_id = 711 and crm_provider_id IS NULL
and is_internal = 0 and status = 'completed'
order by id desc;
SELECT * FROM crm_layout_entities
WHERE crm_layout_id IN (2352, 2353);
;
SELECT * FROM crm_configurations where provider = 'hubspot' and id = 530;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 556 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('c6ca4b22-7738-4563-a95d-b8a9598924ae') = uuid;
SELECT * FROM activities WHERE uuid_to_bin('442abb2b-28bd-4be8-9c25-19e9bf02766d') = uuid;
select * from contacts
where crm_configuration_id = 530
and crm_provider_id = 872252;
select * from activities where crm_configuration_id = 530
and user_id = 14343 and type like '%softphone%'
and created_at between '2026-01-28 15:00:00' and '2026-01-28 15:10:00';
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 25666868; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8646335; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id IN (5933397);
SELECT t.name, t.id, t.owner_id, c.id, c.provider, c.crm_base_url FROM teams t
JOIN crm_configurations c ON t.id = c.team_id
WHERE t.status = 'active';
SELECT * FROM teams where id = 1091;
SELECT * FROM crm_configurations where team_id = 1091;
SELECT * FROM activity_providers where team_id = 1091;
SELECT * FROM activities where crm_configuration_id = 1024 and type IN ('softphone', 'softphone-outbound')
and provider NOT IN ('hubspot', 'aircall')
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by id desc;
SELECT * FROM teams WHERE name LIKE '%Leadventure%';
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1091 and sa.provider = 'salesforce';
SELECT * FROM teams WHERE name LIKE '%Wilson%'; # 862, 812
SELECT * FROM teams where id = 862;
SELECT * FROM crm_configurations where team_id = 862;
SELECT * FROM activity_providers where team_id = 862;
SELECT * FROM activities where crm_configuration_id = 812 and type IN ('softphone', 'softphone-outbound')
and provider NOT IN ('hubspot', 'aircall')
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by id desc;
SELECT t.id, crm.id, crm.provider, ap.* FROM teams t
join crm_configurations crm on t.id = crm.team_id
join activity_providers ap on t.id = ap.team_id
where t.status = 'active' and ap.is_enabled = 1
and crm.provider = 'hubspot'
and ap.provider NOT IN ('hubspot', 'aircall', 'uploader', 'gong', 'twilio', 'zoom-bot', 'google-meet', 'ms-teams',
'outreach', 'close', 'ringcentral', 'dialpad', 'zoom-phone');
SELECT * FROM teams where id = 1068;
SELECT * FROM crm_configurations where team_id = 1068;
SELECT * FROM activity_providers where team_id = 1068;
SELECT * FROM activities a
where crm_configuration_id = 993 and type IN ('softphone', 'softphone-outbound')
and a.provider NOT IN ('hubspot', 'uploader', 'gong', 'twilio', 'google-meet', 'ms-teams','close'
)
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by a.id desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1068 and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
# [PASSWORD_DOTS]
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal , portalId: 6017093
SELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-06 00:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 834; # 882 - AnyVan , portalId: 5468262
SELECT * FROM contacts WHERE crm_configuration_id = 834 and updated_at > '2026-03-30 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE crm_configuration_id = 834 and updated_at > '2026-03-04 08:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 882 and sa.provider = 'hubspot';
select * from crm_layouts where crm_configuration_id = 834;
select * from crm_layout_entities where crm_layout_id = 2780;
select * from crm_fields where id IN (321153,321192,321193,321194);
SELECT * FROM opportunities WHERE crm_configuration_id = 834 and id = 10993426;
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 988; # 1057 - Teya (543ce4f4-168c-4571-91ea-5b35c253f06f) , portalId: 26651871
SELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1057 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations where id = 533; # 559 - Connectd , portalId: 6710988
SELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 801; # 852 - Rise Vision , portalId: 2700250
SELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-04 00:00:00' order by updated_at desc; # 6th last
SELECT * FROM crm_configurations where id = 962; # 1034 - evergrowth.io , portalId: 143180990
SELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 1037; # 1102 - Jibble , portalId: 6649755
SELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 8
SELECT * FROM crm_configurations where id = 1015; # 1049 - Travefy , portalId: 48904401
SELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 20
SELECT * FROM crm_configurations where id = 64; # 70 - SalaryFinance , portalId: 3404115
SELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 6th last
SELECT * FROM crm_configurations where id = 802; # 853 - Street Group , portalId: 7658438
SELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 10
SELECT * FROM crm_configurations where id = 872; # 921 - In Professional Development , portalId: 9238273
SELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 2
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 550; # 576 - SeedLegals , portalId: 3028661
SELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 989; # 1058 - rtaoutdoor.com , portalId: 22371204
SELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 896; # 946 - Mintago , portalId: 6621281
SELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 617; # 641 - PCS , portalId: 5244937
SELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-05 14:00:00' order by updated_at desc; # 7th
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 649; # 670 - Eventeny , portalId: 4492849
SELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; #
SELECT * FROM crm_configurations where id = 48; # 51 - CleanCloud , portalId: 4373137
SELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-03-04 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-02-09 08:00:00' order by updated_at desc;
select * from users where team_id = 51; # 7783
SELECT * FROM groups WHERE uuid_to_bin('8a8d2cb6-8b55-4fa3-8b5c-5f0e3d8de59a') = uuid; # 1130
select * from activity_searches where user_id = 7783;
select * from activity_search_filters where activity_search_id IN (32291, 32292);
SELECT asf.activity_search_id, asf.id, asf.value
FROM activity_search_filters asf
WHERE asf.filter = 'group_id'
AND asf.value IN (
SELECT CONCAT(
HEX(SUBSTR(uuid, 5, 4)), '-',
HEX(SUBSTR(uuid, 3, 2)), '-',
HEX(SUBSTR(uuid, 1, 2)), '-',
HEX(SUBSTR(uuid, 9, 2)), '-',
HEX(SUBSTR(uuid, 11))
)
FROM groups
WHERE deleted_at IS NOT NULL
);
SELECT * FROM crm_configurations where id = 272; # 290 - Bonham & Brook , portalId: 5705856
SELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-05 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; # 6th
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where provider = 'hubspot';
SELECT * FROM crm_configurations where id = 1056; # 1119 - Chromatic , portalId: 45602133
SELECT * FROM opportunities WHERE team_id = 1119 and remotely_created_at > '2026-02-01 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1119 and updated_at > '2026-02-09 09:00:00' order by updated_at desc; # null
# [PASSWORD_DOTS]
select * from contacts where crm_provider_id = '003Uu00000ojD4NIAU';
select
cp.*
# DISTINCT t.id
# cp.id, cp.user_id, t.id, cp.crm_configuration_id, cp.contact_fields
FROM crm_profiles cp
JOIN crm_configurations crm on crm.id = cp.crm_configuration_id
JOIN users u on u.id = cp.user_id
JOIN teams t ON t.id = crm.team_id
WHERE crm.provider = 'salesforce' and t.status = 'active'
and cp.archived_at IS NULL and u.deleted_at IS NULL
and t.id NOT IN (1093)
and t.id = 2
and cp.contact_fields IS NULL;
# and c.crm_provider_id = '003Uu00000ojD4NIAU';
SELECT * FROM users WHERE id = 26484;
SELECT * FROM crm_profiles WHERE user_id = 26484;
SELECT * FROM social_accounts WHERE sociable_id = 26484;
SELECT * FROM crm_configurations where provider = 'salesforce';
select * from users where id IN (10022, 10403);
select * from users where team_id IN (526);
select * from teams where id IN (526, 532);
select * from crm_configurations where id IN (500, 516);
select * from crm_profiles where crm_configuration_id IN (500, 516) and user_id IN (10022, 10403);
select * from contacts where crm_configuration_id IN (500, 516) and crm_provider_id = '003Uu00000ojD4NIAU';
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 526 and sa.provider = 'salesforce';
select * from team_settings where team_id IN (526, 532);
select * from users where id IN (22824);
select * from crm_profiles where crm_configuration_id IN (1026);
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1093 and sa.provider = 'salesforce';
select * from teams where id = 1099;
select * from users where id = 29643
select * from activity_processing_states;
SELECT * FROM teams where name LIKE '%Fare%'; # 233
SELECT * FROM opportunities where crm_configuration_id = 215
# and crm_provider_id = 'oppo_ogESZf2P50nDrd1nGPvKDXeA6sSaTN5v51Lp4ayVzKR'
;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1088 and sa.provider = 'hubspot';
SELECT * FROM teams order by updated_at DESC
SELECT * FROM crm_configurations WHERE id = 1019; # SimpleConsign 1088 - no social account
select * from crm_configurations where provider = 'pipedrive';
select * from teams where id = 957;
select * from crm_configurations where id = 957;
SELECT * FROM teams WHERE name LIKE '%Prolific%'; # 544, 518, 10743
SELECT * FROM opportunities where crm_configuration_id = 518 order by id desc;
select * from users where team_id = 1; # 26726 - Gabriela Dureva
SELECT * FROM opportunities where user_id = 26726; # 16834447 - Prolific
select * from activities where user_id = 26726 order by id desc;
select * from contacts where crm_configuration_id = 1
and email IN ('[EMAIL]', '[EMAIL]'); # 2094416, 2093620
SELECT * FROM contacts WHERE id = 6284931;
SELECT p.* FROM activities a JOIN participants p ON a.id = p.activity_id
WHERE a.user_id = 26726 and p.lead_id IN (2094416, 2093620) and a.created_at > '2026-01-01 00:00:00' order by p.email;
select * from activities where id IN (75509259,75509261,75509261,75511034,75026464,75517602,75517605);
select * from crm_configurations where id = 1;
43801692-1aeb-32ce-acba-5b80a479701a
44c3c9cf-6f5e-75f3-8179-bc9f75dd2b1b
405975c0-b3d0-7aaa-821f-09d59cae6dd1
4caf848d-4bed-2299-b248-7788d41f9fca
49bedc3f-f196-eef3-89c3-dea6a3b4aa63
43420989-a09d-b8f8-9806-c8bbf7a02aac
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1 and sa.provider = 'salesforce';
SELECT * FROM activities WHERE id = 75461988;
SELECT * FROM activities WHERE uuid_to_bin('d6c5052e-e972-49e9-8912-26f2f7d6c5f6') = uuid;
select * from contacts where id = 17900517;
select * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id
where crm.provider != 'salesforce';
select * from users where id = 21047;
SELECT * FROM crm_configurations WHERE id = 892;
SELECT * FROM teams WHERE id = 942;
select * from opportunities where team_id = 942 order by updated_at desc;
select * from contacts where team_id = 942 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 942 and sa.provider = 'hubspot';
SELECT * FROM opportunities where team_id = 1 and crm_provider_id IN ('006Pq00000NeH6XIAV', '006Pq000007z8kdIAA'); # 10697889, 6621430
SELECT * FROM crm_configurations WHERE id = 1;
SELECT * FROM teams WHERE crm_id = 1;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1 and sa.provider = 'salesforce';
select id, user_id, opportunity_fields from crm_profiles where crm_configuration_id = 1
SELECT * FROM opportunities where team_id = 1 order by updated_at desc; # 10697889, 6621430
select * from teams where id = 852;
select * from groups where id = 2286;
select * from sidekick_settings where team_id = 852;
select * from default_activity_types where team_id = 852;
SELECT cc.provider, cc.id, p.id, u.*
FROM users u
LEFT JOIN crm_profiles p ON u.id = p.user_id AND p.id IS NULL -- no profile
INNER JOIN teams t ON u.team_id = t.id AND t.status = 'active' -- team is active
INNER JOIN crm_configurations cc ON t.crm_id = cc.id
WHERE u.status = 1 AND u.deleted_at IS NULL
AND u.crm_required = 1
AND u.team_id = 1
ORDER BY u.team_id;
SELECT * FROM crm_profiles cp where cp.crm_configuration_id = 1 and cp.user_id IN (
18481
);
SELECT cc.provider, cc.id, p.id, u.*
FROM users u
LEFT JOIN crm_profiles p ON u.id = p.user_id
INNER JOIN teams t ON u.team_id = t.id AND t.status = 'active'
INNER JOIN crm_configurations cc ON t.crm_id = cc.id
WHERE u.status = 1
AND u.deleted_at IS NULL
AND u.crm_required = 1
# AND u.team_id = 1
AND p.id IS NULL -- Move this condition to WHERE clause
ORDER BY u.team_id;
SELECT * FROM opportunities WHERE id = 20002609;
select * from teams where id = 1122; # Velatir, 29953 - [EMAIL]
select * from crm_configurations where id = 1060;
select * from crm_layouts where crm_configuration_id = 1060;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 3596;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1122 and sa.provider = 'hubspot';
select * from opportunities where team_id = 1122 order by updated_at desc;
select * from crm_field_data where object_type = 'contact';
SELECT * FROM activities WHERE uuid_to_bin('374fc8ed-3315-4c9f-9b25-318b7fd2928f') = uuid; # 76584262
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 248 and sa.provider = 'salesforce';
SELECT * FROM crm_profiles where user_id = 24115; # 005QF000002CswMYAS
SELECT * FROM users where id = 24115;
SELECT * FROM accounts where id = 4002896;
SELECT * FROM teams WHERE name LIKE '%adswerve%';
SELECT * FROM opportunities where crm_configuration_id = 230 AND crm_provider_id IN ("0069N000003GIQ9QAO","0061r000019yGP9AAM","0066900001S2KWlAAN","0066900001TDpj2AAD","0066900001b8uEwAAI","0069N000001rQi0QAE","006QF00000KD40mYAD","006QF00000LzpRJYAZ","0069N000002uomtQAA","0069N000002xlMLQAY","0066900001NV6ubAAD","0061r00001HJp45AAD","006QF00000uTlUoYAK","006QF00000v0bZqYAI");
SELECT * FROM opportunities WHERE crm_configuration_id = 230 AND crm_provider_id = '0069N000003GIQ9QAO'; # 6272203
SELECT u.id, u.email, ac.name, a.* FROM activities a
JOIN users u ON a.user_id = u.id
JOIN accounts ac ON a.account_id = ac.id
WHERE
uuid_to_bin('e3269598-b562-44fb-b5e9-9d2694dc63e0') = a.uuid or
uuid_to_bin('66ddc3ab-4e15-45aa-af0c-248c1eece593') = a.uuid or
uuid_to_bin('826bd328-e1cc-4213-b8d8-572454cacc07') = a.uuid;
select * from users where id = 5825;
SELECT * FROM activities WHERE uuid_to_bin('e56aa2e8-231a-421b-ab1f-cb38ed2bf573') = uuid;
select * from activities where uuid_to_bin('91e13b2f-2d1b-45f8-b1fd-1141b6563782') = uuid;
19594, 862
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 862 and sa.provider = 'salesforce';
select * from automated_reports where id = 36;
select ar.frequency, r.*, ar.* from automated_report_results r
join automated_reports ar on r.report_id = ar.id
where ar.frequency != 'one_off';
select s.* from activity_searches s join users u ON s.user_id = u.id where u.team_id = 882;
select * from nudges n where n.activity_search_id
select * from teams where created_at > '2026-03-09';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 1065; # 1065
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 3617;
select * from users where team_id = 1 and name like '%Lukas%'; # 7160
SELECT * FROM teams WHERE id = 575;
select * from opportunities where team_id = 575;
SELECT * FROM teams WHERE name LIKE '%Integrum ESG%'; # 1126, 1065,
select * from opportunities where team_id = 1126;
SELECT * FROM teams WHERE name LIKE '%Base%'; # 1125, 1063,
select * from opportunities where team_id = 1125;
select * from contacts c
where c.team_id = 882;
SELECT * FROM activities WHERE id = 76822967;
SELECT * FROM crm_profiles WHERE user_id = 15440;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 555;
SELECT * FROM crm_configurations WHERE id = 555;
SELECT * FROM users WHERE id = 15440; # team. 581, gr. 15440, pl. 3911, act. field 162182
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 581 and sa.provider = 'salesforce';
SELECT * FROM automated_report_results order by id desc;
select * from features;
select * from team_features where feature_id = 40;
select * from teams where id = 556;
select * from automated_reports;
where id = 54; # 4fdd41f6-dcf0-30d0-b339-7345381b6044 , ["pdf","podcast"]
SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;
select * from automated_report_results order by id desc;
SELECT * FROM automated_report_results WHERE id = 1919;
select * from automated_report_results WHERE report_id = 54;
select * from opportunities where id = 7594349;
SELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - [EMAIL]
select * from playbooks where team_id = 711; # event 226147
SELECT * FROM playbook_categories WHERE playbook_id = 5515;
SELECT * FROM crm_fields WHERE crm_configuration_id = 692 and object_type = 'event';
SELECT * FROM crm_fields WHERE id = 226147;
SELECT * FROM crm_field_values WHERE crm_field_id = 226147;
SELECT * FROM crm_configurations WHERE id = 692;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 711 and sa.provider = 'salesforce';
SELECT * FROM crm_profiles cp JOIN users u on u.id = cp.user_id WHERE u.team_id = 711;
select * from leads;
select * from calendars;
SELECT
t.id AS team_id,
t.name,
LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1)) AS calendar_domain
FROM teams t
JOIN users u ON u.team_id = t.id
JOIN calendars c ON c.user_id = u.id AND c.status = 'active' AND c.calendar_provider_id LIKE '%@%'
LEFT JOIN team_domains td
ON td.team_id = t.id
AND td.deleted_at IS NULL
AND td.domain = LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1))
GROUP BY t.id, t.name, calendar_domain
ORDER BY t.name, calendar_domain;
select * from users u join calendars c on c.user_id = u.id
where u.team_id = 882;
select * from activities where id = 74049485; # team 563 crm 537
select * from activities where id = 73272382; # team 563 crm 537
select * from activities where id = 64400389; # team 563 crm 537
select * from activities where id = 58081273; # team 563 crm 537
select * from activities where id = 54520297; # team 563 crm 537
select * from participants where activity_id = 58081273;
select * from activities where crm_configuration_id = 537 and provider = 'aircall'
and account_id = 19003658 order by updated_at desc;
select * from contacts where crm_configuration_id = 537 and id = 35957759;
select * from accounts where crm_configuration_id = 537 and id = 19003658;
select * from automated_report_results where id = 1976;
select * from automated_reports where id = 583;
select * from activity_searches where id = 87714;
select * from activity_search_filters where activity_search_id = 87714;
SELECT * FROM activities WHERE uuid_to_bin('8827f672-202d-4162-9d04-73ff5f0566a9') = uuid
or uuid_to_bin('47842446-af51-4bcb-854f-cc6560290101') = uuid;
SELECT * FROM crm_configurations WHERE provider = 'hubspot';
select * from rate_limits;
select * from automated_report_results where media_type = 'pdf' and status = 2
and id IN (18, 1872);
select * from automated_reports where id = 54;
SELECT * FROM users WHERE id IN (24623,29443,29613);
SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;
select * from text_relays where created_at > '2026-05-01';
and id IN (32415, 32416);
# and id = 32412;
select * from users where team_id = 2 and email like '%scott%' and id = 29510;
SELECT * FROM activities WHERE uuid_to_bin('67cebfc2-ed56-44a2-8c68-7a0286ed8618') = uuid; # 79763436
SELECT email_provider_id, COUNT(*) as count, GROUP_CONCAT(id) as ids, GROUP_CONCAT(status) as statuses
FROM text_relays
WHERE email_provider_id IN ('19e2027868a64b42', '19e2033ed8ea6b10')
GROUP BY email_provider_id;
SELECT id, status, telephony_provider_id, created_at
FROM activities
WHERE id IN (80028719, 80028846);
SELECT id, status, code, email_sent_at, created_at, updated_at
FROM text_relays
WHERE id IN (32415, 32416);
SELECT id, status, code, sender, recipient, created_at
FROM text_relays
WHERE sender LIKE '%mario.georgiev%' OR sender LIKE '%stoyan.tomov%'
ORDER BY created_at DESC
LIMIT 10;
SELECT id, uuid, status, code, sender, recipient, created_at, updated_at
FROM text_relays
WHERE uuid = uuid_to_bin('0626141c-27a6-4d8c-aff8-7c8020a2c656');
# [PASSWORD_DOTS]
SELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count
FROM users u
INNER JOIN activities a ON u.id = .user_id
WHERE a.type LIKE 'sms%'
AND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY u.id, u.email, u.name, u.softphone_number
ORDER BY sms_count DESC;
select * from teams where id = 1;
select * from roles;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1117 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('8024fffb-2df7-4017-91f4-d9f896050248') = uuid; # 79933459 YES
SELECT * FROM activities WHERE uuid_to_bin('[CREDIT_CARD]-927f-4f4da2a8185c') = uuid; # 80186192 NO
SELECT * FROM crm_configurations WHERE id = 1053;
SELECT * FROM teams WHERE id = 1117;
select * from users where id = 30249;
select * from playbooks where id = 5473;
select * from playbook_categories where id = 43783;
select * from playbook_categories where playbook_id = 5473;
select * from crm_fields where id = 659242;
select * from crm_field_values where crm_field_id = 659242;
SELECT * FROM crm_field_data fd
# JOIN crm_fields f ON fd.crm_field_id = f.id
# JOIN activities a ON fd.activity_id = a.id
WHERE activity_id = 79933459
# AND f.crm_provider_id = 'hs_activity_type';
select * from text_relays where created_at > '2026-05-01';
select * from activities where user_id IN (7160, 18608) and created_at > '2026-05-22' order by id desc;
select * from users where team_id = 1;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder
.circleci, folder
.cursor, folder
.github
.sonarlint, folder
.vscode, folder
.windsurf, folder
app, sources root
Actions, folder
Component, folder
Acl, folder
ActionItems, folder
Activity, folder
ActivityAnalytics, folder
ActivitySearch, folder
AiActivityType, folder
AiAutomation, folder
AiCallScoring, folder...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>48 incoming commits<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.3899601,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.39993352,"top":0.07581804,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.4119016,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4192154,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Mail;\n\nuse Google\\Service\\Gmail as GoogleGmail;\nuse Google\\Service\\Gmail\\Message as GmailMessage;\nuse Google\\Service\\Gmail\\MessagePart;\nuse Google\\Service\\Gmail\\MessagePartHeader;\nuse Illuminate\\Support\\Facades\\Config;\nuse Jiminny\\Services\\Mail\\TextRelayService;\nuse PHPUnit\\Framework\\Attributes\\CoversClass;\nuse PHPUnit\\Framework\\Attributes\\DataProvider;\nuse Tests\\TestCase;\nuse ReflectionClass;\nuse Mockery;\n\n#[CoversClass(TextRelayService::class)]\nclass TextRelayServiceTest extends TestCase\n{\n public static function environmentProvider(): array\n {\n return [\n 'eu_environment' => ['eu', 'catch-all-eu', 'catch-all-eu@txt.jiminny.com'],\n 'us_environment' => ['us', 'catch-all', 'catch-all@txt.jiminny.com'],\n 'other_environment_defaults_to_us' => ['other', 'catch-all', 'catch-all@txt.jiminny.com'],\n 'eu_environment_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu+447700152706.447893937879.3ndZZBqjRo@txt.jiminny.com'],\n 'us_environment_with_plus_tag' => ['us', 'catch-all', 'catch-all+447700152706.447893937879.3ndZZBqjRo@txt.jiminny.com'],\n ];\n }\n\n protected function setUp(): void\n {\n parent::setUp();\n }\n\n protected function tearDown(): void\n {\n Mockery::close();\n parent::tearDown();\n }\n\n #[DataProvider('environmentProvider')]\n public function testIsForCurrentEnvironmentWithMatchingXGmOriginalToHeader(\n string $deployRegion,\n string $expectedAlias,\n string $recipient\n ): void {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = $recipient;\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');\n\n $this->assertTrue($result);\n }\n\n #[DataProvider('environmentProvider')]\n public function testIsForCurrentEnvironmentWithNonMatchingXGmOriginalToHeader(\n string $deployRegion,\n string $expectedAlias,\n string $recipient\n ): void {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = 'other@txt.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentIgnoresToHeader(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'To';\n $header->value = 'catch-all@txt.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentWithEmptyHeaders(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n\n $payload->method('getHeaders')->willReturn([]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentWithException(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')\n ->willThrowException(new \\Exception('Gmail API error'));\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentRejectsWrongHostWithMatchingPlusTag(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = 'catch-all+447700152706.447893937879.3ndZZBqjRo@txt.staging.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testSyncUsesEuAliasForEuRegion(): void\n {\n Config::set('jiminny.deploy_region', 'eu');\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n Config::set('jiminny.google_text_user', 'test@example.com');\n Config::set('jiminny.google_text_relay_topic', 'test-topic');\n\n $service = $this->createTextRelayService();\n $gmailService = $this->createMock(GoogleGmail::class);\n\n $historyResponse = $this->createMock(\\Google\\Service\\Gmail\\ListHistoryResponse::class);\n $historyResponse->historyId = 12345;\n $historyResponse->method('getHistory')->willReturn([]);\n $historyResponse->method('getNextPageToken')->willReturn(null);\n\n $usersHistory = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersHistory::class);\n $usersHistory->method('listUsersHistory')->willReturn($historyResponse);\n $gmailService->users_history = $usersHistory;\n\n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n\n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n $syncMethod->setAccessible(true);\n\n $result = $syncMethod->invoke($service);\n\n $this->assertIsArray($result);\n }\n\n public function testSyncUsesUsAliasForUsRegion(): void\n {\n Config::set('jiminny.deploy_region', 'us');\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n Config::set('jiminny.google_text_user', 'test@example.com');\n Config::set('jiminny.google_text_relay_topic', 'test-topic');\n\n $service = $this->createTextRelayService();\n $gmailService = $this->createMock(GoogleGmail::class);\n\n $historyResponse = $this->createMock(\\Google\\Service\\Gmail\\ListHistoryResponse::class);\n $historyResponse->historyId = 12345;\n $historyResponse->method('getHistory')->willReturn([]);\n $historyResponse->method('getNextPageToken')->willReturn(null);\n\n $usersHistory = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersHistory::class);\n $usersHistory->method('listUsersHistory')->willReturn($historyResponse);\n $gmailService->users_history = $usersHistory;\n\n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n\n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n $syncMethod->setAccessible(true);\n\n $result = $syncMethod->invoke($service);\n\n $this->assertIsArray($result);\n }\n\n private function createTextRelayService(): TextRelayService\n {\n $service = new class () extends TextRelayService {\n public function __construct()\n {\n }\n };\n\n return $service;\n }\n\n}","depth":4,"bounds":{"left":0.15990691,"top":0.0726257,"width":0.36535904,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Mail;\n\nuse Google\\Service\\Gmail as GoogleGmail;\nuse Google\\Service\\Gmail\\Message as GmailMessage;\nuse Google\\Service\\Gmail\\MessagePart;\nuse Google\\Service\\Gmail\\MessagePartHeader;\nuse Illuminate\\Support\\Facades\\Config;\nuse Jiminny\\Services\\Mail\\TextRelayService;\nuse PHPUnit\\Framework\\Attributes\\CoversClass;\nuse PHPUnit\\Framework\\Attributes\\DataProvider;\nuse Tests\\TestCase;\nuse ReflectionClass;\nuse Mockery;\n\n#[CoversClass(TextRelayService::class)]\nclass TextRelayServiceTest extends TestCase\n{\n public static function environmentProvider(): array\n {\n return [\n 'eu_environment' => ['eu', 'catch-all-eu', 'catch-all-eu@txt.jiminny.com'],\n 'us_environment' => ['us', 'catch-all', 'catch-all@txt.jiminny.com'],\n 'other_environment_defaults_to_us' => ['other', 'catch-all', 'catch-all@txt.jiminny.com'],\n 'eu_environment_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu+447700152706.447893937879.3ndZZBqjRo@txt.jiminny.com'],\n 'us_environment_with_plus_tag' => ['us', 'catch-all', 'catch-all+447700152706.447893937879.3ndZZBqjRo@txt.jiminny.com'],\n ];\n }\n\n protected function setUp(): void\n {\n parent::setUp();\n }\n\n protected function tearDown(): void\n {\n Mockery::close();\n parent::tearDown();\n }\n\n #[DataProvider('environmentProvider')]\n public function testIsForCurrentEnvironmentWithMatchingXGmOriginalToHeader(\n string $deployRegion,\n string $expectedAlias,\n string $recipient\n ): void {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = $recipient;\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');\n\n $this->assertTrue($result);\n }\n\n #[DataProvider('environmentProvider')]\n public function testIsForCurrentEnvironmentWithNonMatchingXGmOriginalToHeader(\n string $deployRegion,\n string $expectedAlias,\n string $recipient\n ): void {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = 'other@txt.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentIgnoresToHeader(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'To';\n $header->value = 'catch-all@txt.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentWithEmptyHeaders(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n\n $payload->method('getHeaders')->willReturn([]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentWithException(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')\n ->willThrowException(new \\Exception('Gmail API error'));\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testIsForCurrentEnvironmentRejectsWrongHostWithMatchingPlusTag(): void\n {\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n\n $message = $this->createMock(GmailMessage::class);\n $payload = $this->createMock(MessagePart::class);\n $header = $this->createMock(MessagePartHeader::class);\n\n $header->name = 'X-Gm-Original-To';\n $header->value = 'catch-all+447700152706.447893937879.3ndZZBqjRo@txt.staging.jiminny.com';\n\n $payload->method('getHeaders')->willReturn([$header]);\n $message->method('getPayload')->willReturn($payload);\n\n $usersMessages = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersMessages::class);\n $usersMessages->method('get')->willReturn($message);\n\n $gmailService = $this->createMock(GoogleGmail::class);\n $gmailService->users_messages = $usersMessages;\n\n $service = $this->createTextRelayService();\n $reflection = new ReflectionClass($service);\n $method = $reflection->getMethod('isForCurrentEnvironment');\n $method->setAccessible(true);\n\n $result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');\n\n $this->assertFalse($result);\n }\n\n public function testSyncUsesEuAliasForEuRegion(): void\n {\n Config::set('jiminny.deploy_region', 'eu');\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n Config::set('jiminny.google_text_user', 'test@example.com');\n Config::set('jiminny.google_text_relay_topic', 'test-topic');\n\n $service = $this->createTextRelayService();\n $gmailService = $this->createMock(GoogleGmail::class);\n\n $historyResponse = $this->createMock(\\Google\\Service\\Gmail\\ListHistoryResponse::class);\n $historyResponse->historyId = 12345;\n $historyResponse->method('getHistory')->willReturn([]);\n $historyResponse->method('getNextPageToken')->willReturn(null);\n\n $usersHistory = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersHistory::class);\n $usersHistory->method('listUsersHistory')->willReturn($historyResponse);\n $gmailService->users_history = $usersHistory;\n\n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n\n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n $syncMethod->setAccessible(true);\n\n $result = $syncMethod->invoke($service);\n\n $this->assertIsArray($result);\n }\n\n public function testSyncUsesUsAliasForUsRegion(): void\n {\n Config::set('jiminny.deploy_region', 'us');\n Config::set('jiminny.google_text_host', 'txt.jiminny.com');\n Config::set('jiminny.google_text_user', 'test@example.com');\n Config::set('jiminny.google_text_relay_topic', 'test-topic');\n\n $service = $this->createTextRelayService();\n $gmailService = $this->createMock(GoogleGmail::class);\n\n $historyResponse = $this->createMock(\\Google\\Service\\Gmail\\ListHistoryResponse::class);\n $historyResponse->historyId = 12345;\n $historyResponse->method('getHistory')->willReturn([]);\n $historyResponse->method('getNextPageToken')->willReturn(null);\n\n $usersHistory = $this->createMock(\\Google\\Service\\Gmail\\Resource\\UsersHistory::class);\n $usersHistory->method('listUsersHistory')->willReturn($historyResponse);\n $gmailService->users_history = $usersHistory;\n\n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n\n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n $syncMethod->setAccessible(true);\n\n $result = $syncMethod->invoke($service);\n\n $this->assertIsArray($result);\n }\n\n private function createTextRelayService(): TextRelayService\n {\n $service = new class () extends TextRelayService {\n public function __construct()\n {\n }\n };\n\n return $service;\n }\n\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.42785904,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.43650267,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.4474734,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.45611703,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.46476063,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.47573137,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4867021,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.51329786,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.5242686,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.70611703,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"45","depth":4,"bounds":{"left":0.6761968,"top":0.123703115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.68849736,"top":0.123703115,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"41","depth":4,"bounds":{"left":0.6978058,"top":0.123703115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"66","depth":4,"bounds":{"left":0.7094415,"top":0.123703115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.72140956,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.7287234,"top":0.12210695,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM teams WHERE name LIKE '%litify%'; # 1069, 994, 24993\nSELECT * FROM users WHERE id = 25061;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 994;\nSELECT * FROM crm_profiles WHERE user_id = 25061;\n\nselect * from crm_configurations where id = 834;\nSELECT * FROM teams WHERE id = 882;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 882 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal\nSELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE provider = 'hubspot' and crm_provider_id = 7270388;\n\nSELECT * FROM contacts where crm_configuration_id = 834;\nSELECT * FROM opportunities WHERE team_id = 933\n# AND crm_provider_id IN ('20131586060','46017317898','52543911090','53451356564','54101251892','54323768459');\nAND id IN (8482561,18352941,19042734,19232139,19445140,19472541);\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id IN (8482561,18352941,19042734,19232139,19445140,19472541);\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; #\nSELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\nselect crm.provider, l.* from leads l join crm_configurations crm on l.crm_configuration_id = crm.id\nwhere crm.provider NOT IN ('salesforce', 'integration-app', 'bullhorn', 'copper')\n# and l.converted_at IS NOT NULL\n;\n\n# ********************************************************************\nSELECT * FROM activities a WHERE type IN ('email-inbound', 'email-outbound')\nand opportunity_id IS NULL\norder by id desc;\n\nSELECT * FROM teams WHERE id = 604; # 598\nSELECT * FROM activities WHERE id = 74410828; # chelseaw@allvoices.co\nSELECT * FROM accounts WHERE id = 20068382;\nSELECT * FROM accounts WHERE id = 35186038;\n\nSELECT * FROM contacts WHERE team_id = 852 and updated_at > '2026-01-23 12:30:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 559 and sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('cb6342b6-a183-401c-b0af-ede92b2ae763') = uuid;\nselect * from sidekick_settings where team_id = 781;\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 26651871; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 7562435;\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8420347; # opflit 2100\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 711;\nSELECT * FROM activities where crm_configuration_id = 711 and crm_provider_id IS NULL\nand is_internal = 0 and status = 'completed'\norder by id desc;\n\nSELECT * FROM crm_layout_entities\nWHERE crm_layout_id IN (2352, 2353);\n;\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and id = 530;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('c6ca4b22-7738-4563-a95d-b8a9598924ae') = uuid;\nSELECT * FROM activities WHERE uuid_to_bin('442abb2b-28bd-4be8-9c25-19e9bf02766d') = uuid;\nselect * from contacts\nwhere crm_configuration_id = 530\nand crm_provider_id = 872252;\n\nselect * from activities where crm_configuration_id = 530\nand user_id = 14343 and type like '%softphone%'\nand created_at between '2026-01-28 15:00:00' and '2026-01-28 15:10:00';\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 25666868; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8646335; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id IN (5933397);\n\n\nSELECT t.name, t.id, t.owner_id, c.id, c.provider, c.crm_base_url FROM teams t\nJOIN crm_configurations c ON t.id = c.team_id\nWHERE t.status = 'active';\n\nSELECT * FROM teams where id = 1091;\nSELECT * FROM crm_configurations where team_id = 1091;\nSELECT * FROM activity_providers where team_id = 1091;\nSELECT * FROM activities where crm_configuration_id = 1024 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\n\n\nSELECT * FROM teams WHERE name LIKE '%Leadventure%';\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1091 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%Wilson%'; # 862, 812\nSELECT * FROM teams where id = 862;\nSELECT * FROM crm_configurations where team_id = 862;\nSELECT * FROM activity_providers where team_id = 862;\nSELECT * FROM activities where crm_configuration_id = 812 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\n\n\nSELECT t.id, crm.id, crm.provider, ap.* FROM teams t\njoin crm_configurations crm on t.id = crm.team_id\njoin activity_providers ap on t.id = ap.team_id\nwhere t.status = 'active' and ap.is_enabled = 1\nand crm.provider = 'hubspot'\nand ap.provider NOT IN ('hubspot', 'aircall', 'uploader', 'gong', 'twilio', 'zoom-bot', 'google-meet', 'ms-teams',\n 'outreach', 'close', 'ringcentral', 'dialpad', 'zoom-phone');\n\nSELECT * FROM teams where id = 1068;\nSELECT * FROM crm_configurations where team_id = 1068;\nSELECT * FROM activity_providers where team_id = 1068;\n\nSELECT * FROM activities a\nwhere crm_configuration_id = 993 and type IN ('softphone', 'softphone-outbound')\nand a.provider NOT IN ('hubspot', 'uploader', 'gong', 'twilio', 'google-meet', 'ms-teams','close'\n )\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by a.id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1068 and sa.provider = 'hubspot';\n\n# ********************************************************************\n# ********************************************************************\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal , portalId: 6017093\nSELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-06 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 834; # 882 - AnyVan , portalId: 5468262\nSELECT * FROM contacts WHERE crm_configuration_id = 834 and updated_at > '2026-03-30 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE crm_configuration_id = 834 and updated_at > '2026-03-04 08:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 882 and sa.provider = 'hubspot';\nselect * from crm_layouts where crm_configuration_id = 834;\nselect * from crm_layout_entities where crm_layout_id = 2780;\nselect * from crm_fields where id IN (321153,321192,321193,321194);\n\nSELECT * FROM opportunities WHERE crm_configuration_id = 834 and id = 10993426;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 988; # 1057 - Teya (543ce4f4-168c-4571-91ea-5b35c253f06f) , portalId: 26651871\nSELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1057 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations where id = 533; # 559 - Connectd , portalId: 6710988\nSELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 801; # 852 - Rise Vision , portalId: 2700250\nSELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-04 00:00:00' order by updated_at desc; # 6th last\n\nSELECT * FROM crm_configurations where id = 962; # 1034 - evergrowth.io , portalId: 143180990\nSELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 1037; # 1102 - Jibble , portalId: 6649755\nSELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 8\n\nSELECT * FROM crm_configurations where id = 1015; # 1049 - Travefy , portalId: 48904401\nSELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 20\n\nSELECT * FROM crm_configurations where id = 64; # 70 - SalaryFinance , portalId: 3404115\nSELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 6th last\n\nSELECT * FROM crm_configurations where id = 802; # 853 - Street Group , portalId: 7658438\nSELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 10\n\nSELECT * FROM crm_configurations where id = 872; # 921 - In Professional Development , portalId: 9238273\nSELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 2\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 550; # 576 - SeedLegals , portalId: 3028661\nSELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 989; # 1058 - rtaoutdoor.com , portalId: 22371204\nSELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 896; # 946 - Mintago , portalId: 6621281\nSELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 617; # 641 - PCS , portalId: 5244937\nSELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-05 14:00:00' order by updated_at desc; # 7th\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 649; # 670 - Eventeny , portalId: 4492849\nSELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; #\n\nSELECT * FROM crm_configurations where id = 48; # 51 - CleanCloud , portalId: 4373137\nSELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-03-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-02-09 08:00:00' order by updated_at desc;\nselect * from users where team_id = 51; # 7783\nSELECT * FROM groups WHERE uuid_to_bin('8a8d2cb6-8b55-4fa3-8b5c-5f0e3d8de59a') = uuid; # 1130\nselect * from activity_searches where user_id = 7783;\nselect * from activity_search_filters where activity_search_id IN (32291, 32292);\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations where id = 272; # 290 - Bonham & Brook , portalId: 5705856\nSELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-05 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; # 6th\n# ********************************************************************\nSELECT * FROM crm_configurations where provider = 'hubspot';\nSELECT * FROM crm_configurations where id = 1056; # 1119 - Chromatic , portalId: 45602133\nSELECT * FROM opportunities WHERE team_id = 1119 and remotely_created_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1119 and updated_at > '2026-02-09 09:00:00' order by updated_at desc; # null\n# ********************************************************************\n\nselect * from contacts where crm_provider_id = '003Uu00000ojD4NIAU';\nselect\n cp.*\n# DISTINCT t.id\n# cp.id, cp.user_id, t.id, cp.crm_configuration_id, cp.contact_fields\nFROM crm_profiles cp\nJOIN crm_configurations crm on crm.id = cp.crm_configuration_id\nJOIN users u on u.id = cp.user_id\nJOIN teams t ON t.id = crm.team_id\nWHERE crm.provider = 'salesforce' and t.status = 'active'\n and cp.archived_at IS NULL and u.deleted_at IS NULL\n and t.id NOT IN (1093)\n and t.id = 2\n and cp.contact_fields IS NULL;\n# and c.crm_provider_id = '003Uu00000ojD4NIAU';\n\nSELECT * FROM users WHERE id = 26484;\nSELECT * FROM crm_profiles WHERE user_id = 26484;\nSELECT * FROM social_accounts WHERE sociable_id = 26484;\nSELECT * FROM crm_configurations where provider = 'salesforce';\nselect * from users where id IN (10022, 10403);\nselect * from users where team_id IN (526);\nselect * from teams where id IN (526, 532);\nselect * from crm_configurations where id IN (500, 516);\nselect * from crm_profiles where crm_configuration_id IN (500, 516) and user_id IN (10022, 10403);\nselect * from contacts where crm_configuration_id IN (500, 516) and crm_provider_id = '003Uu00000ojD4NIAU';\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 526 and sa.provider = 'salesforce';\nselect * from team_settings where team_id IN (526, 532);\n\nselect * from users where id IN (22824);\nselect * from crm_profiles where crm_configuration_id IN (1026);\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1093 and sa.provider = 'salesforce';\n\nselect * from teams where id = 1099;\nselect * from users where id = 29643\n\nselect * from activity_processing_states;\n\nSELECT * FROM teams where name LIKE '%Fare%'; # 233\nSELECT * FROM opportunities where crm_configuration_id = 215\n# and crm_provider_id = 'oppo_ogESZf2P50nDrd1nGPvKDXeA6sSaTN5v51Lp4ayVzKR'\n;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1088 and sa.provider = 'hubspot';\n\nSELECT * FROM teams order by updated_at DESC\nSELECT * FROM crm_configurations WHERE id = 1019; # SimpleConsign 1088 - no social account\n\nselect * from crm_configurations where provider = 'pipedrive';\n\nselect * from teams where id = 957;\nselect * from crm_configurations where id = 957;\n\nSELECT * FROM teams WHERE name LIKE '%Prolific%'; # 544, 518, 10743\nSELECT * FROM opportunities where crm_configuration_id = 518 order by id desc;\n\nselect * from users where team_id = 1; # 26726 - Gabriela Dureva\nSELECT * FROM opportunities where user_id = 26726; # 16834447 - Prolific\nselect * from activities where user_id = 26726 order by id desc;\nselect * from contacts where crm_configuration_id = 1\nand email IN ('charlotte.ward@prolific.com', 'frankie.bryant@prolific.com'); # 2094416, 2093620\nSELECT * FROM contacts WHERE id = 6284931;\n\nSELECT p.* FROM activities a JOIN participants p ON a.id = p.activity_id\nWHERE a.user_id = 26726 and p.lead_id IN (2094416, 2093620) and a.created_at > '2026-01-01 00:00:00' order by p.email;\n\nselect * from activities where id IN (75509259,75509261,75509261,75511034,75026464,75517602,75517605);\nselect * from crm_configurations where id = 1;\n\n43801692-1aeb-32ce-acba-5b80a479701a\n44c3c9cf-6f5e-75f3-8179-bc9f75dd2b1b\n405975c0-b3d0-7aaa-821f-09d59cae6dd1\n4caf848d-4bed-2299-b248-7788d41f9fca\n49bedc3f-f196-eef3-89c3-dea6a3b4aa63\n43420989-a09d-b8f8-9806-c8bbf7a02aac\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nSELECT * FROM activities WHERE id = 75461988;\n\nSELECT * FROM activities WHERE uuid_to_bin('d6c5052e-e972-49e9-8912-26f2f7d6c5f6') = uuid;\n\nselect * from contacts where id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nselect * from users where id = 21047;\nSELECT * FROM crm_configurations WHERE id = 892;\nSELECT * FROM teams WHERE id = 942;\nselect * from opportunities where team_id = 942 order by updated_at desc;\nselect * from contacts where team_id = 942 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 942 and sa.provider = 'hubspot';\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id IN ('006Pq00000NeH6XIAV', '006Pq000007z8kdIAA'); # 10697889, 6621430\nSELECT * FROM crm_configurations WHERE id = 1;\nSELECT * FROM teams WHERE crm_id = 1;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nselect id, user_id, opportunity_fields from crm_profiles where crm_configuration_id = 1\nSELECT * FROM opportunities where team_id = 1 order by updated_at desc; # 10697889, 6621430\n\nselect * from teams where id = 852;\nselect * from groups where id = 2286;\nselect * from sidekick_settings where team_id = 852;\nselect * from default_activity_types where team_id = 852;\n\n\nSELECT cc.provider, cc.id, p.id, u.*\nFROM users u\nLEFT JOIN crm_profiles p ON u.id = p.user_id AND p.id IS NULL -- no profile\nINNER JOIN teams t ON u.team_id = t.id AND t.status = 'active' -- team is active\nINNER JOIN crm_configurations cc ON t.crm_id = cc.id\nWHERE u.status = 1 AND u.deleted_at IS NULL\nAND u.crm_required = 1\nAND u.team_id = 1\nORDER BY u.team_id;\n\nSELECT * FROM crm_profiles cp where cp.crm_configuration_id = 1 and cp.user_id IN (\n18481\n );\n\nSELECT cc.provider, cc.id, p.id, u.*\nFROM users u\nLEFT JOIN crm_profiles p ON u.id = p.user_id\nINNER JOIN teams t ON u.team_id = t.id AND t.status = 'active'\nINNER JOIN crm_configurations cc ON t.crm_id = cc.id\nWHERE u.status = 1\n AND u.deleted_at IS NULL\n AND u.crm_required = 1\n# AND u.team_id = 1\n AND p.id IS NULL -- Move this condition to WHERE clause\nORDER BY u.team_id;\n\nSELECT * FROM opportunities WHERE id = 20002609;\nselect * from teams where id = 1122; # Velatir, 29953 - christian@velatir.com\nselect * from crm_configurations where id = 1060;\nselect * from crm_layouts where crm_configuration_id = 1060;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 3596;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1122 and sa.provider = 'hubspot';\nselect * from opportunities where team_id = 1122 order by updated_at desc;\n\nselect * from crm_field_data where object_type = 'contact';\n\nSELECT * FROM activities WHERE uuid_to_bin('374fc8ed-3315-4c9f-9b25-318b7fd2928f') = uuid; # 76584262\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 248 and sa.provider = 'salesforce';\n\nSELECT * FROM crm_profiles where user_id = 24115; # 005QF000002CswMYAS\nSELECT * FROM users where id = 24115;\nSELECT * FROM accounts where id = 4002896;\nSELECT * FROM teams WHERE name LIKE '%adswerve%';\nSELECT * FROM opportunities where crm_configuration_id = 230 AND crm_provider_id IN (\"0069N000003GIQ9QAO\",\"0061r000019yGP9AAM\",\"0066900001S2KWlAAN\",\"0066900001TDpj2AAD\",\"0066900001b8uEwAAI\",\"0069N000001rQi0QAE\",\"006QF00000KD40mYAD\",\"006QF00000LzpRJYAZ\",\"0069N000002uomtQAA\",\"0069N000002xlMLQAY\",\"0066900001NV6ubAAD\",\"0061r00001HJp45AAD\",\"006QF00000uTlUoYAK\",\"006QF00000v0bZqYAI\");\nSELECT * FROM opportunities WHERE crm_configuration_id = 230 AND crm_provider_id = '0069N000003GIQ9QAO'; # 6272203\n\nSELECT u.id, u.email, ac.name, a.* FROM activities a\nJOIN users u ON a.user_id = u.id\nJOIN accounts ac ON a.account_id = ac.id\nWHERE\nuuid_to_bin('e3269598-b562-44fb-b5e9-9d2694dc63e0') = a.uuid or\nuuid_to_bin('66ddc3ab-4e15-45aa-af0c-248c1eece593') = a.uuid or\nuuid_to_bin('826bd328-e1cc-4213-b8d8-572454cacc07') = a.uuid;\n\nselect * from users where id = 5825;\nSELECT * FROM activities WHERE uuid_to_bin('e56aa2e8-231a-421b-ab1f-cb38ed2bf573') = uuid;\n\nselect * from activities where uuid_to_bin('91e13b2f-2d1b-45f8-b1fd-1141b6563782') = uuid;\n19594, 862\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 862 and sa.provider = 'salesforce';\n\nselect * from automated_reports where id = 36;\nselect ar.frequency, r.*, ar.* from automated_report_results r\njoin automated_reports ar on r.report_id = ar.id\nwhere ar.frequency != 'one_off';\n\nselect s.* from activity_searches s join users u ON s.user_id = u.id where u.team_id = 882;\nselect * from nudges n where n.activity_search_id\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 1065; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 3617;\n\nselect * from users where team_id = 1 and name like '%Lukas%'; # 7160\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\nSELECT * FROM teams WHERE name LIKE '%Integrum ESG%'; # 1126, 1065,\nselect * from opportunities where team_id = 1126;\nSELECT * FROM teams WHERE name LIKE '%Base%'; # 1125, 1063,\nselect * from opportunities where team_id = 1125;\nselect * from contacts c\nwhere c.team_id = 882;\n\nSELECT * FROM activities WHERE id = 76822967;\nSELECT * FROM crm_profiles WHERE user_id = 15440;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 555;\nSELECT * FROM crm_configurations WHERE id = 555;\nSELECT * FROM users WHERE id = 15440; # team. 581, gr. 15440, pl. 3911, act. field 162182\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 581 and sa.provider = 'salesforce';\n\nSELECT * FROM automated_report_results order by id desc;\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556;\n\nselect * from automated_reports;\nwhere id = 54; # 4fdd41f6-dcf0-30d0-b339-7345381b6044 , [\"pdf\",\"podcast\"]\nSELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;\nselect * from automated_report_results order by id desc;\nSELECT * FROM automated_report_results WHERE id = 1919;\n\nselect * from automated_report_results WHERE report_id = 54;\n\nselect * from opportunities where id = 7594349;\n\nSELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - jiminnyintegration@lesmills.com\nselect * from playbooks where team_id = 711; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 5515;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 692 and object_type = 'event';\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 692;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 711 and sa.provider = 'salesforce';\n\nSELECT * FROM crm_profiles cp JOIN users u on u.id = cp.user_id WHERE u.team_id = 711;\n\nselect * from leads;\n\nselect * from calendars;\n\nSELECT\n t.id AS team_id,\n t.name,\n LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1)) AS calendar_domain\nFROM teams t\nJOIN users u ON u.team_id = t.id\nJOIN calendars c ON c.user_id = u.id AND c.status = 'active' AND c.calendar_provider_id LIKE '%@%'\nLEFT JOIN team_domains td\n ON td.team_id = t.id\n AND td.deleted_at IS NULL\n AND td.domain = LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1))\nGROUP BY t.id, t.name, calendar_domain\nORDER BY t.name, calendar_domain;\n\nselect * from users u join calendars c on c.user_id = u.id\nwhere u.team_id = 882;\n\n\nselect * from activities where id = 74049485; # team 563 crm 537\nselect * from activities where id = 73272382; # team 563 crm 537\nselect * from activities where id = 64400389; # team 563 crm 537\nselect * from activities where id = 58081273; # team 563 crm 537\nselect * from activities where id = 54520297; # team 563 crm 537\nselect * from participants where activity_id = 58081273;\n\nselect * from activities where crm_configuration_id = 537 and provider = 'aircall'\nand account_id = 19003658 order by updated_at desc;\n\nselect * from contacts where crm_configuration_id = 537 and id = 35957759;\nselect * from accounts where crm_configuration_id = 537 and id = 19003658;\n\nselect * from automated_report_results where id = 1976;\nselect * from automated_reports where id = 583;\nselect * from activity_searches where id = 87714;\nselect * from activity_search_filters where activity_search_id = 87714;\n\nSELECT * FROM activities WHERE uuid_to_bin('8827f672-202d-4162-9d04-73ff5f0566a9') = uuid\nor uuid_to_bin('47842446-af51-4bcb-854f-cc6560290101') = uuid;\n\nSELECT * FROM crm_configurations WHERE provider = 'hubspot';\nselect * from rate_limits;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2\nand id IN (18, 1872);\nselect * from automated_reports where id = 54;\nSELECT * FROM users WHERE id IN (24623,29443,29613);\n\nSELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;\n\nselect * from text_relays where created_at > '2026-05-01';\nand id IN (32415, 32416);\n# and id = 32412;\n\nselect * from users where team_id = 2 and email like '%scott%' and id = 29510;\n\nSELECT * FROM activities WHERE uuid_to_bin('67cebfc2-ed56-44a2-8c68-7a0286ed8618') = uuid; # 79763436\n\nSELECT email_provider_id, COUNT(*) as count, GROUP_CONCAT(id) as ids, GROUP_CONCAT(status) as statuses\nFROM text_relays\nWHERE email_provider_id IN ('19e2027868a64b42', '19e2033ed8ea6b10')\nGROUP BY email_provider_id;\nSELECT id, status, telephony_provider_id, created_at\nFROM activities\nWHERE id IN (80028719, 80028846);\nSELECT id, status, code, email_sent_at, created_at, updated_at\nFROM text_relays\nWHERE id IN (32415, 32416);\nSELECT id, status, code, sender, recipient, created_at\nFROM text_relays\nWHERE sender LIKE '%mario.georgiev%' OR sender LIKE '%stoyan.tomov%'\nORDER BY created_at DESC\nLIMIT 10;\n\nSELECT id, uuid, status, code, sender, recipient, created_at, updated_at\nFROM text_relays\nWHERE uuid = uuid_to_bin('0626141c-27a6-4d8c-aff8-7c8020a2c656');\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = .user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nselect * from teams where id = 1;\n\nselect * from roles;\n\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1117 and sa.provider = 'hubspot';\nSELECT * FROM activities WHERE uuid_to_bin('8024fffb-2df7-4017-91f4-d9f896050248') = uuid; # 79933459 YES\nSELECT * FROM activities WHERE uuid_to_bin('25529043-8094-4781-927f-4f4da2a8185c') = uuid; # 80186192 NO\nSELECT * FROM crm_configurations WHERE id = 1053;\nSELECT * FROM teams WHERE id = 1117;\nselect * from users where id = 30249;\nselect * from playbooks where id = 5473;\nselect * from playbook_categories where id = 43783;\nselect * from playbook_categories where playbook_id = 5473;\nselect * from crm_fields where id = 659242;\nselect * from crm_field_values where crm_field_id = 659242;\n\nSELECT * FROM crm_field_data fd\n# JOIN crm_fields f ON fd.crm_field_id = f.id\n# JOIN activities a ON fd.activity_id = a.id\nWHERE activity_id = 79933459\n# AND f.crm_provider_id = 'hs_activity_type';\n\nselect * from text_relays where created_at > '2026-05-01';\nselect * from activities where user_id IN (7160, 18608) and created_at > '2026-05-22' order by id desc;\nselect * from users where team_id = 1;","depth":4,"on_screen":true,"value":"SELECT * FROM teams WHERE name LIKE '%litify%'; # 1069, 994, 24993\nSELECT * FROM users WHERE id = 25061;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 994;\nSELECT * FROM crm_profiles WHERE user_id = 25061;\n\nselect * from crm_configurations where id = 834;\nSELECT * FROM teams WHERE id = 882;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 882 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal\nSELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE provider = 'hubspot' and crm_provider_id = 7270388;\n\nSELECT * FROM contacts where crm_configuration_id = 834;\nSELECT * FROM opportunities WHERE team_id = 933\n# AND crm_provider_id IN ('20131586060','46017317898','52543911090','53451356564','54101251892','54323768459');\nAND id IN (8482561,18352941,19042734,19232139,19445140,19472541);\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id IN (8482561,18352941,19042734,19232139,19445140,19472541);\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; #\nSELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\nselect crm.provider, l.* from leads l join crm_configurations crm on l.crm_configuration_id = crm.id\nwhere crm.provider NOT IN ('salesforce', 'integration-app', 'bullhorn', 'copper')\n# and l.converted_at IS NOT NULL\n;\n\n# ********************************************************************\nSELECT * FROM activities a WHERE type IN ('email-inbound', 'email-outbound')\nand opportunity_id IS NULL\norder by id desc;\n\nSELECT * FROM teams WHERE id = 604; # 598\nSELECT * FROM activities WHERE id = 74410828; # chelseaw@allvoices.co\nSELECT * FROM accounts WHERE id = 20068382;\nSELECT * FROM accounts WHERE id = 35186038;\n\nSELECT * FROM contacts WHERE team_id = 852 and updated_at > '2026-01-23 12:30:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 559 and sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('cb6342b6-a183-401c-b0af-ede92b2ae763') = uuid;\nselect * from sidekick_settings where team_id = 781;\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 26651871; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 7562435;\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8420347; # opflit 2100\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 711;\nSELECT * FROM activities where crm_configuration_id = 711 and crm_provider_id IS NULL\nand is_internal = 0 and status = 'completed'\norder by id desc;\n\nSELECT * FROM crm_layout_entities\nWHERE crm_layout_id IN (2352, 2353);\n;\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and id = 530;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('c6ca4b22-7738-4563-a95d-b8a9598924ae') = uuid;\nSELECT * FROM activities WHERE uuid_to_bin('442abb2b-28bd-4be8-9c25-19e9bf02766d') = uuid;\nselect * from contacts\nwhere crm_configuration_id = 530\nand crm_provider_id = 872252;\n\nselect * from activities where crm_configuration_id = 530\nand user_id = 14343 and type like '%softphone%'\nand created_at between '2026-01-28 15:00:00' and '2026-01-28 15:10:00';\n\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 25666868; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8646335; # Teya\nSELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id IN (5933397);\n\n\nSELECT t.name, t.id, t.owner_id, c.id, c.provider, c.crm_base_url FROM teams t\nJOIN crm_configurations c ON t.id = c.team_id\nWHERE t.status = 'active';\n\nSELECT * FROM teams where id = 1091;\nSELECT * FROM crm_configurations where team_id = 1091;\nSELECT * FROM activity_providers where team_id = 1091;\nSELECT * FROM activities where crm_configuration_id = 1024 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\n\n\nSELECT * FROM teams WHERE name LIKE '%Leadventure%';\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1091 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%Wilson%'; # 862, 812\nSELECT * FROM teams where id = 862;\nSELECT * FROM crm_configurations where team_id = 862;\nSELECT * FROM activity_providers where team_id = 862;\nSELECT * FROM activities where crm_configuration_id = 812 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\n\n\nSELECT t.id, crm.id, crm.provider, ap.* FROM teams t\njoin crm_configurations crm on t.id = crm.team_id\njoin activity_providers ap on t.id = ap.team_id\nwhere t.status = 'active' and ap.is_enabled = 1\nand crm.provider = 'hubspot'\nand ap.provider NOT IN ('hubspot', 'aircall', 'uploader', 'gong', 'twilio', 'zoom-bot', 'google-meet', 'ms-teams',\n 'outreach', 'close', 'ringcentral', 'dialpad', 'zoom-phone');\n\nSELECT * FROM teams where id = 1068;\nSELECT * FROM crm_configurations where team_id = 1068;\nSELECT * FROM activity_providers where team_id = 1068;\n\nSELECT * FROM activities a\nwhere crm_configuration_id = 993 and type IN ('softphone', 'softphone-outbound')\nand a.provider NOT IN ('hubspot', 'uploader', 'gong', 'twilio', 'google-meet', 'ms-teams','close'\n )\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by a.id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1068 and sa.provider = 'hubspot';\n\n# ********************************************************************\n# ********************************************************************\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal , portalId: 6017093\nSELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-06 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 933 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 834; # 882 - AnyVan , portalId: 5468262\nSELECT * FROM contacts WHERE crm_configuration_id = 834 and updated_at > '2026-03-30 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE crm_configuration_id = 834 and updated_at > '2026-03-04 08:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 882 and sa.provider = 'hubspot';\nselect * from crm_layouts where crm_configuration_id = 834;\nselect * from crm_layout_entities where crm_layout_id = 2780;\nselect * from crm_fields where id IN (321153,321192,321193,321194);\n\nSELECT * FROM opportunities WHERE crm_configuration_id = 834 and id = 10993426;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 988; # 1057 - Teya (543ce4f4-168c-4571-91ea-5b35c253f06f) , portalId: 26651871\nSELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1057 and sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations where id = 533; # 559 - Connectd , portalId: 6710988\nSELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 801; # 852 - Rise Vision , portalId: 2700250\nSELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-04 00:00:00' order by updated_at desc; # 6th last\n\nSELECT * FROM crm_configurations where id = 962; # 1034 - evergrowth.io , portalId: 143180990\nSELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 1037; # 1102 - Jibble , portalId: 6649755\nSELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 8\n\nSELECT * FROM crm_configurations where id = 1015; # 1049 - Travefy , portalId: 48904401\nSELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 20\n\nSELECT * FROM crm_configurations where id = 64; # 70 - SalaryFinance , portalId: 3404115\nSELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 6th last\n\nSELECT * FROM crm_configurations where id = 802; # 853 - Street Group , portalId: 7658438\nSELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 10\n\nSELECT * FROM crm_configurations where id = 872; # 921 - In Professional Development , portalId: 9238273\nSELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 2\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 550; # 576 - SeedLegals , portalId: 3028661\nSELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 989; # 1058 - rtaoutdoor.com , portalId: 22371204\nSELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 896; # 946 - Mintago , portalId: 6621281\nSELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 617; # 641 - PCS , portalId: 5244937\nSELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-05 14:00:00' order by updated_at desc; # 7th\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 649; # 670 - Eventeny , portalId: 4492849\nSELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; #\n\nSELECT * FROM crm_configurations where id = 48; # 51 - CleanCloud , portalId: 4373137\nSELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-03-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-02-09 08:00:00' order by updated_at desc;\nselect * from users where team_id = 51; # 7783\nSELECT * FROM groups WHERE uuid_to_bin('8a8d2cb6-8b55-4fa3-8b5c-5f0e3d8de59a') = uuid; # 1130\nselect * from activity_searches where user_id = 7783;\nselect * from activity_search_filters where activity_search_id IN (32291, 32292);\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations where id = 272; # 290 - Bonham & Brook , portalId: 5705856\nSELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-05 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; # 6th\n# ********************************************************************\nSELECT * FROM crm_configurations where provider = 'hubspot';\nSELECT * FROM crm_configurations where id = 1056; # 1119 - Chromatic , portalId: 45602133\nSELECT * FROM opportunities WHERE team_id = 1119 and remotely_created_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 1119 and updated_at > '2026-02-09 09:00:00' order by updated_at desc; # null\n# ********************************************************************\n\nselect * from contacts where crm_provider_id = '003Uu00000ojD4NIAU';\nselect\n cp.*\n# DISTINCT t.id\n# cp.id, cp.user_id, t.id, cp.crm_configuration_id, cp.contact_fields\nFROM crm_profiles cp\nJOIN crm_configurations crm on crm.id = cp.crm_configuration_id\nJOIN users u on u.id = cp.user_id\nJOIN teams t ON t.id = crm.team_id\nWHERE crm.provider = 'salesforce' and t.status = 'active'\n and cp.archived_at IS NULL and u.deleted_at IS NULL\n and t.id NOT IN (1093)\n and t.id = 2\n and cp.contact_fields IS NULL;\n# and c.crm_provider_id = '003Uu00000ojD4NIAU';\n\nSELECT * FROM users WHERE id = 26484;\nSELECT * FROM crm_profiles WHERE user_id = 26484;\nSELECT * FROM social_accounts WHERE sociable_id = 26484;\nSELECT * FROM crm_configurations where provider = 'salesforce';\nselect * from users where id IN (10022, 10403);\nselect * from users where team_id IN (526);\nselect * from teams where id IN (526, 532);\nselect * from crm_configurations where id IN (500, 516);\nselect * from crm_profiles where crm_configuration_id IN (500, 516) and user_id IN (10022, 10403);\nselect * from contacts where crm_configuration_id IN (500, 516) and crm_provider_id = '003Uu00000ojD4NIAU';\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 526 and sa.provider = 'salesforce';\nselect * from team_settings where team_id IN (526, 532);\n\nselect * from users where id IN (22824);\nselect * from crm_profiles where crm_configuration_id IN (1026);\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1093 and sa.provider = 'salesforce';\n\nselect * from teams where id = 1099;\nselect * from users where id = 29643\n\nselect * from activity_processing_states;\n\nSELECT * FROM teams where name LIKE '%Fare%'; # 233\nSELECT * FROM opportunities where crm_configuration_id = 215\n# and crm_provider_id = 'oppo_ogESZf2P50nDrd1nGPvKDXeA6sSaTN5v51Lp4ayVzKR'\n;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1088 and sa.provider = 'hubspot';\n\nSELECT * FROM teams order by updated_at DESC\nSELECT * FROM crm_configurations WHERE id = 1019; # SimpleConsign 1088 - no social account\n\nselect * from crm_configurations where provider = 'pipedrive';\n\nselect * from teams where id = 957;\nselect * from crm_configurations where id = 957;\n\nSELECT * FROM teams WHERE name LIKE '%Prolific%'; # 544, 518, 10743\nSELECT * FROM opportunities where crm_configuration_id = 518 order by id desc;\n\nselect * from users where team_id = 1; # 26726 - Gabriela Dureva\nSELECT * FROM opportunities where user_id = 26726; # 16834447 - Prolific\nselect * from activities where user_id = 26726 order by id desc;\nselect * from contacts where crm_configuration_id = 1\nand email IN ('charlotte.ward@prolific.com', 'frankie.bryant@prolific.com'); # 2094416, 2093620\nSELECT * FROM contacts WHERE id = 6284931;\n\nSELECT p.* FROM activities a JOIN participants p ON a.id = p.activity_id\nWHERE a.user_id = 26726 and p.lead_id IN (2094416, 2093620) and a.created_at > '2026-01-01 00:00:00' order by p.email;\n\nselect * from activities where id IN (75509259,75509261,75509261,75511034,75026464,75517602,75517605);\nselect * from crm_configurations where id = 1;\n\n43801692-1aeb-32ce-acba-5b80a479701a\n44c3c9cf-6f5e-75f3-8179-bc9f75dd2b1b\n405975c0-b3d0-7aaa-821f-09d59cae6dd1\n4caf848d-4bed-2299-b248-7788d41f9fca\n49bedc3f-f196-eef3-89c3-dea6a3b4aa63\n43420989-a09d-b8f8-9806-c8bbf7a02aac\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nSELECT * FROM activities WHERE id = 75461988;\n\nSELECT * FROM activities WHERE uuid_to_bin('d6c5052e-e972-49e9-8912-26f2f7d6c5f6') = uuid;\n\nselect * from contacts where id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nselect * from users where id = 21047;\nSELECT * FROM crm_configurations WHERE id = 892;\nSELECT * FROM teams WHERE id = 942;\nselect * from opportunities where team_id = 942 order by updated_at desc;\nselect * from contacts where team_id = 942 order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 942 and sa.provider = 'hubspot';\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id IN ('006Pq00000NeH6XIAV', '006Pq000007z8kdIAA'); # 10697889, 6621430\nSELECT * FROM crm_configurations WHERE id = 1;\nSELECT * FROM teams WHERE crm_id = 1;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nselect id, user_id, opportunity_fields from crm_profiles where crm_configuration_id = 1\nSELECT * FROM opportunities where team_id = 1 order by updated_at desc; # 10697889, 6621430\n\nselect * from teams where id = 852;\nselect * from groups where id = 2286;\nselect * from sidekick_settings where team_id = 852;\nselect * from default_activity_types where team_id = 852;\n\n\nSELECT cc.provider, cc.id, p.id, u.*\nFROM users u\nLEFT JOIN crm_profiles p ON u.id = p.user_id AND p.id IS NULL -- no profile\nINNER JOIN teams t ON u.team_id = t.id AND t.status = 'active' -- team is active\nINNER JOIN crm_configurations cc ON t.crm_id = cc.id\nWHERE u.status = 1 AND u.deleted_at IS NULL\nAND u.crm_required = 1\nAND u.team_id = 1\nORDER BY u.team_id;\n\nSELECT * FROM crm_profiles cp where cp.crm_configuration_id = 1 and cp.user_id IN (\n18481\n );\n\nSELECT cc.provider, cc.id, p.id, u.*\nFROM users u\nLEFT JOIN crm_profiles p ON u.id = p.user_id\nINNER JOIN teams t ON u.team_id = t.id AND t.status = 'active'\nINNER JOIN crm_configurations cc ON t.crm_id = cc.id\nWHERE u.status = 1\n AND u.deleted_at IS NULL\n AND u.crm_required = 1\n# AND u.team_id = 1\n AND p.id IS NULL -- Move this condition to WHERE clause\nORDER BY u.team_id;\n\nSELECT * FROM opportunities WHERE id = 20002609;\nselect * from teams where id = 1122; # Velatir, 29953 - christian@velatir.com\nselect * from crm_configurations where id = 1060;\nselect * from crm_layouts where crm_configuration_id = 1060;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 3596;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1122 and sa.provider = 'hubspot';\nselect * from opportunities where team_id = 1122 order by updated_at desc;\n\nselect * from crm_field_data where object_type = 'contact';\n\nSELECT * FROM activities WHERE uuid_to_bin('374fc8ed-3315-4c9f-9b25-318b7fd2928f') = uuid; # 76584262\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 248 and sa.provider = 'salesforce';\n\nSELECT * FROM crm_profiles where user_id = 24115; # 005QF000002CswMYAS\nSELECT * FROM users where id = 24115;\nSELECT * FROM accounts where id = 4002896;\nSELECT * FROM teams WHERE name LIKE '%adswerve%';\nSELECT * FROM opportunities where crm_configuration_id = 230 AND crm_provider_id IN (\"0069N000003GIQ9QAO\",\"0061r000019yGP9AAM\",\"0066900001S2KWlAAN\",\"0066900001TDpj2AAD\",\"0066900001b8uEwAAI\",\"0069N000001rQi0QAE\",\"006QF00000KD40mYAD\",\"006QF00000LzpRJYAZ\",\"0069N000002uomtQAA\",\"0069N000002xlMLQAY\",\"0066900001NV6ubAAD\",\"0061r00001HJp45AAD\",\"006QF00000uTlUoYAK\",\"006QF00000v0bZqYAI\");\nSELECT * FROM opportunities WHERE crm_configuration_id = 230 AND crm_provider_id = '0069N000003GIQ9QAO'; # 6272203\n\nSELECT u.id, u.email, ac.name, a.* FROM activities a\nJOIN users u ON a.user_id = u.id\nJOIN accounts ac ON a.account_id = ac.id\nWHERE\nuuid_to_bin('e3269598-b562-44fb-b5e9-9d2694dc63e0') = a.uuid or\nuuid_to_bin('66ddc3ab-4e15-45aa-af0c-248c1eece593') = a.uuid or\nuuid_to_bin('826bd328-e1cc-4213-b8d8-572454cacc07') = a.uuid;\n\nselect * from users where id = 5825;\nSELECT * FROM activities WHERE uuid_to_bin('e56aa2e8-231a-421b-ab1f-cb38ed2bf573') = uuid;\n\nselect * from activities where uuid_to_bin('91e13b2f-2d1b-45f8-b1fd-1141b6563782') = uuid;\n19594, 862\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 862 and sa.provider = 'salesforce';\n\nselect * from automated_reports where id = 36;\nselect ar.frequency, r.*, ar.* from automated_report_results r\njoin automated_reports ar on r.report_id = ar.id\nwhere ar.frequency != 'one_off';\n\nselect s.* from activity_searches s join users u ON s.user_id = u.id where u.team_id = 882;\nselect * from nudges n where n.activity_search_id\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 1065; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 3617;\n\nselect * from users where team_id = 1 and name like '%Lukas%'; # 7160\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\nSELECT * FROM teams WHERE name LIKE '%Integrum ESG%'; # 1126, 1065,\nselect * from opportunities where team_id = 1126;\nSELECT * FROM teams WHERE name LIKE '%Base%'; # 1125, 1063,\nselect * from opportunities where team_id = 1125;\nselect * from contacts c\nwhere c.team_id = 882;\n\nSELECT * FROM activities WHERE id = 76822967;\nSELECT * FROM crm_profiles WHERE user_id = 15440;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 555;\nSELECT * FROM crm_configurations WHERE id = 555;\nSELECT * FROM users WHERE id = 15440; # team. 581, gr. 15440, pl. 3911, act. field 162182\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 581 and sa.provider = 'salesforce';\n\nSELECT * FROM automated_report_results order by id desc;\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556;\n\nselect * from automated_reports;\nwhere id = 54; # 4fdd41f6-dcf0-30d0-b339-7345381b6044 , [\"pdf\",\"podcast\"]\nSELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;\nselect * from automated_report_results order by id desc;\nSELECT * FROM automated_report_results WHERE id = 1919;\n\nselect * from automated_report_results WHERE report_id = 54;\n\nselect * from opportunities where id = 7594349;\n\nSELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - jiminnyintegration@lesmills.com\nselect * from playbooks where team_id = 711; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 5515;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 692 and object_type = 'event';\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 692;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 711 and sa.provider = 'salesforce';\n\nSELECT * FROM crm_profiles cp JOIN users u on u.id = cp.user_id WHERE u.team_id = 711;\n\nselect * from leads;\n\nselect * from calendars;\n\nSELECT\n t.id AS team_id,\n t.name,\n LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1)) AS calendar_domain\nFROM teams t\nJOIN users u ON u.team_id = t.id\nJOIN calendars c ON c.user_id = u.id AND c.status = 'active' AND c.calendar_provider_id LIKE '%@%'\nLEFT JOIN team_domains td\n ON td.team_id = t.id\n AND td.deleted_at IS NULL\n AND td.domain = LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1))\nGROUP BY t.id, t.name, calendar_domain\nORDER BY t.name, calendar_domain;\n\nselect * from users u join calendars c on c.user_id = u.id\nwhere u.team_id = 882;\n\n\nselect * from activities where id = 74049485; # team 563 crm 537\nselect * from activities where id = 73272382; # team 563 crm 537\nselect * from activities where id = 64400389; # team 563 crm 537\nselect * from activities where id = 58081273; # team 563 crm 537\nselect * from activities where id = 54520297; # team 563 crm 537\nselect * from participants where activity_id = 58081273;\n\nselect * from activities where crm_configuration_id = 537 and provider = 'aircall'\nand account_id = 19003658 order by updated_at desc;\n\nselect * from contacts where crm_configuration_id = 537 and id = 35957759;\nselect * from accounts where crm_configuration_id = 537 and id = 19003658;\n\nselect * from automated_report_results where id = 1976;\nselect * from automated_reports where id = 583;\nselect * from activity_searches where id = 87714;\nselect * from activity_search_filters where activity_search_id = 87714;\n\nSELECT * FROM activities WHERE uuid_to_bin('8827f672-202d-4162-9d04-73ff5f0566a9') = uuid\nor uuid_to_bin('47842446-af51-4bcb-854f-cc6560290101') = uuid;\n\nSELECT * FROM crm_configurations WHERE provider = 'hubspot';\nselect * from rate_limits;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2\nand id IN (18, 1872);\nselect * from automated_reports where id = 54;\nSELECT * FROM users WHERE id IN (24623,29443,29613);\n\nSELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;\n\nselect * from text_relays where created_at > '2026-05-01';\nand id IN (32415, 32416);\n# and id = 32412;\n\nselect * from users where team_id = 2 and email like '%scott%' and id = 29510;\n\nSELECT * FROM activities WHERE uuid_to_bin('67cebfc2-ed56-44a2-8c68-7a0286ed8618') = uuid; # 79763436\n\nSELECT email_provider_id, COUNT(*) as count, GROUP_CONCAT(id) as ids, GROUP_CONCAT(status) as statuses\nFROM text_relays\nWHERE email_provider_id IN ('19e2027868a64b42', '19e2033ed8ea6b10')\nGROUP BY email_provider_id;\nSELECT id, status, telephony_provider_id, created_at\nFROM activities\nWHERE id IN (80028719, 80028846);\nSELECT id, status, code, email_sent_at, created_at, updated_at\nFROM text_relays\nWHERE id IN (32415, 32416);\nSELECT id, status, code, sender, recipient, created_at\nFROM text_relays\nWHERE sender LIKE '%mario.georgiev%' OR sender LIKE '%stoyan.tomov%'\nORDER BY created_at DESC\nLIMIT 10;\n\nSELECT id, uuid, status, code, sender, recipient, created_at, updated_at\nFROM text_relays\nWHERE uuid = uuid_to_bin('0626141c-27a6-4d8c-aff8-7c8020a2c656');\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = .user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nselect * from teams where id = 1;\n\nselect * from roles;\n\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1117 and sa.provider = 'hubspot';\nSELECT * FROM activities WHERE uuid_to_bin('8024fffb-2df7-4017-91f4-d9f896050248') = uuid; # 79933459 YES\nSELECT * FROM activities WHERE uuid_to_bin('25529043-8094-4781-927f-4f4da2a8185c') = uuid; # 80186192 NO\nSELECT * FROM crm_configurations WHERE id = 1053;\nSELECT * FROM teams WHERE id = 1117;\nselect * from users where id = 30249;\nselect * from playbooks where id = 5473;\nselect * from playbook_categories where id = 43783;\nselect * from playbook_categories where playbook_id = 5473;\nselect * from crm_fields where id = 659242;\nselect * from crm_field_values where crm_field_id = 659242;\n\nSELECT * FROM crm_field_data fd\n# JOIN crm_fields f ON fd.crm_field_id = f.id\n# JOIN activities a ON fd.activity_id = a.id\nWHERE activity_id = 79933459\n# AND f.crm_provider_id = 'hs_activity_type';\n\nselect * from text_relays where created_at > '2026-05-01';\nselect * from activities where user_id IN (7160, 18608) and created_at > '2026-05-22' order by id desc;\nselect * from users where team_id = 1;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".circleci, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".cursor, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".vscode, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".windsurf, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actions, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Component, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActionItems, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activity, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivityAnalytics, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiActivityType, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiAutomation, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiCallScoring, folder","depth":9,"on_screen":false,"role_description":"text"}]...
|
7033976101832479051
|
1065731411759478599
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
9
32
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Mail;
use Google\Service\Gmail as GoogleGmail;
use Google\Service\Gmail\Message as GmailMessage;
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
use Jiminny\Services\Mail\TextRelayService;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
use ReflectionClass;
use Mockery;
#[CoversClass(TextRelayService::class)]
class TextRelayServiceTest extends TestCase
{
public static function environmentProvider(): array
{
return [
'eu_environment' => ['eu', 'catch-all-eu', '[EMAIL]'],
'us_environment' => ['us', 'catch-all', '[EMAIL]'],
'other_environment_defaults_to_us' => ['other', 'catch-all', '[EMAIL]'],
'eu_environment_with_plus_tag' => ['eu', 'catch-all-eu', '[EMAIL]'],
'us_environment_with_plus_tag' => ['us', 'catch-all', '[EMAIL]'],
];
}
protected function setUp(): void
{
parent::setUp();
}
protected function tearDown(): void
{
Mockery::close();
parent::tearDown();
}
#[DataProvider('environmentProvider')]
public function testIsForCurrentEnvironmentWithMatchingXGmOriginalToHeader(
string $deployRegion,
string $expectedAlias,
string $recipient
): void {
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = $recipient;
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');
$this->assertTrue($result);
}
#[DataProvider('environmentProvider')]
public function testIsForCurrentEnvironmentWithNonMatchingXGmOriginalToHeader(
string $deployRegion,
string $expectedAlias,
string $recipient
): void {
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', $expectedAlias, 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentIgnoresToHeader(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentWithEmptyHeaders(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$payload->method('getHeaders')->willReturn([]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentWithException(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')
->willThrowException(new \Exception('Gmail API error'));
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testIsForCurrentEnvironmentRejectsWrongHostWithMatchingPlusTag(): void
{
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
$message = $this->createMock(GmailMessage::class);
$payload = $this->createMock(MessagePart::class);
$header = $this->createMock(MessagePartHeader::class);
$header->name = 'X-Gm-Original-To';
$header->value = '[EMAIL]';
$payload->method('getHeaders')->willReturn([$header]);
$message->method('getPayload')->willReturn($payload);
$usersMessages = $this->createMock(\Google\Service\Gmail\Resource\UsersMessages::class);
$usersMessages->method('get')->willReturn($message);
$gmailService = $this->createMock(GoogleGmail::class);
$gmailService->users_messages = $usersMessages;
$service = $this->createTextRelayService();
$reflection = new ReflectionClass($service);
$method = $reflection->getMethod('isForCurrentEnvironment');
$method->setAccessible(true);
$result = $method->invoke($service, $gmailService, 'catch-all', 'msg123', 'catch-all', 'txt.jiminny.com');
$this->assertFalse($result);
}
public function testSyncUsesEuAliasForEuRegion(): void
{
Config::set('jiminny.deploy_region', 'eu');
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
Config::set('jiminny.google_text_user', '[EMAIL]');
Config::set('jiminny.google_text_relay_topic', 'test-topic');
$service = $this->createTextRelayService();
$gmailService = $this->createMock(GoogleGmail::class);
$historyResponse = $this->createMock(\Google\Service\Gmail\ListHistoryResponse::class);
$historyResponse->historyId = 12345;
$historyResponse->method('getHistory')->willReturn([]);
$historyResponse->method('getNextPageToken')->willReturn(null);
$usersHistory = $this->createMock(\Google\Service\Gmail\Resource\UsersHistory::class);
$usersHistory->method('listUsersHistory')->willReturn($historyResponse);
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
\Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
$syncMethod->setAccessible(true);
$result = $syncMethod->invoke($service);
$this->assertIsArray($result);
}
public function testSyncUsesUsAliasForUsRegion(): void
{
Config::set('jiminny.deploy_region', 'us');
Config::set('jiminny.google_text_host', 'txt.jiminny.com');
Config::set('jiminny.google_text_user', '[EMAIL]');
Config::set('jiminny.google_text_relay_topic', 'test-topic');
$service = $this->createTextRelayService();
$gmailService = $this->createMock(GoogleGmail::class);
$historyResponse = $this->createMock(\Google\Service\Gmail\ListHistoryResponse::class);
$historyResponse->historyId = 12345;
$historyResponse->method('getHistory')->willReturn([]);
$historyResponse->method('getNextPageToken')->willReturn(null);
$usersHistory = $this->createMock(\Google\Service\Gmail\Resource\UsersHistory::class);
$usersHistory->method('listUsersHistory')->willReturn($historyResponse);
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
\Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
$syncMethod->setAccessible(true);
$result = $syncMethod->invoke($service);
$this->assertIsArray($result);
}
private function createTextRelayService(): TextRelayService
{
$service = new class () extends TextRelayService {
public function __construct()
{
}
};
return $service;
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
45
1
41
66
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM teams WHERE name LIKE '%litify%'; # 1069, 994, 24993
SELECT * FROM users WHERE id = 25061;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 994;
SELECT * FROM crm_profiles WHERE user_id = 25061;
select * from crm_configurations where id = 834;
SELECT * FROM teams WHERE id = 882;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 882 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal
SELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations WHERE provider = 'hubspot' and crm_provider_id = 7270388;
SELECT * FROM contacts where crm_configuration_id = 834;
SELECT * FROM opportunities WHERE team_id = 933
# AND crm_provider_id IN ('20131586060','46017317898','52543911090','53451356564','54101251892','54323768459');
AND id IN (8482561,18352941,19042734,19232139,19445140,19472541);
SELECT * FROM opportunity_contacts
WHERE opportunity_id IN (8482561,18352941,19042734,19232139,19445140,19472541);
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 485; #
SELECT * FROM opportunities WHERE team_id = 933 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
select crm.provider, l.* from leads l join crm_configurations crm on l.crm_configuration_id = crm.id
where crm.provider NOT IN ('salesforce', 'integration-app', 'bullhorn', 'copper')
# and l.converted_at IS NOT NULL
;
# [PASSWORD_DOTS]
SELECT * FROM activities a WHERE type IN ('email-inbound', 'email-outbound')
and opportunity_id IS NULL
order by id desc;
SELECT * FROM teams WHERE id = 604; # 598
SELECT * FROM activities WHERE id = 74410828; # [EMAIL]
SELECT * FROM accounts WHERE id = 20068382;
SELECT * FROM accounts WHERE id = 35186038;
SELECT * FROM contacts WHERE team_id = 852 and updated_at > '2026-01-23 12:30:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 559 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('cb6342b6-a183-401c-b0af-ede92b2ae763') = uuid;
select * from sidekick_settings where team_id = 781;
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 26651871; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 7562435;
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8420347; # opflit 2100
SELECT * FROM crm_layouts WHERE crm_configuration_id = 711;
SELECT * FROM activities where crm_configuration_id = 711 and crm_provider_id IS NULL
and is_internal = 0 and status = 'completed'
order by id desc;
SELECT * FROM crm_layout_entities
WHERE crm_layout_id IN (2352, 2353);
;
SELECT * FROM crm_configurations where provider = 'hubspot' and id = 530;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 556 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('c6ca4b22-7738-4563-a95d-b8a9598924ae') = uuid;
SELECT * FROM activities WHERE uuid_to_bin('442abb2b-28bd-4be8-9c25-19e9bf02766d') = uuid;
select * from contacts
where crm_configuration_id = 530
and crm_provider_id = 872252;
select * from activities where crm_configuration_id = 530
and user_id = 14343 and type like '%softphone%'
and created_at between '2026-01-28 15:00:00' and '2026-01-28 15:10:00';
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 25666868; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id = 8646335; # Teya
SELECT * FROM crm_configurations where provider = 'hubspot' and crm_provider_id IN (5933397);
SELECT t.name, t.id, t.owner_id, c.id, c.provider, c.crm_base_url FROM teams t
JOIN crm_configurations c ON t.id = c.team_id
WHERE t.status = 'active';
SELECT * FROM teams where id = 1091;
SELECT * FROM crm_configurations where team_id = 1091;
SELECT * FROM activity_providers where team_id = 1091;
SELECT * FROM activities where crm_configuration_id = 1024 and type IN ('softphone', 'softphone-outbound')
and provider NOT IN ('hubspot', 'aircall')
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by id desc;
SELECT * FROM teams WHERE name LIKE '%Leadventure%';
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1091 and sa.provider = 'salesforce';
SELECT * FROM teams WHERE name LIKE '%Wilson%'; # 862, 812
SELECT * FROM teams where id = 862;
SELECT * FROM crm_configurations where team_id = 862;
SELECT * FROM activity_providers where team_id = 862;
SELECT * FROM activities where crm_configuration_id = 812 and type IN ('softphone', 'softphone-outbound')
and provider NOT IN ('hubspot', 'aircall')
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by id desc;
SELECT t.id, crm.id, crm.provider, ap.* FROM teams t
join crm_configurations crm on t.id = crm.team_id
join activity_providers ap on t.id = ap.team_id
where t.status = 'active' and ap.is_enabled = 1
and crm.provider = 'hubspot'
and ap.provider NOT IN ('hubspot', 'aircall', 'uploader', 'gong', 'twilio', 'zoom-bot', 'google-meet', 'ms-teams',
'outreach', 'close', 'ringcentral', 'dialpad', 'zoom-phone');
SELECT * FROM teams where id = 1068;
SELECT * FROM crm_configurations where team_id = 1068;
SELECT * FROM activity_providers where team_id = 1068;
SELECT * FROM activities a
where crm_configuration_id = 993 and type IN ('softphone', 'softphone-outbound')
and a.provider NOT IN ('hubspot', 'uploader', 'gong', 'twilio', 'google-meet', 'ms-teams','close'
)
# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'
order by a.id desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1068 and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
# [PASSWORD_DOTS]
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 882; # 933 - GoGlobal , portalId: 6017093
SELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 933 and updated_at > '2026-02-06 00:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 933 and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 834; # 882 - AnyVan , portalId: 5468262
SELECT * FROM contacts WHERE crm_configuration_id = 834 and updated_at > '2026-03-30 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE crm_configuration_id = 834 and updated_at > '2026-03-04 08:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 882 and sa.provider = 'hubspot';
select * from crm_layouts where crm_configuration_id = 834;
select * from crm_layout_entities where crm_layout_id = 2780;
select * from crm_fields where id IN (321153,321192,321193,321194);
SELECT * FROM opportunities WHERE crm_configuration_id = 834 and id = 10993426;
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 988; # 1057 - Teya (543ce4f4-168c-4571-91ea-5b35c253f06f) , portalId: 26651871
SELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1057 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1057 and sa.provider = 'hubspot';
SELECT * FROM crm_configurations where id = 533; # 559 - Connectd , portalId: 6710988
SELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 559 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 801; # 852 - Rise Vision , portalId: 2700250
SELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 852 and updated_at > '2026-02-04 00:00:00' order by updated_at desc; # 6th last
SELECT * FROM crm_configurations where id = 962; # 1034 - evergrowth.io , portalId: 143180990
SELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1034 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 1037; # 1102 - Jibble , portalId: 6649755
SELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1102 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 8
SELECT * FROM crm_configurations where id = 1015; # 1049 - Travefy , portalId: 48904401
SELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1049 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 20
SELECT * FROM crm_configurations where id = 64; # 70 - SalaryFinance , portalId: 3404115
SELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 70 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 6th last
SELECT * FROM crm_configurations where id = 802; # 853 - Street Group , portalId: 7658438
SELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 853 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 10
SELECT * FROM crm_configurations where id = 872; # 921 - In Professional Development , portalId: 9238273
SELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 921 and updated_at > '2026-02-04 12:30:00' order by updated_at desc; # 2
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 550; # 576 - SeedLegals , portalId: 3028661
SELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 576 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 989; # 1058 - rtaoutdoor.com , portalId: 22371204
SELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1058 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 896; # 946 - Mintago , portalId: 6621281
SELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 946 and updated_at > '2026-02-05 14:00:00' order by updated_at desc;
SELECT * FROM crm_configurations where id = 617; # 641 - PCS , portalId: 5244937
SELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 641 and updated_at > '2026-02-05 14:00:00' order by updated_at desc; # 7th
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where id = 649; # 670 - Eventeny , portalId: 4492849
SELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-18 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 670 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; #
SELECT * FROM crm_configurations where id = 48; # 51 - CleanCloud , portalId: 4373137
SELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-03-04 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 51 and updated_at > '2026-02-09 08:00:00' order by updated_at desc;
select * from users where team_id = 51; # 7783
SELECT * FROM groups WHERE uuid_to_bin('8a8d2cb6-8b55-4fa3-8b5c-5f0e3d8de59a') = uuid; # 1130
select * from activity_searches where user_id = 7783;
select * from activity_search_filters where activity_search_id IN (32291, 32292);
SELECT asf.activity_search_id, asf.id, asf.value
FROM activity_search_filters asf
WHERE asf.filter = 'group_id'
AND asf.value IN (
SELECT CONCAT(
HEX(SUBSTR(uuid, 5, 4)), '-',
HEX(SUBSTR(uuid, 3, 2)), '-',
HEX(SUBSTR(uuid, 1, 2)), '-',
HEX(SUBSTR(uuid, 9, 2)), '-',
HEX(SUBSTR(uuid, 11))
)
FROM groups
WHERE deleted_at IS NOT NULL
);
SELECT * FROM crm_configurations where id = 272; # 290 - Bonham & Brook , portalId: 5705856
SELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-05 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 290 and updated_at > '2026-02-09 08:00:00' order by updated_at desc; # 6th
# [PASSWORD_DOTS]
SELECT * FROM crm_configurations where provider = 'hubspot';
SELECT * FROM crm_configurations where id = 1056; # 1119 - Chromatic , portalId: 45602133
SELECT * FROM opportunities WHERE team_id = 1119 and remotely_created_at > '2026-02-01 00:00:00' order by updated_at desc;
SELECT * FROM opportunities WHERE team_id = 1119 and updated_at > '2026-02-09 09:00:00' order by updated_at desc; # null
# [PASSWORD_DOTS]
select * from contacts where crm_provider_id = '003Uu00000ojD4NIAU';
select
cp.*
# DISTINCT t.id
# cp.id, cp.user_id, t.id, cp.crm_configuration_id, cp.contact_fields
FROM crm_profiles cp
JOIN crm_configurations crm on crm.id = cp.crm_configuration_id
JOIN users u on u.id = cp.user_id
JOIN teams t ON t.id = crm.team_id
WHERE crm.provider = 'salesforce' and t.status = 'active'
and cp.archived_at IS NULL and u.deleted_at IS NULL
and t.id NOT IN (1093)
and t.id = 2
and cp.contact_fields IS NULL;
# and c.crm_provider_id = '003Uu00000ojD4NIAU';
SELECT * FROM users WHERE id = 26484;
SELECT * FROM crm_profiles WHERE user_id = 26484;
SELECT * FROM social_accounts WHERE sociable_id = 26484;
SELECT * FROM crm_configurations where provider = 'salesforce';
select * from users where id IN (10022, 10403);
select * from users where team_id IN (526);
select * from teams where id IN (526, 532);
select * from crm_configurations where id IN (500, 516);
select * from crm_profiles where crm_configuration_id IN (500, 516) and user_id IN (10022, 10403);
select * from contacts where crm_configuration_id IN (500, 516) and crm_provider_id = '003Uu00000ojD4NIAU';
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 526 and sa.provider = 'salesforce';
select * from team_settings where team_id IN (526, 532);
select * from users where id IN (22824);
select * from crm_profiles where crm_configuration_id IN (1026);
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1093 and sa.provider = 'salesforce';
select * from teams where id = 1099;
select * from users where id = 29643
select * from activity_processing_states;
SELECT * FROM teams where name LIKE '%Fare%'; # 233
SELECT * FROM opportunities where crm_configuration_id = 215
# and crm_provider_id = 'oppo_ogESZf2P50nDrd1nGPvKDXeA6sSaTN5v51Lp4ayVzKR'
;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1088 and sa.provider = 'hubspot';
SELECT * FROM teams order by updated_at DESC
SELECT * FROM crm_configurations WHERE id = 1019; # SimpleConsign 1088 - no social account
select * from crm_configurations where provider = 'pipedrive';
select * from teams where id = 957;
select * from crm_configurations where id = 957;
SELECT * FROM teams WHERE name LIKE '%Prolific%'; # 544, 518, 10743
SELECT * FROM opportunities where crm_configuration_id = 518 order by id desc;
select * from users where team_id = 1; # 26726 - Gabriela Dureva
SELECT * FROM opportunities where user_id = 26726; # 16834447 - Prolific
select * from activities where user_id = 26726 order by id desc;
select * from contacts where crm_configuration_id = 1
and email IN ('[EMAIL]', '[EMAIL]'); # 2094416, 2093620
SELECT * FROM contacts WHERE id = 6284931;
SELECT p.* FROM activities a JOIN participants p ON a.id = p.activity_id
WHERE a.user_id = 26726 and p.lead_id IN (2094416, 2093620) and a.created_at > '2026-01-01 00:00:00' order by p.email;
select * from activities where id IN (75509259,75509261,75509261,75511034,75026464,75517602,75517605);
select * from crm_configurations where id = 1;
43801692-1aeb-32ce-acba-5b80a479701a
44c3c9cf-6f5e-75f3-8179-bc9f75dd2b1b
405975c0-b3d0-7aaa-821f-09d59cae6dd1
4caf848d-4bed-2299-b248-7788d41f9fca
49bedc3f-f196-eef3-89c3-dea6a3b4aa63
43420989-a09d-b8f8-9806-c8bbf7a02aac
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1 and sa.provider = 'salesforce';
SELECT * FROM activities WHERE id = 75461988;
SELECT * FROM activities WHERE uuid_to_bin('d6c5052e-e972-49e9-8912-26f2f7d6c5f6') = uuid;
select * from contacts where id = 17900517;
select * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id
where crm.provider != 'salesforce';
select * from users where id = 21047;
SELECT * FROM crm_configurations WHERE id = 892;
SELECT * FROM teams WHERE id = 942;
select * from opportunities where team_id = 942 order by updated_at desc;
select * from contacts where team_id = 942 order by updated_at desc;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 942 and sa.provider = 'hubspot';
SELECT * FROM opportunities where team_id = 1 and crm_provider_id IN ('006Pq00000NeH6XIAV', '006Pq000007z8kdIAA'); # 10697889, 6621430
SELECT * FROM crm_configurations WHERE id = 1;
SELECT * FROM teams WHERE crm_id = 1;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1 and sa.provider = 'salesforce';
select id, user_id, opportunity_fields from crm_profiles where crm_configuration_id = 1
SELECT * FROM opportunities where team_id = 1 order by updated_at desc; # 10697889, 6621430
select * from teams where id = 852;
select * from groups where id = 2286;
select * from sidekick_settings where team_id = 852;
select * from default_activity_types where team_id = 852;
SELECT cc.provider, cc.id, p.id, u.*
FROM users u
LEFT JOIN crm_profiles p ON u.id = p.user_id AND p.id IS NULL -- no profile
INNER JOIN teams t ON u.team_id = t.id AND t.status = 'active' -- team is active
INNER JOIN crm_configurations cc ON t.crm_id = cc.id
WHERE u.status = 1 AND u.deleted_at IS NULL
AND u.crm_required = 1
AND u.team_id = 1
ORDER BY u.team_id;
SELECT * FROM crm_profiles cp where cp.crm_configuration_id = 1 and cp.user_id IN (
18481
);
SELECT cc.provider, cc.id, p.id, u.*
FROM users u
LEFT JOIN crm_profiles p ON u.id = p.user_id
INNER JOIN teams t ON u.team_id = t.id AND t.status = 'active'
INNER JOIN crm_configurations cc ON t.crm_id = cc.id
WHERE u.status = 1
AND u.deleted_at IS NULL
AND u.crm_required = 1
# AND u.team_id = 1
AND p.id IS NULL -- Move this condition to WHERE clause
ORDER BY u.team_id;
SELECT * FROM opportunities WHERE id = 20002609;
select * from teams where id = 1122; # Velatir, 29953 - [EMAIL]
select * from crm_configurations where id = 1060;
select * from crm_layouts where crm_configuration_id = 1060;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 3596;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1122 and sa.provider = 'hubspot';
select * from opportunities where team_id = 1122 order by updated_at desc;
select * from crm_field_data where object_type = 'contact';
SELECT * FROM activities WHERE uuid_to_bin('374fc8ed-3315-4c9f-9b25-318b7fd2928f') = uuid; # 76584262
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 248 and sa.provider = 'salesforce';
SELECT * FROM crm_profiles where user_id = 24115; # 005QF000002CswMYAS
SELECT * FROM users where id = 24115;
SELECT * FROM accounts where id = 4002896;
SELECT * FROM teams WHERE name LIKE '%adswerve%';
SELECT * FROM opportunities where crm_configuration_id = 230 AND crm_provider_id IN ("0069N000003GIQ9QAO","0061r000019yGP9AAM","0066900001S2KWlAAN","0066900001TDpj2AAD","0066900001b8uEwAAI","0069N000001rQi0QAE","006QF00000KD40mYAD","006QF00000LzpRJYAZ","0069N000002uomtQAA","0069N000002xlMLQAY","0066900001NV6ubAAD","0061r00001HJp45AAD","006QF00000uTlUoYAK","006QF00000v0bZqYAI");
SELECT * FROM opportunities WHERE crm_configuration_id = 230 AND crm_provider_id = '0069N000003GIQ9QAO'; # 6272203
SELECT u.id, u.email, ac.name, a.* FROM activities a
JOIN users u ON a.user_id = u.id
JOIN accounts ac ON a.account_id = ac.id
WHERE
uuid_to_bin('e3269598-b562-44fb-b5e9-9d2694dc63e0') = a.uuid or
uuid_to_bin('66ddc3ab-4e15-45aa-af0c-248c1eece593') = a.uuid or
uuid_to_bin('826bd328-e1cc-4213-b8d8-572454cacc07') = a.uuid;
select * from users where id = 5825;
SELECT * FROM activities WHERE uuid_to_bin('e56aa2e8-231a-421b-ab1f-cb38ed2bf573') = uuid;
select * from activities where uuid_to_bin('91e13b2f-2d1b-45f8-b1fd-1141b6563782') = uuid;
19594, 862
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 862 and sa.provider = 'salesforce';
select * from automated_reports where id = 36;
select ar.frequency, r.*, ar.* from automated_report_results r
join automated_reports ar on r.report_id = ar.id
where ar.frequency != 'one_off';
select s.* from activity_searches s join users u ON s.user_id = u.id where u.team_id = 882;
select * from nudges n where n.activity_search_id
select * from teams where created_at > '2026-03-09';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 1065; # 1065
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 3617;
select * from users where team_id = 1 and name like '%Lukas%'; # 7160
SELECT * FROM teams WHERE id = 575;
select * from opportunities where team_id = 575;
SELECT * FROM teams WHERE name LIKE '%Integrum ESG%'; # 1126, 1065,
select * from opportunities where team_id = 1126;
SELECT * FROM teams WHERE name LIKE '%Base%'; # 1125, 1063,
select * from opportunities where team_id = 1125;
select * from contacts c
where c.team_id = 882;
SELECT * FROM activities WHERE id = 76822967;
SELECT * FROM crm_profiles WHERE user_id = 15440;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 555;
SELECT * FROM crm_configurations WHERE id = 555;
SELECT * FROM users WHERE id = 15440; # team. 581, gr. 15440, pl. 3911, act. field 162182
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 581 and sa.provider = 'salesforce';
SELECT * FROM automated_report_results order by id desc;
select * from features;
select * from team_features where feature_id = 40;
select * from teams where id = 556;
select * from automated_reports;
where id = 54; # 4fdd41f6-dcf0-30d0-b339-7345381b6044 , ["pdf","podcast"]
SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;
select * from automated_report_results order by id desc;
SELECT * FROM automated_report_results WHERE id = 1919;
select * from automated_report_results WHERE report_id = 54;
select * from opportunities where id = 7594349;
SELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - [EMAIL]
select * from playbooks where team_id = 711; # event 226147
SELECT * FROM playbook_categories WHERE playbook_id = 5515;
SELECT * FROM crm_fields WHERE crm_configuration_id = 692 and object_type = 'event';
SELECT * FROM crm_fields WHERE id = 226147;
SELECT * FROM crm_field_values WHERE crm_field_id = 226147;
SELECT * FROM crm_configurations WHERE id = 692;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 711 and sa.provider = 'salesforce';
SELECT * FROM crm_profiles cp JOIN users u on u.id = cp.user_id WHERE u.team_id = 711;
select * from leads;
select * from calendars;
SELECT
t.id AS team_id,
t.name,
LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1)) AS calendar_domain
FROM teams t
JOIN users u ON u.team_id = t.id
JOIN calendars c ON c.user_id = u.id AND c.status = 'active' AND c.calendar_provider_id LIKE '%@%'
LEFT JOIN team_domains td
ON td.team_id = t.id
AND td.deleted_at IS NULL
AND td.domain = LOWER(SUBSTRING_INDEX(c.calendar_provider_id, '@', -1))
GROUP BY t.id, t.name, calendar_domain
ORDER BY t.name, calendar_domain;
select * from users u join calendars c on c.user_id = u.id
where u.team_id = 882;
select * from activities where id = 74049485; # team 563 crm 537
select * from activities where id = 73272382; # team 563 crm 537
select * from activities where id = 64400389; # team 563 crm 537
select * from activities where id = 58081273; # team 563 crm 537
select * from activities where id = 54520297; # team 563 crm 537
select * from participants where activity_id = 58081273;
select * from activities where crm_configuration_id = 537 and provider = 'aircall'
and account_id = 19003658 order by updated_at desc;
select * from contacts where crm_configuration_id = 537 and id = 35957759;
select * from accounts where crm_configuration_id = 537 and id = 19003658;
select * from automated_report_results where id = 1976;
select * from automated_reports where id = 583;
select * from activity_searches where id = 87714;
select * from activity_search_filters where activity_search_id = 87714;
SELECT * FROM activities WHERE uuid_to_bin('8827f672-202d-4162-9d04-73ff5f0566a9') = uuid
or uuid_to_bin('47842446-af51-4bcb-854f-cc6560290101') = uuid;
SELECT * FROM crm_configurations WHERE provider = 'hubspot';
select * from rate_limits;
select * from automated_report_results where media_type = 'pdf' and status = 2
and id IN (18, 1872);
select * from automated_reports where id = 54;
SELECT * FROM users WHERE id IN (24623,29443,29613);
SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;
select * from text_relays where created_at > '2026-05-01';
and id IN (32415, 32416);
# and id = 32412;
select * from users where team_id = 2 and email like '%scott%' and id = 29510;
SELECT * FROM activities WHERE uuid_to_bin('67cebfc2-ed56-44a2-8c68-7a0286ed8618') = uuid; # 79763436
SELECT email_provider_id, COUNT(*) as count, GROUP_CONCAT(id) as ids, GROUP_CONCAT(status) as statuses
FROM text_relays
WHERE email_provider_id IN ('19e2027868a64b42', '19e2033ed8ea6b10')
GROUP BY email_provider_id;
SELECT id, status, telephony_provider_id, created_at
FROM activities
WHERE id IN (80028719, 80028846);
SELECT id, status, code, email_sent_at, created_at, updated_at
FROM text_relays
WHERE id IN (32415, 32416);
SELECT id, status, code, sender, recipient, created_at
FROM text_relays
WHERE sender LIKE '%mario.georgiev%' OR sender LIKE '%stoyan.tomov%'
ORDER BY created_at DESC
LIMIT 10;
SELECT id, uuid, status, code, sender, recipient, created_at, updated_at
FROM text_relays
WHERE uuid = uuid_to_bin('0626141c-27a6-4d8c-aff8-7c8020a2c656');
# [PASSWORD_DOTS]
SELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count
FROM users u
INNER JOIN activities a ON u.id = .user_id
WHERE a.type LIKE 'sms%'
AND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY u.id, u.email, u.name, u.softphone_number
ORDER BY sms_count DESC;
select * from teams where id = 1;
select * from roles;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1117 and sa.provider = 'hubspot';
SELECT * FROM activities WHERE uuid_to_bin('8024fffb-2df7-4017-91f4-d9f896050248') = uuid; # 79933459 YES
SELECT * FROM activities WHERE uuid_to_bin('[CREDIT_CARD]-927f-4f4da2a8185c') = uuid; # 80186192 NO
SELECT * FROM crm_configurations WHERE id = 1053;
SELECT * FROM teams WHERE id = 1117;
select * from users where id = 30249;
select * from playbooks where id = 5473;
select * from playbook_categories where id = 43783;
select * from playbook_categories where playbook_id = 5473;
select * from crm_fields where id = 659242;
select * from crm_field_values where crm_field_id = 659242;
SELECT * FROM crm_field_data fd
# JOIN crm_fields f ON fd.crm_field_id = f.id
# JOIN activities a ON fd.activity_id = a.id
WHERE activity_id = 79933459
# AND f.crm_provider_id = 'hs_activity_type';
select * from text_relays where created_at > '2026-05-01';
select * from activities where user_id IN (7160, 18608) and created_at > '2026-05-22' order by id desc;
select * from users where team_id = 1;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder
.circleci, folder
.cursor, folder
.github
.sonarlint, folder
.vscode, folder
.windsurf, folder
app, sources root
Actions, folder
Component, folder
Acl, folder
ActionItems, folder
Activity, folder
ActivityAnalytics, folder
ActivitySearch, folder
AiActivityType, folder
AiAutomation, folder
AiCallScoring, folder...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71215
|
2559
|
13
|
2026-05-26T06:31:44.809628+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777104809_m2.jpg...
|
PhpStorm
|
faVsco.js – TextRelayServiceTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatc rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetescong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.php©OpportunitySyncStrategyResolverTese Prosodee cheldton25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolvers→attaltsValidatorscRatchSarvicetest.nho© EmailActivityService Test.phpwlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpoeccorelstiaer.types-E custom.log49HSZAYA console [STAGING)D B.E Iaravellogminsoce estts unt serwchuse..#[CoversClass(TextRelayService::class)]Cassex Kelaysen Ceies extehos estaseg 8702'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.#ininny.com'1'us_environnent' »> ['us', 'catch-all', '[EMAIL]'],704other enuironnent defaults to us"=>othen"catch-au.catch-allatxtrinny.con"'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', *catch-all-eu[PHONE].44780357ue enusronsent rh aiie Tae. es uel earcheal eatchoain thhiiyiwiooyi700protected function setUp(): voidl...}716protected function tearDown(): void{...}712213#[OataProvider('environnentProvider')]public function testIsForCurrentEnvironmentWithMatchingX6m0riginalToHeaderCstiang soeptoykeczonstiing sexpecreonclas-214215716): void{Config::set('jininny.google_text_host'.*txt.jiminny.com');,—720721722723messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);MessagePartHeader: :class);Sheaden-snane = "Xer-irtoinal-toSheaden->value = Srechotente-722SpayLoad->nethod( constraint: 'getHeaders') ->willReturn([Sheader));"getPayload') ->willReturn(SpayLoad);SusersMessages = Sthis->createMockl orkun texertoyWHERE vuid = uvid_toSELECT DISTINCT U.idFROM users uINNER JOIN activitieWHERE a.type LIKE 'sAND a.created_at > DGROUP BY u.id, v.emaORDER BY sns_count Dselect * fron teansselect * fron rolesSELECTCONCAT(U.id, CASu.enail,sa.*,t.ouner_id FROMJOIN users u on u.idJOIN teans t (1.n<->WHERE u.tean_id = 11SELECT * FROM activiSELECT * FROM activiSELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersselect * fron playboinbox - kovalikiukasgClasdo* API Keys | Claude Platform§01 - Appio MacBook Pro 14[a Apple Mac Studio Mã Max I :Welcome to authentkt - au® Reminders2 Photos - Google PhotosDXP4800PLUS-85F8Ô Nginx Proxy Manager@ Open WebulA Welcome, Lukas - Admin - a(6 NotionSto para pente season 1 eng* Sto para pente : r/GREEK=) Foisode 2 wbtites Cmek lasuth.Jakylak.xyz//1ow/defaRemindersUptime Kumae) New Tab=M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMore5,2308.8606.18338.896Labels(Imap)/Nevyziadaná postaarchDeleted ItemsFibank1,229•Hardware & SoftwareHOSTINGInfected itemsjiminny-githubJunk E-mailKontaktySent ItemsWORKz centraMore7,586848127/= mail.google.com/mail/u/0/#inboxSearch mailPrimaryDSpotify> LinkedinQuora Suggested Spa.Quora Suggested Spa.SkyscannerTemukescuelime leaLinkedin Job AlertsNirDiam, coderab. 4Quora Suggested Spa.Chelsea with IFTTTLinkedin Job AlertsunkednProtonQuora Suggested Spa.SamsungThe Baichld beeolerGoogleMedium Weekly DigestGoogleЯЯЯЯЙOwen Gibson | The G.Quora Suggested Spa.GircleCl BuildsGoogle Al StudioCircleCI BuildsLinkedin Job AlertsBitwarderBitwardenKatie from RescueTi.LinkedinD00%LTue 26 May 9:31:44SocialX19UpdatesYou misseo photos from мариана иіванова - Мариана иіванова snared protos witn you.Updates to Our Privacy Policy - We hope you're enjoying Spotify. We've updated our Priv....Nikolay Yankov - Lead Software Developer reacted to this post: It's frustrating when you ...An elderly couple entered a burger joint ... - An elderly couple entered a burger joint ... ....* Ukraine Just Hit Russia's "Starlink Backup" and it Matters - * Ukraine Just Hit Russia:...Get the facts behind the latest travel disruption numbers. - More than 99% of flights are ...Help us protect your Temu account - Hi Lukás Kovälik, it's been more than 6 months sinc...17h 15m of News & Opinion this week - RescueTime Weekly Summary - Having trouble vi..Full Stack PHP (Laravel) Developer at wherewework Jobs - wherewework Jobs Full Stac...[NirDiamant/GenAl_Agents) docs: refresh book promo - fix stale pricing, add Prompt En...Reward unlocked! Enjoy up to € 100 back on your next stay - Expires May 25, 2026 - b....Linux phones are real, and they're better than we expected - XDA Logo May 23, 2026 Ha.Kremlin Dusts Off Belarus - Kremlin Dusts Off Belarus Only Truth About Russia Only Tri...The shortcut your workday's been missing - The productivity hacks your 9-to-5 didn't c...Full Stack PHP (Laravel) Developer at Kaderabotim.bg - Kaderabotim.bg Full Stack PHP (..Tsvetomir Banovski - Senior Automation Engineer reacted to this post: Дара ни постави....You have 1 new message(s) in your Proton Mail account k[PASSWORD_DOTS] - Please log in at ht...BREAKING: Russian air defence systems, second to none, continue to shoot down Ukrain...Majstrovská zlava 20 % iba do nedele 2 - Zlavy na vsetko, do potrebujes - od telefónov ....СПоследен ден сьс 70% отстьпка! - Все още имаш време да промотираш обявите с...Hermes vs. OpenClaw, Cybersecurity Alarms Ring, More-Interactive Conversations, Can ...Security alert - You allowed Notion Calendar access to some of your Google Account da...Al Agents: Complete Course | Marina Wyss in Data Science Collective - Lukás Koválik Sto....Reminder about linked Google services - Update choices at any time in Google Account...Вашето мнение за прегледа при Д-р Валентин Руменов - СуперДок Напомняне: спо.Nvidia's RTX HDR feature is game-changing (iterally) - XDA Logo May 21, 2026 Happy T.Last day of our campaign - please help - Why your backing is so criticalDo people who exercise on a regular basis live longer and have fewer ailments as they a...[CircleCi) Workflow failed: jiminny / app on JY-20676-delete-report-related-objects - ....Build Android apps in minutes with simple prompts - > Just announced at Google VO!(CircleCl) Workflow canceled: jiminny / app on JY-20915-add-domain-specific-email-ete...Full Stack PHP (Laravel) Developer at Kaderabotim.bg - Kaderabotim.bg Full Stack PHP (...New Device Logged In From Firefox Extension - Your Bitwarden account was just logged...Your Bitwarden Verification Code - To finish logging in, enter this verification code: 0600...What to do when your hybrid team feeis like a circus - 11 rules to help choreograph the c....Svetloslav Novoselski - Senior Software Engineer reacted to this post: До всички, които. ...23:1923:16to wh25 May24 May24 May24 May24 May24 May24 May23 May23 May23 Man.23 May23 May22 May22 May22 Man22 May22 May22 May22 May21 May21 May21 May21 May21 May21 May21 May21 May21 May20 May20 May20 May20 May...
|
NULL
|
7031829595365799874
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatc rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetescong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.php©OpportunitySyncStrategyResolverTese Prosodee cheldton25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolvers→attaltsValidatorscRatchSarvicetest.nho© EmailActivityService Test.phpwlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpoeccorelstiaer.types-E custom.log49HSZAYA console [STAGING)D B.E Iaravellogminsoce estts unt serwchuse..#[CoversClass(TextRelayService::class)]Cassex Kelaysen Ceies extehos estaseg 8702'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.#ininny.com'1'us_environnent' »> ['us', 'catch-all', '[EMAIL]'],704other enuironnent defaults to us"=>othen"catch-au.catch-allatxtrinny.con"'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', *catch-all-eu[PHONE].44780357ue enusronsent rh aiie Tae. es uel earcheal eatchoain thhiiyiwiooyi700protected function setUp(): voidl...}716protected function tearDown(): void{...}712213#[OataProvider('environnentProvider')]public function testIsForCurrentEnvironmentWithMatchingX6m0riginalToHeaderCstiang soeptoykeczonstiing sexpecreonclas-214215716): void{Config::set('jininny.google_text_host'.*txt.jiminny.com');,—720721722723messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);MessagePartHeader: :class);Sheaden-snane = "Xer-irtoinal-toSheaden->value = Srechotente-722SpayLoad->nethod( constraint: 'getHeaders') ->willReturn([Sheader));"getPayload') ->willReturn(SpayLoad);SusersMessages = Sthis->createMockl orkun texertoyWHERE vuid = uvid_toSELECT DISTINCT U.idFROM users uINNER JOIN activitieWHERE a.type LIKE 'sAND a.created_at > DGROUP BY u.id, v.emaORDER BY sns_count Dselect * fron teansselect * fron rolesSELECTCONCAT(U.id, CASu.enail,sa.*,t.ouner_id FROMJOIN users u on u.idJOIN teans t (1.n<->WHERE u.tean_id = 11SELECT * FROM activiSELECT * FROM activiSELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersselect * fron playboinbox - kovalikiukasgClasdo* API Keys | Claude Platform§01 - Appio MacBook Pro 14[a Apple Mac Studio Mã Max I :Welcome to authentkt - au® Reminders2 Photos - Google PhotosDXP4800PLUS-85F8Ô Nginx Proxy Manager@ Open WebulA Welcome, Lukas - Admin - a(6 NotionSto para pente season 1 eng* Sto para pente : r/GREEK=) Foisode 2 wbtites Cmek lasuth.Jakylak.xyz//1ow/defaRemindersUptime Kumae) New Tab=M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMore5,2308.8606.18338.896Labels(Imap)/Nevyziadaná postaarchDeleted ItemsFibank1,229•Hardware & SoftwareHOSTINGInfected itemsjiminny-githubJunk E-mailKontaktySent ItemsWORKz centraMore7,586848127/= mail.google.com/mail/u/0/#inboxSearch mailPrimaryDSpotify> LinkedinQuora Suggested Spa.Quora Suggested Spa.SkyscannerTemukescuelime leaLinkedin Job AlertsNirDiam, coderab. 4Quora Suggested Spa.Chelsea with IFTTTLinkedin Job AlertsunkednProtonQuora Suggested Spa.SamsungThe Baichld beeolerGoogleMedium Weekly DigestGoogleЯЯЯЯЙOwen Gibson | The G.Quora Suggested Spa.GircleCl BuildsGoogle Al StudioCircleCI BuildsLinkedin Job AlertsBitwarderBitwardenKatie from RescueTi.LinkedinD00%LTue 26 May 9:31:44SocialX19UpdatesYou misseo photos from мариана иіванова - Мариана иіванова snared protos witn you.Updates to Our Privacy Policy - We hope you're enjoying Spotify. We've updated our Priv....Nikolay Yankov - Lead Software Developer reacted to this post: It's frustrating when you ...An elderly couple entered a burger joint ... - An elderly couple entered a burger joint ... ....* Ukraine Just Hit Russia's "Starlink Backup" and it Matters - * Ukraine Just Hit Russia:...Get the facts behind the latest travel disruption numbers. - More than 99% of flights are ...Help us protect your Temu account - Hi Lukás Kovälik, it's been more than 6 months sinc...17h 15m of News & Opinion this week - RescueTime Weekly Summary - Having trouble vi..Full Stack PHP (Laravel) Developer at wherewework Jobs - wherewework Jobs Full Stac...[NirDiamant/GenAl_Agents) docs: refresh book promo - fix stale pricing, add Prompt En...Reward unlocked! Enjoy up to € 100 back on your next stay - Expires May 25, 2026 - b....Linux phones are real, and they're better than we expected - XDA Logo May 23, 2026 Ha.Kremlin Dusts Off Belarus - Kremlin Dusts Off Belarus Only Truth About Russia Only Tri...The shortcut your workday's been missing - The productivity hacks your 9-to-5 didn't c...Full Stack PHP (Laravel) Developer at Kaderabotim.bg - Kaderabotim.bg Full Stack PHP (..Tsvetomir Banovski - Senior Automation Engineer reacted to this post: Дара ни постави....You have 1 new message(s) in your Proton Mail account k[PASSWORD_DOTS] - Please log in at ht...BREAKING: Russian air defence systems, second to none, continue to shoot down Ukrain...Majstrovská zlava 20 % iba do nedele 2 - Zlavy na vsetko, do potrebujes - od telefónov ....СПоследен ден сьс 70% отстьпка! - Все още имаш време да промотираш обявите с...Hermes vs. OpenClaw, Cybersecurity Alarms Ring, More-Interactive Conversations, Can ...Security alert - You allowed Notion Calendar access to some of your Google Account da...Al Agents: Complete Course | Marina Wyss in Data Science Collective - Lukás Koválik Sto....Reminder about linked Google services - Update choices at any time in Google Account...Вашето мнение за прегледа при Д-р Валентин Руменов - СуперДок Напомняне: спо.Nvidia's RTX HDR feature is game-changing (iterally) - XDA Logo May 21, 2026 Happy T.Last day of our campaign - please help - Why your backing is so criticalDo people who exercise on a regular basis live longer and have fewer ailments as they a...[CircleCi) Workflow failed: jiminny / app on JY-20676-delete-report-related-objects - ....Build Android apps in minutes with simple prompts - > Just announced at Google VO!(CircleCl) Workflow canceled: jiminny / app on JY-20915-add-domain-specific-email-ete...Full Stack PHP (Laravel) Developer at Kaderabotim.bg - Kaderabotim.bg Full Stack PHP (...New Device Logged In From Firefox Extension - Your Bitwarden account was just logged...Your Bitwarden Verification Code - To finish logging in, enter this verification code: 0600...What to do when your hybrid team feeis like a circus - 11 rules to help choreograph the c....Svetloslav Novoselski - Senior Software Engineer reacted to this post: До всички, които. ...23:1923:16to wh25 May24 May24 May24 May24 May24 May24 May23 May23 May23 Man.23 May23 May22 May22 May22 Man22 May22 May22 May22 May21 May21 May21 May21 May21 May21 May21 May21 May21 May20 May20 May20 May20 May...
|
71214
|
NULL
|
NULL
|
NULL
|
|
71214
|
2559
|
12
|
2026-05-26T06:31:42.096153+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777102096_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatch rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetestong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolversahtralttValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseE custom.log49HSZAYA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_toYou missed photos fronClasdo* API Keys | Claude Platfo X§01 - Appio MacBook Pro 14other enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]strang suepcoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorSheaden->nane = "Xet-untoinaletoSheaden->value = SrechotenteSusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):700700789710213712213-214215716722SELECT * FROM teamsRemindersUptime KumaTuc coMd 3:51:4..... . .M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMoreHardware & SoftwareSent ItemsWORKz centra= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrWSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos-«[EMAIL] me25 May 2026, 23-19 (10 hours ago)dl Google Photos5,2308.860MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscr oe hereGet the Google Photos app• Coogle Play App Store8481,274< Reply→ Forward...
|
NULL
|
4673965354873855164
|
NULL
|
visual_change
|
ocr
|
NULL
|
rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatch rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetestong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolversahtralttValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseE custom.log49HSZAYA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_toYou missed photos fronClasdo* API Keys | Claude Platfo X§01 - Appio MacBook Pro 14other enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]strang suepcoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorSheaden->nane = "Xet-untoinaletoSheaden->value = SrechotenteSusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):700700789710213712213-214215716722SELECT * FROM teamsRemindersUptime KumaTuc coMd 3:51:4..... . .M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMoreHardware & SoftwareSent ItemsWORKz centra= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrWSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos-«[EMAIL] me25 May 2026, 23-19 (10 hours ago)dl Google Photos5,2308.860MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscr oe hereGet the Google Photos app• Coogle Play App Store8481,274< Reply→ Forward...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71213
|
2559
|
11
|
2026-05-26T06:31:40.941698+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777100941_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxPwovscors© ServiceTest.phoSyncBatchRedisSe rirceroxPwovscors© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee cheldtone Prosoresatenthowowierdc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nho© EmailActivityService Test.phpwlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notiticationroie.WindowHelp=custom.logSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesiseA9 A32 A V697700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]stiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")essadessn SoscreaChockmaylode snsoscneaehockorMessagePanta-class):Sheaden-snane = "Xer-irtoinal-toSheaden->value = SrechotenteSpavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes e Sthisosenenretockie722select * fron userscolont & foan nlowhselect * fron plavb.D00%LTue 26 May 9:31:40SaarchWork ReoortAl SummatyTuTuuc Koninc riler7/05/2026m...
|
NULL
|
-8828444325275814415
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxPwovscors© ServiceTest.phoSyncBatchRedisSe rirceroxPwovscors© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee cheldtone Prosoresatenthowowierdc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nho© EmailActivityService Test.phpwlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notiticationroie.WindowHelp=custom.logSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesiseA9 A32 A V697700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]stiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")essadessn SoscreaChockmaylode snsoscneaehockorMessagePanta-class):Sheaden-snane = "Xer-irtoinal-toSheaden->value = SrechotenteSpavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes e Sthisosenenretockie722select * fron userscolont & foan nlowhselect * fron plavb.D00%LTue 26 May 9:31:40SaarchWork ReoortAl SummatyTuTuuc Koninc riler7/05/2026m...
|
71212
|
NULL
|
NULL
|
NULL
|
|
71212
|
2559
|
10
|
2026-05-26T06:31:39.009678+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777099009_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxPVovsco.sPotLe.WindowHelp=custom.logA9 A32 rirceroxPVovsco.sPotLe.WindowHelp=custom.logA9 A32 A V© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorsery cetesconp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoen CennerassCasseX KelaysenW CeieS exteNos esiseSELECT DISTINCT U.tconk users u700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurrencnv.ronnenthwa.chsingX6rirsosinal.tolondonfstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorMessagePanta-class):Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockd722NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVCEISCT & SOAM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. f# JOTN con Sields +"JOTN actsvitsies&• a2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBSaarchWork ReoorAl SumnaryD00%L7luc coMd grotrot7/05/2026mWelcome to authentkt - au@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol...
|
NULL
|
8621231741302192425
|
NULL
|
visual_change
|
ocr
|
NULL
|
rirceroxPVovsco.sPotLe.WindowHelp=custom.logA9 A32 rirceroxPVovsco.sPotLe.WindowHelp=custom.logA9 A32 A V© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorsery cetesconp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoen CennerassCasseX KelaysenW CeieS exteNos esiseSELECT DISTINCT U.tconk users u700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurrencnv.ronnenthwa.chsingX6rirsosinal.tolondonfstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorMessagePanta-class):Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockd722NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVCEISCT & SOAM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. f# JOTN con Sields +"JOTN actsvitsies&• a2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBSaarchWork ReoorAl SumnaryD00%L7luc coMd grotrot7/05/2026mWelcome to authentkt - au@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71211
|
2559
|
9
|
2026-05-26T06:31:38.131628+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777098131_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxcoltPVovsco.s© ServiceTest.phoSyncBatchRed rirceroxcoltPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohdg opportunitysyncstrategyResoivertese Prosodee cheldtone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationPotLe.WindowHelpSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoerCenheresscassex reraysers celes exxchos estaseA9 A32 A V=custom.loglaravel.logconsola ISTAGiNGlFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tsonk users UINNER JOTN activitiWHERE a,type LIKE *AND a,created at > 0GROUP BY u.sid u.emORDER BY sns count olselect * fron teansselect * fron roles'eu enviconnent' => ['eu'. 'catch-all-eu'. 'catch-all-euftxt.#ininny.com']]'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.catch-allatxtTriny.con""eu_environnent_with_plus_tag" => L'eu, 'catch-all-eu", catch-all-eu+447/88152786.4478935ue enusnoosent mth alte Tae.es uel carchoal eatchoalnthwii yiWhionoyinteprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronmenthwa.chsingX6rinsosnai lokondonstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden-snane = "Xer-irtoinal-toSheaden->value = SrechotenteSpavload->nethod( constraint: "getHeadens*)->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockdJOIN teans t 1..n<-NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISCT & SOOM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. fSELECT * FROM con f# JOTN con Sields +"JOTN actsvitsies&WHERE actsivity sd# AND f.con provideD00%L7Tue 26 May 9:31:377/05/2026mM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrC 01- Anole MacBook Pro 12d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai NotionSen natn nontn easan"ond@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Reminders0s Screencine - Archinea Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitWork ReoorttmetabhRequres ANTHROPIC_API-KEY in.erv =edt/volumelscreenpipelappl.enAl Summary...
|
NULL
|
-6275966852646743822
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxcoltPVovsco.s© ServiceTest.phoSyncBatchRed rirceroxcoltPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohdg opportunitysyncstrategyResoivertese Prosodee cheldtone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ Resolvers→attaltsMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationPotLe.WindowHelpSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoerCenheresscassex reraysers celes exxchos estaseA9 A32 A V=custom.loglaravel.logconsola ISTAGiNGlFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tsonk users UINNER JOTN activitiWHERE a,type LIKE *AND a,created at > 0GROUP BY u.sid u.emORDER BY sns count olselect * fron teansselect * fron roles'eu enviconnent' => ['eu'. 'catch-all-eu'. 'catch-all-euftxt.#ininny.com']]'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.catch-allatxtTriny.con""eu_environnent_with_plus_tag" => L'eu, 'catch-all-eu", catch-all-eu+447/88152786.4478935ue enusnoosent mth alte Tae.es uel carchoal eatchoalnthwii yiWhionoyinteprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronmenthwa.chsingX6rinsosnai lokondonstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden-snane = "Xer-irtoinal-toSheaden->value = SrechotenteSpavload->nethod( constraint: "getHeadens*)->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockdJOIN teans t 1..n<-NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISCT & SOOM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. fSELECT * FROM con f# JOTN con Sields +"JOTN actsvitsies&WHERE actsivity sd# AND f.con provideD00%L7Tue 26 May 9:31:377/05/2026mM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrC 01- Anole MacBook Pro 12d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai NotionSen natn nontn easan"ond@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Reminders0s Screencine - Archinea Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitWork ReoorttmetabhRequres ANTHROPIC_API-KEY in.erv =edt/volumelscreenpipelappl.enAl Summary...
|
71210
|
NULL
|
NULL
|
NULL
|
|
71210
|
2559
|
8
|
2026-05-26T06:31:37.058677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777097058_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FircroxPVovsco.s© ServiceTest.phoSyncBatchRedisSer FircroxPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorsery cetesconp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha› otice_ ResolversahtralttMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationPotLe.WindowHelpcustom.logSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoen CennerassCasseX KelaysenW CeieS exteNos esiseA9 A32 A VSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKE700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncozon cescesrorcurren.cnv.ronnenthwa.chsingX6rirsosinal.toHondonfstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorMessagePant..class):Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockd722JOIN teans t 1..n<-NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVCEISCT & SOAM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. f# JOTN con Sields +"JOTN actsvitsies&• a2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitSaarchWork ReoorA SummaryD00%LTue 26 May 9:31:367/05/2026muluie Konnc rileryAmbulatory sheet - PaoerieWelcome to authentkt - auWelcome, Luicas - Admin - a@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol...
|
NULL
|
-1635900446086649385
|
NULL
|
click
|
ocr
|
NULL
|
FircroxPVovsco.s© ServiceTest.phoSyncBatchRedisSer FircroxPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorsery cetesconp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha› otice_ ResolversahtralttMh ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationPotLe.WindowHelpcustom.logSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..#ovenswass exckelayoen CennerassCasseX KelaysenW CeieS exteNos esiseA9 A32 A VSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKE700other enuiironnent defaules tous"protected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncozon cescesrorcurren.cnv.ronnenthwa.chsingX6rirsosinal.toHondonfstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorMessagePant..class):Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(fSheaderl)s"aetPavlosd")->/llReturn (Spavload),Susenshessnaes e Sthis-scnen wockd722JOIN teans t 1..n<-NHEPE 1tosn id=1SELECT * FROM activ.CEISCY & SPOM SAtiVCEISCT & SOAM tonndselect * fron userscolont & foan nlowhselect * fron plavb.select * fron plavb.select * fron com.fselect * fron con. f# JOTN con Sields +"JOTN actsvitsies&• a2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitSaarchWork ReoorA SummaryD00%LTue 26 May 9:31:367/05/2026muluie Konnc rileryAmbulatory sheet - PaoerieWelcome to authentkt - auWelcome, Luicas - Admin - a@ Sto para pente : rIGREENE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71209
|
2559
|
7
|
2026-05-26T06:31:35.987514+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777095987_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0GROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitwverelAl SumnalyGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudreAborohtdPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd grotrot22/ 05/2026 m1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
NULL
|
1359289243830190854
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0GROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitwverelAl SumnalyGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudreAborohtdPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd grotrot22/ 05/2026 m1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
71208
|
NULL
|
NULL
|
NULL
|
|
71208
|
2559
|
6
|
2026-05-26T06:31:34.775592+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777094775_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxPotLe.HelpPVovsco.s© ServiceTest.phoSyncBa rirceroxPotLe.HelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationWindow=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitAl SummaryGenerate ReponTESESSION - 2026-05-2210:22 START4h 6m TOTAL SPAN4h 6m AcTIvi<Im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less thalcode 27mTerm?© browser 1h. 19© comms 20eai sClaudrPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMo grotro7/05/2026May 2026 V1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd4m...
|
NULL
|
3966034890591150317
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxPotLe.HelpPVovsco.s© ServiceTest.phoSyncBa rirceroxPotLe.HelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationWindow=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitAl SummaryGenerate ReponTESESSION - 2026-05-2210:22 START4h 6m TOTAL SPAN4h 6m AcTIvi<Im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less thalcode 27mTerm?© browser 1h. 19© comms 20eai sClaudrPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMo grotro7/05/2026May 2026 V1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd4m...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71207
|
2559
|
5
|
2026-05-26T06:31:30.806972+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777090806_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0GROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1..n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitwverelAl SumnalyGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudreAborohtdPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd Srotrol22/ 05/ 2026 m1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
NULL
|
7615143426719991859
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0GROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1..n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitwverelAl SumnalyGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudreAborohtdPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd Srotrol22/ 05/ 2026 m1h19rihinnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
71206
|
NULL
|
NULL
|
NULL
|
|
71206
|
2559
|
4
|
2026-05-26T06:31:29.407050+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777089407_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivit)SearchAl SummaryGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudrPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd grole.7/05/2026m1h19rnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
NULL
|
-4081960095230466024
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee theadone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimepenoditerato? extohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceANtAMStAHOONAHCConNoAMeAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTest.ohe> motfice_ ResolversahtralttM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren Notitication=custom.loglaravel.logSrphpA9 A32 A Sconsola ISTAGiNGloeccorelstiaer.types-minsoice ests unr servchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesise700'eu enviconnent' => ['eu'. "catch-all-eu'. 'catch-all-euftxt.jininnv.com'1'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuironnent defaults to us"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")722essadessn SoscreaChockmaylode snsoscneaehockorGoai:lMessage::class):MessagePant..class):MessagePantHeaden:-class)Sheaden->nane = "Xee-octoinaletoSheaden->value = Srechotente-7271—728Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes & SthisoseresrerockidFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.tconk users UINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teansselect * fron rolesJOIN teans t 1.n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron usersselect * fron plavb.select * fron com.fSELECT * FROM con f# JOTN con Sields +WHERE actsivity sdM You missed photos from Ma% Cludo*Apt Xare ICnuda PintlorrO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManagesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEX=) Foisode 2 wbtites Cmek [EMAIL]/flow/defa# Reminder:a Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivit)SearchAl SummaryGenerate ReponTESESSION - 2026-05-2210:22 StARt4h 6m TOTAL SPAN4h 6m AcTIvi<im BREAKS (O)Active time above a wail clock duration of recording sessions (including tiny gaps between frames). App totals below u recorded frames x 25 each - these will be less than active timecode 27mTerm?© browser 1h. 19© comms 20eai sClaudrPhaStormNotesAlfrede systom 4mRaneasO WERSITES RY DOMAIND00%Lluc coMd grole.7/05/2026m1h19rnsolo.es.amaron.com/eloudcatab/hocefreoiaoetuwnest-1floorWp-loot.iosiobtsspfd...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71205
|
2559
|
3
|
2026-05-26T06:31:27.787409+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777087787_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee cheldtone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha> motfice_ Resolvers→attaltsM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesiseA9 A32 A V=custom.loglaravel.logconsola ISTAGiNGlFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.idFROM users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teans'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuiironnent defaules tous"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478)c-tch-au1e477.3152786. com8/70lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorGoas:Message::class):MessagePant..class):MessagePantHeaden:-class)Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes e Sthisosenenretockie7[PHONE]—728CONCAT(U.Ld, CASJOIN teans t 1..n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron userscolont & foan nlowhselect * fron plavb.select * fron com.f• JOTN con fields &WHERE actsivity sd100% 142Tue 26 May 9:31:2722/05/2026M You missed photos from MaAmbulatory sheet - PaperieO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEXE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitAl Summan14:20 ENAhAm TOYAL SPANAh Am sermCm BREAKS (0)Mtetive time shoun E wnll clock duration of rocordino cecsiooe (includico tiou Clos betteno fesmes). Ano totale bojan E rocorded teamec y he cnch - themh ml be thec than hethn tincode 27mterm?browser 1h 19© comms 20.Claudeathar ohteNntndAMred@ system 4mRaveas...
|
NULL
|
2397458239070508664
|
NULL
|
visual_change
|
ocr
|
NULL
|
rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoS rirceroxroie.WindowHelpPVovsco.s© ServiceTest.phoSyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php(©CrmConfigurationSettingsServiceTestCrmObiectsResolverTest.phoDefaultProspectSearchStrategyTest.d* EmailHelperTest.phoC FieldVatueConverterTest.ohrC MiarateProviderServiceTest.ohde Oooordrviciwceong opportunitysyncstrategyResoivertese Prosodee cheldtone Prosodesetenwhwowierc Provdeeaimeetono@ RocordSelectorTest.phpc Resolwe@omosnyNamesysmaittrainchttimePenoditerato?ext.ohoUpdateCrmDataResolverTest.phplintemalv im Kloskv # AutomatedReports© Activity TypeService Test.php© AskJiminnyReportActivityServiceTAckminnyRooorserv cetescohp© AutomatedReportsCallbackServiceAwtAmstoAOonMheConnodmAutomatedReportsServiceExtendeAmtmatohooniheConme diahet© AutomatedReportsServiceFormattAntAMAtОAОAЛARACORiNОCOAN© AutomatedReportsServiceGetPlay:© AutomatedReportsServiceReportG© AutomatedReportsServiceTest.php© AutomatedReportsServiceValidate© AutomatedReportsServiceValidaticC RociciontSarviceTcat.oha> motfice_ Resolvers→attaltsM ValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholcTeytRelavSendcattest. ohol>Imn MeetinaCaneratoren NotiticationSrphpoeccorelstiaer.types-minsoce estts unt serwchuse..wovenswasst exhelayserv cehrcsscassexreraysers celes exthsesiseA9 A32 A V=custom.loglaravel.logconsola ISTAGiNGlFROM text relaysWHERE wuid = wuidtSELECT DISTINCT U.idFROM users uINNER JOTN activitiWHERE a,type LIKEAND a,created at > 0lGROUP BY u.sid u.emORDER BY sns countselect * fron teans'us_environnent' => ['us', 'catch-all', '[EMAIL]'].other enuiironnent defaules tous"=>othen"catch-au.'eu_environnent_with_plus_tag' => ['eu', 'catch-all-eu', 'catch-all-eu[PHONE].4478)c-tch-au1e477.3152786. com8/70lue enus coosent wth alne Taees nel carchoml eatchoainthnhii yihwiooyiteeprotected function setUp@: voidt...protected function tearDownO: voidi...#[DataProvider('environmentProvider')]pooere tuncczon cescesrorcurren.cnv.ronnentchw.chsingX6rin.osinaiatokondorstiang soeptoykeczonstiing sexpecreonclasD: void fConfig:.set("jininny.coogle text host"txt.jiminny.com")messadees soscreaenockemaylode snsoscneaehockorGoas:Message::class):MessagePant..class):MessagePantHeaden:-class)Sheaden-snane = "Xer-irtoinal-toSheaden->yalue = Srechotent:Spavload->nethod( constraint: "getHeadens")->w/11Return(|Sheaderl)."aetPavlosd")->/llReturn (Spavload),Susenshessnoes e Sthisosenenretockie7[PHONE]—728CONCAT(U.Ld, CASJOIN teans t 1..n<-SELECT * FROM activ.CEISCY & SPOM SAtiVSELECT * FROM crm cCEISeY & SO0M toandselect * fron userscolont & foan nlowhselect * fron plavb.select * fron com.f• JOTN con fields &WHERE actsivity sd100% 142Tue 26 May 9:31:2722/05/2026M You missed photos from MaAmbulatory sheet - PaperieO'-Anoie MacBook. Pro 14d Apple Mac Studio M4 MaxIWelcome to authentkt - auReminder:Photos - Gaodle Photo,-ny0A9000llIS, REssTô Nginx Proxy ManacesWelcome, Luicas - Admin - aiai Notion@ Sto para pente : rIGREEXE Feisodo 2 mbtites Crook [EMAIL]/flow/defa# Remindersa Naw Tol=2 app.screenpipe.lakylak.xyzScreenpipe farchive.do • 9620.1MBActivitAl Summan14:20 ENAhAm TOYAL SPANAh Am sermCm BREAKS (0)Mtetive time shoun E wnll clock duration of rocordino cecsiooe (includico tiou Clos betteno fesmes). Ano totale bojan E rocorded teamec y he cnch - themh ml be thec than hethn tincode 27mterm?browser 1h 19© comms 20.Claudeathar ohteNntndAMred@ system 4mRaveas...
|
71204
|
NULL
|
NULL
|
NULL
|
|
71204
|
2559
|
2
|
2026-05-26T06:31:25.506654+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777085506_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatch rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolvers→attaltsValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseother enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]public function testIsForCurrentEnvironmentWithMatchingX6m0riginalToHeaderCstiang soeptoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);Sheaden->nane = "Xet-untoinaletoSheaden->value = Srechotente"getPayload') ->willReturn(SpayLoad);SusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):E custom.logH9H3ZAVA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_to697700702704700213712213-214215716721722723SELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersselect * fron playbo1—728# AND f.crn_provideYou missed photos fronClasdo* API Keys | Claude Platform§01 - Appio MacBook Pro 14[a Apple Mac Studio Mã Max I :(6 NotionAs Location LooneCah Reminder:Uptime Kuma) New TabGarmin Connect REST API »luc coMd grol-2eM GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMore•..0000= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrwSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos «[EMAIL] me -25 May 2026, 23-19 (10 hours ago)dl Google Photos5,2308.860MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscroe hereGet the Google Photos app• Coogle Play App StoreSent ItemsWORKz centra8481,274< Reply→ Forward...
|
NULL
|
-2743158303096690101
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatch rirceroxroie.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpc Raseservicetesciong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolvers→attaltsValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseother enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]public function testIsForCurrentEnvironmentWithMatchingX6m0riginalToHeaderCstiang soeptoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);Sheaden->nane = "Xet-untoinaletoSheaden->value = Srechotente"getPayload') ->willReturn(SpayLoad);SusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):E custom.logH9H3ZAVA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_to697700702704700213712213-214215716721722723SELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersselect * fron playbo1—728# AND f.crn_provideYou missed photos fronClasdo* API Keys | Claude Platform§01 - Appio MacBook Pro 14[a Apple Mac Studio Mã Max I :(6 NotionAs Location LooneCah Reminder:Uptime Kuma) New TabGarmin Connect REST API »luc coMd grol-2eM GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMore•..0000= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrwSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos «[EMAIL] me -25 May 2026, 23-19 (10 hours ago)dl Google Photos5,2308.860MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscroe hereGet the Google Photos app• Coogle Play App StoreSent ItemsWORKz centra8481,274< Reply→ Forward...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71203
|
2558
|
5
|
2026-05-26T06:31:25.402227+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777085402_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2•ShellEditViewDOCKERdebug modetelemetryuse p iTerm2•ShellEditViewDOCKERdebug modetelemetryuse pii removaluse all monitors2026-05-26T09:31:03.093822Zignored windowsincluded windowscloud syncauto-destruct piddeepgram keyapi authencrypt secretsretention daysretention mode• ₴1falsetruetruetruelanguagesSessionScriptsProfilesWindowHelp$ 0100% <47DEV (-zsh)$82screenpipe"APP (-zsh)|*3screenpipe"8•Tue 26 May 9:31:24-zsh181+INFO screenpipe_core::pipes: pipe scheduler started (generation 2)disablednot setenableddisabled14media-only (keep transcripts)monitorsall languagesid: 1id: 2audio devicesMacBook Pro Microphone (input)System Audio (output)you are using local processing. allyour data stays on your computer.warning: telemetry is enabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-05-26T09:31:03.094123ZINFO screenpipe:starting UIevent capture2026-05-26109:31:03.0977372WARN screenpipe: piagent install failed: bun not found - install from https://bun.sh2026-05-26709:31:03.102328ZINFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)2026-05-26T09:31:03.121802ZINFO screenpipe_engine::ui_recorder: Starting UIevent capture2026-05-26T09:31:03.122210ZINFO screenpipe: text-PII worker skippedstartup - async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PIIremoval.2026-05-26T09:31:03.122223ZINFOscreenpipe:image-PIIworker skipped at startup - async_image_pii_redaction=false. rfdetr_v9model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → Al PIIremoval.2026-05-26T09:31:03.122380ZINFO screenpipe_engine::ui_recorder: UIrecording session started: 70b021ee-633e-452a-beee-018e5e9e01542026-05-26709:31:03.122499ZINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-05-26109:31:03.122532ZINFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-2606:31:03.122531 UTO2026-05-26T09:31:03.129063ZINFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)...
|
NULL
|
-7566035065264908831
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2•ShellEditViewDOCKERdebug modetelemetryuse p iTerm2•ShellEditViewDOCKERdebug modetelemetryuse pii removaluse all monitors2026-05-26T09:31:03.093822Zignored windowsincluded windowscloud syncauto-destruct piddeepgram keyapi authencrypt secretsretention daysretention mode• ₴1falsetruetruetruelanguagesSessionScriptsProfilesWindowHelp$ 0100% <47DEV (-zsh)$82screenpipe"APP (-zsh)|*3screenpipe"8•Tue 26 May 9:31:24-zsh181+INFO screenpipe_core::pipes: pipe scheduler started (generation 2)disablednot setenableddisabled14media-only (keep transcripts)monitorsall languagesid: 1id: 2audio devicesMacBook Pro Microphone (input)System Audio (output)you are using local processing. allyour data stays on your computer.warning: telemetry is enabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-05-26T09:31:03.094123ZINFO screenpipe:starting UIevent capture2026-05-26109:31:03.0977372WARN screenpipe: piagent install failed: bun not found - install from https://bun.sh2026-05-26709:31:03.102328ZINFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)2026-05-26T09:31:03.121802ZINFO screenpipe_engine::ui_recorder: Starting UIevent capture2026-05-26T09:31:03.122210ZINFO screenpipe: text-PII worker skippedstartup - async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PIIremoval.2026-05-26T09:31:03.122223ZINFOscreenpipe:image-PIIworker skipped at startup - async_image_pii_redaction=false. rfdetr_v9model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → Al PIIremoval.2026-05-26T09:31:03.122380ZINFO screenpipe_engine::ui_recorder: UIrecording session started: 70b021ee-633e-452a-beee-018e5e9e01542026-05-26709:31:03.122499ZINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-05-26109:31:03.122532ZINFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-2606:31:03.122531 UTO2026-05-26T09:31:03.129063ZINFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)...
|
71201
|
NULL
|
NULL
|
NULL
|
|
71202
|
2559
|
1
|
2026-05-26T06:31:23.461439+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777083461_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatc rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetestong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolversahtralttValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseother enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]strang suepcoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);Sheaden->nane = "Xet-untoinaletoSheaden->value = SrechotenteSusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):E custom.log49HSZAYA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_to700704700789710213712213-214215716721722723SELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersYou missed photos fronClaudd* API Keys | Claude Platform§01 - Appio MacBook Pro 14°As Location LooneRemindersUptime KumaTuc coMd grol2e..... . .M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMoreHardware & SoftwareSent ItemsWORKz centra= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrWSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos-«[EMAIL] me25 May 2026, 23-19 (10 hours ago)8l Google Photos5,2308.8606.183MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscr oe hereGet the Google Photos app• Coogle Play App Store8481,274< Reply→ Forward...
|
NULL
|
5477644536177725301
|
NULL
|
click
|
ocr
|
NULL
|
rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatc rirceroxPotLe.PVovsco.s© ServiceTest.pho© SyncBatchRedisServiceTest.phpRaseservicetestong© CachedCrmServiceDecoratorTest.php© CrmActivityServiceTest.php© CrmConfigurationSettingsServiceTest© CrmObjectsResolverTest.php© DefaultProspectSearchStrategyTest.p* EmailHelperTest.pho© FieldValueConverterTest.php© MigrateProviderServiceTest.phpe Oooordrviciwceon©OpportunitySyncStrategyResolverTese Prosodee theadon25 D© ProspectSearchStrategyFactoryTest,© ProviderRegistryTest.php© RecordSelectorTest.phpc Resolwe@omosnyNamesysmaittrain© TimePerioditeratorTest.phpUpdateCrmDataResolverTest.phpInternalv im Klosk~ E AutomatedReports© Activity TypeServiceTest.php© AskJiminnyReportActivityServicet.AskJiminnyReportServiceTest.phpC AutomatedReportsCallbackService© AutomatedReportsServiceActivitie:C AutomatedReportsServiceExtende© AutomatedReportsServiceFieldDatC AutomatedReportsServiceFormatti© AutomatedReportsServiceGetActivC AutomatedReportsServiceGetPlaytAutomatedReportsServiceReportG© AutomatedReportsServiceTest.phgAutomatedReportsServiceValidateAutomatedReportsServiceValidatic© RecipientServiceTest.php› OfficeResolversahtralttValidatorscRatchSarvicetest.nhocEmalllAct witySertcotect.ohowlinboySarvicetest.oholC TextRelayServiceTest.php>Imn MeetinaCanerator>E NotificationWindowHelpSrphpocecoresttaer-types-aminsoce ests Unt senvrcoeuse..#[CoversClass(TextRelayService::class)]CassexKelayserw Celes exteiosestaseother enuironnent defaults to us"protected function setUp(): voidl...}protected function tearDown(): void{...}#[OataProvider('environnentProvider')]strang suepcoykeczonstiing sexpecreonclas): void{Config::set('jininny.google_text_host'.messadees soscreaenockemaylode snsoscneaehockorGnai2Message: :class);MessagePart::class);Sheaden->nane = "Xet-untoinaletoSheaden->value = SrechotenteSusersMessages = Sthis->createMockl o"aet"o> Return SnessnocGoogLeGnait::class):E custom.log49HSZAYA console [STAGING)E IaravelJogRUn TeXCNeLoysWHERE vuid = uvid_to700704700789710213712213-214215716721722723SELECT * FROM Crn_COSELECT * FROM teamsselect * fron usersYou missed photos fronClaudd* API Keys | Claude Platform§01 - Appio MacBook Pro 14°As Location LooneRemindersUptime KumaTuc coMd grol2e..... . .M GmailComposInboxStarredSnoozedImportantSentDraftsPurchasesSocialUpdatesForumsPromotionsMoreHardware & SoftwareSent ItemsWORKz centra= mail.google.com/mail/u/0/#inbox/FMfcgzQgMCTwXBQNmhgqpkZRSjLZVVrWSearch mailYou missed photos from Мариана Иванова » Inbor *Google Photos-«[EMAIL] me25 May 2026, 23-19 (10 hours ago)8l Google Photos5,2308.8606.183MМариана Иванова shared photos with youView photosYou received this mail because you have unviewed photos from one or more Googleusers. I you no longer wish to recerve ematl nounicatons or unvienod snarco procos.unsuoscr oe hereGet the Google Photos app• Coogle Play App Store8481,274< Reply→ Forward...
|
71197
|
NULL
|
NULL
|
NULL
|
|
71201
|
2558
|
4
|
2026-05-26T06:31:21.828955+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777081828_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2•ShellEditViewDOCKERdebug modetelemetryuse p iTerm2•ShellEditViewDOCKERdebug modetelemetryuse pii removaluse all monitors2026-05-26T09:31:03.093822Zignored windowsincluded windowscloud syncauto-destruct piddeepgram keyapi authencrypt secretsretention daysretention mode• ₴1falsetruetruetruelanguagesSessionScriptsProfilesWindowHelp> 0DEV (-zsh)$82screenpipe"APP (-zsh)|*3screenpipe"100% <478•Tue 26 May 9:31:21-zsh181+INFO screenpipe_core::pipes: pipe scheduler started (generation 2)disablednot setenableddisabled14media-only (keep transcripts)monitorsall languagesid: 1id: 2audio devicesMacBook Pro Microphone (input)System Audio (output)you are using local processing. allyour data stays on your computer.warning: telemetry is enabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-05-26T09:31:03.094123ZINFO screenpipe:starting UIevent capture2026-05-26109:31:03.0977372WARN screenpipe: piagent install failed: bun not found - install from https://bun.sh2026-05-26709:31:03.102328ZINFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)2026-05-26T09:31:03.121802ZINFO screenpipe_engine::ui_recorder: Starting UIevent capture2026-05-26T09:31:03.122210ZINFO screenpipe: text-PII worker skippedstartup - async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PIIremoval.2026-05-26T09:31:03.122223ZINFOscreenpipe:image-PIIworker skipped at startup - async_image_pii_redaction=false. rfdetr_v9model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → Al PIIremoval.2026-05-26T09:31:03.122380ZINFO screenpipe_engine::ui_recorder: UIrecording session started: 70b021ee-633e-452a-beee-018e5e9e01542026-05-26709:31:03.122499ZINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-05-26109:31:03.122532ZINFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-2606:31:03.122531 UTO2026-05-26T09:31:03.129063ZINFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)...
|
NULL
|
8131349958812076655
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2•ShellEditViewDOCKERdebug modetelemetryuse p iTerm2•ShellEditViewDOCKERdebug modetelemetryuse pii removaluse all monitors2026-05-26T09:31:03.093822Zignored windowsincluded windowscloud syncauto-destruct piddeepgram keyapi authencrypt secretsretention daysretention mode• ₴1falsetruetruetruelanguagesSessionScriptsProfilesWindowHelp> 0DEV (-zsh)$82screenpipe"APP (-zsh)|*3screenpipe"100% <478•Tue 26 May 9:31:21-zsh181+INFO screenpipe_core::pipes: pipe scheduler started (generation 2)disablednot setenableddisabled14media-only (keep transcripts)monitorsall languagesid: 1id: 2audio devicesMacBook Pro Microphone (input)System Audio (output)you are using local processing. allyour data stays on your computer.warning: telemetry is enabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-05-26T09:31:03.094123ZINFO screenpipe:starting UIevent capture2026-05-26109:31:03.0977372WARN screenpipe: piagent install failed: bun not found - install from https://bun.sh2026-05-26709:31:03.102328ZINFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)2026-05-26T09:31:03.121802ZINFO screenpipe_engine::ui_recorder: Starting UIevent capture2026-05-26T09:31:03.122210ZINFO screenpipe: text-PII worker skippedstartup - async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PIIremoval.2026-05-26T09:31:03.122223ZINFOscreenpipe:image-PIIworker skipped at startup - async_image_pii_redaction=false. rfdetr_v9model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → Al PIIremoval.2026-05-26T09:31:03.122380ZINFO screenpipe_engine::ui_recorder: UIrecording session started: 70b021ee-633e-452a-beee-018e5e9e01542026-05-26709:31:03.122499ZINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-05-26109:31:03.122532ZINFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-2606:31:03.122531 UTO2026-05-26T09:31:03.129063ZINFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71200
|
2558
|
3
|
2026-05-26T06:31:15.136411+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777075136_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-22T13:46:27.032835Z INFO screenpipe_engin 2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:14:43.042050Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.636397916s
2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted
2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)
2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted
2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size =...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-26T09:31:12.673275Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4456630385270008726, trigger=visual_change)\n2026-05-26T09:31:13.096778Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-26T09:31:13.099373Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-26T09:31:13.099500Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-26T09:31:13.099519Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.049 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-26T09:31:13.246182Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-26T09:31:13.250810Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-26T09:31:13.251051Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-26T09:31:13.252080Z INFO screenpipe_audio::audio_manager::manager: seeded 62 speakers (named + unnamed) from DB into embedding manager\n2026-05-26T09:31:13.252116Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-26T09:31:13.252139Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-26T09:31:13.701895Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-26T09:31:13.748252Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-26T09:31:13.748323Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-26T09:31:13.748351Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-26T09:31:14.972187Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71199 paired=2 still_pending=0","depth":4,"on_screen":true,"value":"2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-26T09:31:12.673275Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4456630385270008726, trigger=visual_change)\n2026-05-26T09:31:13.096778Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-26T09:31:13.099373Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-26T09:31:13.099500Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-26T09:31:13.099519Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.049 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-26T09:31:13.246182Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-26T09:31:13.250810Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-26T09:31:13.251051Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-26T09:31:13.252080Z INFO screenpipe_audio::audio_manager::manager: seeded 62 speakers (named + unnamed) from DB into embedding manager\n2026-05-26T09:31:13.252116Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-26T09:31:13.252139Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-26T09:31:13.701895Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-26T09:31:13.748252Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-26T09:31:13.748323Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-26T09:31:13.748351Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-26T09:31:14.972187Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71199 paired=2 still_pending=0","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19444445,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.19861111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39166668,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.39583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59305555,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7861111,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7902778,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4958587055304279033
|
-5427308935470221855
|
click
|
accessibility
|
NULL
|
2026-05-22T13:46:27.032835Z INFO screenpipe_engin 2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:14:43.042050Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.636397916s
2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted
2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)
2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted
2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size =...
|
71199
|
NULL
|
NULL
|
NULL
|
|
71199
|
2558
|
2
|
2026-05-26T06:31:11.309878+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777071309_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ cu Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ curl -X POST "[URL_WITH_CREDENTIALS] Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas
ssh: connect to host [IP_ADDRESS] port 22: Connection refused
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ curl -X POST \"http://192.168.0.242:8766/api/pipes/ollama-daily-digest/run?d=2026-05-20\"\n{\"title\":\"Error\",\"content\":\"Error: timed out\",\"date\":\"2026-05-20\"}Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ Connection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas \nssh: connect to host 192.168.0.242 port 22: Connection refused\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":1.0,"height":0.9122222},"on_screen":true,"lines":[{"char_start":0,"char_count":136,"bounds":{"left":0.00069444446,"top":0.08777778,"width":0.75555557,"height":0.02}},{"char_start":136,"char_count":165,"bounds":{"left":0.00069444446,"top":0.107777774,"width":0.9166667,"height":0.02}},{"char_start":301,"char_count":36,"bounds":{"left":0.00069444446,"top":0.12777779,"width":0.2,"height":0.02}},{"char_start":337,"char_count":109,"bounds":{"left":0.00069444446,"top":0.14777778,"width":0.60555553,"height":0.02}},{"char_start":446,"char_count":63,"bounds":{"left":0.00069444446,"top":0.16777778,"width":0.35,"height":0.02}},{"char_start":509,"char_count":60,"bounds":{"left":0.00069444446,"top":0.18777777,"width":0.33333334,"height":0.02}}],"value":"Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ curl -X POST \"http://192.168.0.242:8766/api/pipes/ollama-daily-digest/run?d=2026-05-20\"\n{\"title\":\"Error\",\"content\":\"Error: timed out\",\"date\":\"2026-05-20\"}Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ Connection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas \nssh: connect to host 192.168.0.242 port 22: Connection refused\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19444445,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.19861111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39166668,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.39583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59305555,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7861111,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7902778,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
4456630385270008726
|
-3550326396785374463
|
click
|
accessibility
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ cu Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ curl -X POST "[URL_WITH_CREDENTIALS] Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas
ssh: connect to host [IP_ADDRESS] port 22: Connection refused
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71198
|
2558
|
1
|
2026-05-26T06:31:06.365080+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777066365_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ggml_metal_init: use fusion = true
ggml_me ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manag...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"ggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2","depth":4,"on_screen":true,"value":"ggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)\n2026-05-26T09:31:04.083586Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=71196, dur=79ms\n2026-05-26T09:31:04.121596Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=71197, dur=73ms\n2026-05-26T09:31:04.122653Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19444445,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.19861111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39166668,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.39583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59305555,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7861111,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7902778,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-8930316728392444063
|
-6580230440077003319
|
visual_change
|
accessibility
|
NULL
|
ggml_metal_init: use fusion = true
ggml_me ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manag...
|
71196
|
NULL
|
NULL
|
NULL
|
|
71197
|
2559
|
0
|
2026-05-26T06:31:03.780152+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777063780_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ggml_metal_init: allocating
ggml_metal_init: found ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decod...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"ggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)","depth":4,"on_screen":true,"value":"ggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-26T09:31:04.015905Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (1920x800, 2fps, 0 excluded)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.36336437,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.36535904,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.45777926,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.45977393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5521942,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55418885,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.64660907,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.64860374,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
5922148157640115224
|
-6580230440077003319
|
manual
|
accessibility
|
NULL
|
ggml_metal_init: allocating
ggml_metal_init: found ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decod...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71196
|
2558
|
0
|
2026-05-26T06:31:03.734988+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779777063734_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_backend_init_gpu: using Metal backend
ggml whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.5...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","depth":4,"on_screen":true,"value":"whisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0\n2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0\n2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0\n2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0\n2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0\n2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0\n2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0\n2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0\n2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0\n2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0\n2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834\n2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0\n2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0\n2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0\n2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0\n2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0\n2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845\n2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0\n2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0\n2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0\n2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0\n2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0\n2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0\n2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0\n2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0\n2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0\n2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0\n2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0\n2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0\n2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0\n2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0\n2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0\n2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0\n2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0\n2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0\n2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0\n2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0\n2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0\n2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)\n2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)\n2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)\n2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0\n2026-05-22T13:47:01.445136Z WARN sqlx::query: summary=\"COMMIT\" db.statement=\"\" rows_affected=1 rows_returned=0 elapsed=1.208017791s\n2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0\n2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0\n2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0\n2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0\n2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0\n2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)\n2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0\n2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0\n2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0\n2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0\n2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0\n2026-05-22T13:48:03.509264Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=116 elapsed=2.640436125s\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:48:46.815103Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=49 elapsed=4.025636458s\n2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames\n2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted\n2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks\n2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0\n2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0\n2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T13:53:56.217432Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=73 elapsed=3.960102541s\n2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames\n2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted\n2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)\n2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0\n2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0\n2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)\n2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)\n2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)\n2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)\n2026-05-22T13:59:06.631961Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=95 elapsed=5.166274917s\n2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted\n2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted\n2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0\n2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)\n2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0\n2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0\n2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1\n2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0\n2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0\n2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0\n2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0\n2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0\n2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0\n2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0\n2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0\n2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0\n2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0\n2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0\n2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0\n2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0\n2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0\n2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0\n2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0\n2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0\n2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0\n2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985\n2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1\n2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0\n2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0\n2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0\n2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0\n2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0\n2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0\n2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)\n2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0\n2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997\n2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0\n2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996\n2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)\n2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0\n2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)\n2026-05-22T14:04:23.562487Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=24 elapsed=6.035809s\n2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted\n2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)\n2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0\n2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0\n2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)\n2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0\n2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0\n2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0\n2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)\n2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)\n2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0\n2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0\n2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)\n2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)\n2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)\n2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)\n2026-05-22T14:09:33.786926Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=6.384550083s\n2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted\n2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted\n2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0\n2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)\n2026-05-22T14:12:10.464016Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.079239583s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:12:30.635324Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:14:30.880046Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:14:43.042050Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.636397916s\n2026-05-22T14:14:43.043157Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-22T14:14:44.628132Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 6.5MB → 0.8MB (8.0x), 24 JPEGs deleted\n2026-05-22T14:14:46.238076Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.4MB → 0.9MB (5.0x), 24 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:16:31.230385Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:17:12.165927Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:12.389582Z INFO screenpipe_db::db: created new speaker id=62 (no existing match within threshold)\n2026-05-22T14:17:12.826519Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.093008Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-22T14:17:13.858857Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:18:31.637047Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:19:47.130432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-05-22T14:19:48.343269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 3.5MB → 0.7MB (5.2x), 13 JPEGs deleted\n2026-05-22T14:19:50.147760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.4MB → 1.8MB (1.9x), 17 JPEGs deleted\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:20:31.899583Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:22:32.143536Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:10.423361Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-22T14:24:10.795320Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=1 pending_frames=0 total_pairs=1438 total_evicted=1796 total_failed=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:24:32.462602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:24:37.549379Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-22T14:24:54.600747Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=23 elapsed=4.43952425s\n2026-05-22T14:24:54.601633Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-05-22T14:24:55.602008Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.7MB → 0.5MB (5.3x), 10 JPEGs deleted\n2026-05-22T14:24:56.642375Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.4MB → 0.6MB (3.8x), 11 JPEGs deleted\n2026-05-22T14:25:28.391554Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-22T14:25:30.815683Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-22T14:25:30.873825Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-22T14:25:30.895223Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-22T14:25:31.011427Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1800 total_failed=0\n2026-05-22T14:25:31.041351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-22T14:25:31.072147Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-22T14:25:31.555379Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T14:25:32.955739Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-22T14:25:32.956016Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.301819Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302198Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-22T14:25:33.302923Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T14:25:37.227488Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=118 elapsed=1.172807333s\n2026-05-22T14:25:42.506390Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71094 paired=2 still_pending=0\n2026-05-22T14:25:47.526755Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 186.3ms elapsed (expected 5.3ms) → inserting 181.0ms silence (17373 samples)\n2026-05-22T14:25:51.569352Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71095 paired=1 still_pending=0\n2026-05-22T14:25:51.948223Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T14:25:54.996191Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71096 paired=1 still_pending=3\n2026-05-22T14:26:04.719786Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71100 paired=2 still_pending=0\n2026-05-22T14:26:16.645139Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71103 paired=2 still_pending=0\n2026-05-22T14:26:17.539794Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71105 paired=1 still_pending=0\n2026-05-22T14:26:25.612324Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=121 elapsed=2.057079625s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:26:35.062506Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks\n2026-05-22T14:26:38.338860Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71107 paired=2 still_pending=3\n2026-05-22T14:26:39.709291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=4 still_pending=0\n2026-05-22T14:26:41.199414Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71110 paired=1 still_pending=0\n2026-05-22T14:26:47.998207Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=4 pending_frames=4 total_pairs=1454 total_evicted=1802 total_failed=0\n2026-05-22T14:26:47.998406Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71113 paired=1 still_pending=0\n2026-05-22T14:26:50.713519Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 94.9ms elapsed (expected 5.3ms) → inserting 89.6ms silence (8599 samples)\n2026-05-22T14:26:53.035157Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.9ms elapsed (expected 5.3ms) → inserting 81.6ms silence (7831 samples)\n2026-05-22T14:26:55.528246Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=5 pending_frames=2 total_pairs=1455 total_evicted=1805 total_failed=0\n2026-05-22T14:26:59.700021Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71117 paired=1 still_pending=0\n2026-05-22T14:27:01.802403Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 150.4ms elapsed (expected 5.3ms) → inserting 145.1ms silence (13929 samples)\n2026-05-22T14:27:02.048529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 146.8ms elapsed (expected 5.3ms) → inserting 141.5ms silence (13580 samples)\n2026-05-22T14:27:02.634656Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.8ms elapsed (expected 5.3ms) → inserting 77.5ms silence (7441 samples)\n2026-05-22T14:27:08.244789Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71119 paired=1 still_pending=0\n2026-05-22T14:27:08.614218Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=15 pending_frames=2 total_pairs=1457 total_evicted=1806 total_failed=0\n2026-05-22T14:27:15.765277Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71122 paired=1 still_pending=0\n2026-05-22T14:27:17.627377Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71123 paired=1 still_pending=0\n2026-05-22T14:27:21.375727Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71124 paired=1 still_pending=0\n2026-05-22T14:27:23.586009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71125 paired=1 still_pending=0\n2026-05-22T14:27:25.353137Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71126 paired=1 still_pending=0\n2026-05-22T14:27:26.520746Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71127 paired=1 still_pending=0\n2026-05-22T14:27:29.515388Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71128 paired=1 still_pending=0\n2026-05-22T14:27:32.139022Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71129 paired=1 still_pending=0\n2026-05-22T14:27:32.351320Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71130 paired=13 still_pending=8\n2026-05-22T14:27:37.736017Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71133 paired=1 still_pending=0\n2026-05-22T14:27:39.031942Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=3 total_pairs=1479 total_evicted=1807 total_failed=0\n2026-05-22T14:27:43.869199Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=10 pending_frames=2 total_pairs=1479 total_evicted=1809 total_failed=0\n2026-05-22T14:27:43.869392Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71135 paired=1 still_pending=0\n2026-05-22T14:27:46.171511Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71139 paired=1 still_pending=0\n2026-05-22T14:27:47.332190Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71141 paired=1 still_pending=0\n2026-05-22T14:27:49.492186Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71143 paired=1 still_pending=0\n2026-05-22T14:27:50.501416Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71145 paired=1 still_pending=0\n2026-05-22T14:27:53.223291Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71146 paired=1 still_pending=0\n2026-05-22T14:27:54.647434Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=7 total_pairs=1485 total_evicted=1811 total_failed=0\n2026-05-22T14:27:54.647867Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71148 paired=1 still_pending=0\n2026-05-22T14:27:55.800836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71150 paired=1 still_pending=0\n2026-05-22T14:27:59.963088Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=13 pending_frames=9 total_pairs=1487 total_evicted=1813 total_failed=0\n2026-05-22T14:28:02.216252Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71152 paired=1 still_pending=0\n2026-05-22T14:28:08.799963Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71154 paired=1 still_pending=0\n2026-05-22T14:28:10.022618Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71156 paired=1 still_pending=0\n2026-05-22T14:28:10.656006Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71158 paired=1 still_pending=0\n2026-05-22T14:28:11.697532Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71159 paired=1 still_pending=0\n2026-05-22T14:28:13.111942Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71160 paired=1 still_pending=0\n2026-05-22T14:28:14.231456Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=15 pending_frames=12 total_pairs=1493 total_evicted=1815 total_failed=0\n2026-05-22T14:28:14.231530Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71161 paired=1 still_pending=0\n2026-05-22T14:28:16.814829Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71163 paired=1 still_pending=0\n2026-05-22T14:28:17.782934Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71165 paired=1 still_pending=0\n2026-05-22T14:28:19.653659Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71166 paired=1 still_pending=0\n2026-05-22T14:28:20.842891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71167 paired=1 still_pending=0\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T14:28:28.459283Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71169 paired=1 still_pending=0\n2026-05-22T14:28:29.543836Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71171 paired=1 still_pending=0\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T14:28:35.224354Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks\n2026-05-22T14:28:40.949646Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=16 pending_frames=14 total_pairs=1500 total_evicted=1819 total_failed=0\n2026-05-22T14:28:40.967460Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71173 paired=1 still_pending=0\n2026-05-22T14:28:43.559656Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71174 paired=1 still_pending=0\n2026-05-22T14:28:47.563682Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71177 paired=1 still_pending=0\n2026-05-22T14:28:48.732684Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=15 pending_frames=13 total_pairs=1503 total_evicted=1826 total_failed=0\n2026-05-22T14:28:51.100950Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 120.6ms elapsed (expected 5.3ms) → inserting 115.3ms silence (11065 samples)\n2026-05-22T14:28:53.664779Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=15 pending_frames=11 total_pairs=1503 total_evicted=1829 total_failed=0\n2026-05-22T14:28:53.665107Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71178 paired=1 still_pending=0\n2026-05-22T14:29:09.557244Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=8 pending_frames=7 total_pairs=1504 total_evicted=1840 total_failed=0\n2026-05-22T14:29:09.557642Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71180 paired=1 still_pending=0\n2026-05-22T14:29:09.922481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.049361Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71181 paired=1 still_pending=0\n2026-05-22T14:29:12.052294Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=2 still_pending=4\n2026-05-22T14:29:12.256384Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:12.415587Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7923116779312214135, trigger=click)\n2026-05-22T14:29:13.568626Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71182 paired=1 still_pending=0\n2026-05-22T14:29:13.617586Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=6 pending_frames=8 total_pairs=1509 total_evicted=1841 total_failed=0\n2026-05-22T14:29:17.830831Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71185 paired=1 still_pending=0\n2026-05-22T14:29:18.617477Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=7 pending_frames=7 total_pairs=1510 total_evicted=1846 total_failed=0\n2026-05-22T14:29:18.977788Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 98.9ms elapsed (expected 5.3ms) → inserting 93.5ms silence (8979 samples)\n2026-05-22T14:29:25.235398Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=6 pending_frames=6 total_pairs=1510 total_evicted=1848 total_failed=0\n2026-05-22T14:29:25.235728Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71188 paired=1 still_pending=0\n2026-05-22T14:29:28.896643Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1511 total_evicted=1849 total_failed=0\n2026-05-22T14:29:30.950594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1574809818300579953, trigger=visual_change)\n2026-05-22T14:29:31.780076Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71192 paired=2 still_pending=0\n2026-05-22T14:29:32.670962Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71193 paired=1 still_pending=0\n2026-05-22T14:29:33.362313Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71194 paired=1 still_pending=0\n2026-05-22T14:29:34.261823Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71195 paired=1 still_pending=0\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alia sp-start \nzsh: command not found: alia\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ du -sh ~/.screenpipe \n6.2G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.346\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-26T09:31:02.067706Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-26T09:31:02.688632Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-26T09:31:02.690317Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-26T09:31:02.690655Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-26T09:31:02.710847Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-26T09:31:02.710954Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-26T09:31:03.088283Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-26T09:31:03.088271Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-26T09:31:03.088338Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-26T09:31:03.088441Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-26T09:31:03.088510Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n\n tip: get the desktop app for chat, timeline, and search UI\n → https://screenpi.pe/onboarding\n\n2026-05-26T09:31:03.092088Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-26T09:31:03.092320Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-26T09:31:03.092785Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-26T09:31:03.092866Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-26T09:31:03.092942Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-26T09:31:03.093029Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-26T09:31:03.093042Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-26T09:31:03.093822Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ MacBook Pro Microphone (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-26T09:31:03.094123Z INFO screenpipe: starting UI event capture\n2026-05-26T09:31:03.097737Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-26T09:31:03.102328Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100), os_low_power=false, thermal=Nominal, reason=ac_power)\n2026-05-26T09:31:03.121802Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-26T09:31:03.122210Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122223Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-26T09:31:03.122380Z INFO screenpipe_engine::ui_recorder: UI recording session started: 70b021ee-633e-452a-beee-018e5e9e0154\n2026-05-26T09:31:03.122499Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-26T09:31:03.122532Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-25 06:31:03.122531 UTC to 2026-05-26 06:31:03.122531 UTC)\n2026-05-26T09:31:03.129063Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-26T09:31:03.129324Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-05-25 06:31:03.122531 UTC\n2026-05-26T09:31:03.130434Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-26T09:31:03.138137Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-26T09:31:03.233929Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-26T09:31:03.233956Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.233979Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-26T09:31:03.279452Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-26T09:31:03.279482Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.279494Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-26T09:31:03.279504Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-26T09:31:03.279518Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-26T09:31:03.902920Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19444445,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.19861111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39166668,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.39583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59305555,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7861111,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7902778,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4283581020823057897
|
-6580230440077003319
|
manual
|
accessibility
|
NULL
|
whisper_backend_init_gpu: using Metal backend
ggml whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:44:24.266930Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:44:25.014009Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70823 paired=1 still_pending=0
2026-05-22T13:44:33.968081Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70825 paired=1 still_pending=0
2026-05-22T13:44:33.979801Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=13 pending_frames=3 total_pairs=1361 total_evicted=1661 total_failed=0
2026-05-22T13:44:36.441738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70828 paired=1 still_pending=0
2026-05-22T13:44:37.847861Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70830 paired=1 still_pending=0
2026-05-22T13:44:40.885653Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70832 paired=1 still_pending=0
2026-05-22T13:44:40.900310Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=11 pending_frames=6 total_pairs=1364 total_evicted=1663 total_failed=0
2026-05-22T13:44:42.701774Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70834 paired=1 still_pending=0
2026-05-22T13:44:43.824847Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=8 total_pairs=1365 total_evicted=1664 total_failed=0
2026-05-22T13:44:52.043327Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=11 pending_frames=9 total_pairs=1365 total_evicted=1665 total_failed=0
2026-05-22T13:44:52.051169Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2116 row_id=72618 frame_id=70834
2026-05-22T13:44:57.722889Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70838 paired=1 still_pending=0
2026-05-22T13:45:00.326619Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70841 paired=1 still_pending=0
2026-05-22T13:45:01.438065Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70843 paired=1 still_pending=0
2026-05-22T13:45:02.639871Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70844 paired=1 still_pending=0
2026-05-22T13:45:03.540110Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=12 pending_frames=8 total_pairs=1370 total_evicted=1666 total_failed=0
2026-05-22T13:45:12.188389Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2129 row_id=72631 frame_id=70845
2026-05-22T13:45:12.202127Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=18 pending_frames=10 total_pairs=1371 total_evicted=1667 total_failed=0
2026-05-22T13:45:16.057099Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=18 pending_frames=8 total_pairs=1371 total_evicted=1670 total_failed=0
2026-05-22T13:45:16.057314Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70849 paired=1 still_pending=0
2026-05-22T13:45:20.875496Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=7 pending_events=10 pending_frames=9 total_pairs=1372 total_evicted=1677 total_failed=0
2026-05-22T13:45:20.882266Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70852 paired=1 still_pending=0
2026-05-22T13:45:28.721297Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70854 paired=1 still_pending=0
2026-05-22T13:45:35.104940Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=10 pending_frames=10 total_pairs=1374 total_evicted=1678 total_failed=0
2026-05-22T13:45:35.105437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70857 paired=1 still_pending=0
2026-05-22T13:45:42.737020Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=10 pending_frames=7 total_pairs=1375 total_evicted=1682 total_failed=0
2026-05-22T13:45:42.737594Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70860 paired=1 still_pending=0
2026-05-22T13:46:14.157615Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=5 total_pairs=1376 total_evicted=1695 total_failed=0
2026-05-22T13:46:14.159184Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70864 paired=1 still_pending=0
2026-05-22T13:46:16.392400Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70868 paired=1 still_pending=0
2026-05-22T13:46:23.917654Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=5 total_pairs=1378 total_evicted=1697 total_failed=0
2026-05-22T13:46:23.917863Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70872 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:46:25.661664Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:46:27.032835Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:28.788486Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=5 total_pairs=1380 total_evicted=1698 total_failed=0
2026-05-22T13:46:31.845154Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70873 paired=1 still_pending=0
2026-05-22T13:46:32.854166Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70876 paired=1 still_pending=0
2026-05-22T13:46:35.636043Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70878 paired=1 still_pending=0
2026-05-22T13:46:35.640111Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=4 total_pairs=1383 total_evicted=1699 total_failed=0
2026-05-22T13:46:38.739268Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:43.843473Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=3 pending_frames=5 total_pairs=1384 total_evicted=1700 total_failed=0
2026-05-22T13:46:43.843853Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70881 paired=1 still_pending=0
2026-05-22T13:46:57.771304Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:46:57.828894Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 136.5ms elapsed (expected 5.3ms) → inserting 131.2ms silence (12594 samples)
2026-05-22T13:46:57.958972Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 108.2ms elapsed (expected 5.3ms) → inserting 102.9ms silence (9875 samples)
2026-05-22T13:46:58.163835Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4235983745889776938, trigger=click)
2026-05-22T13:46:59.865716Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70885 paired=1 still_pending=0
2026-05-22T13:47:01.445136Z WARN sqlx::query: summary="COMMIT" db.statement="" rows_affected=1 rows_returned=0 elapsed=1.208017791s
2026-05-22T13:47:05.360940Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70888 paired=1 still_pending=0
2026-05-22T13:47:13.360632Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70890 paired=1 still_pending=0
2026-05-22T13:47:14.277980Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=4 pending_frames=7 total_pairs=1389 total_evicted=1701 total_failed=0
2026-05-22T13:47:14.278856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70893 paired=1 still_pending=0
2026-05-22T13:47:18.243798Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70896 paired=1 still_pending=0
2026-05-22T13:47:18.608605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4356225183775441222, trigger=click)
2026-05-22T13:47:24.476794Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=5 pending_frames=7 total_pairs=1391 total_evicted=1703 total_failed=0
2026-05-22T13:47:24.479856Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70897 paired=1 still_pending=0
2026-05-22T13:47:26.197251Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70898 paired=1 still_pending=0
2026-05-22T13:47:29.536603Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=3 pending_frames=7 total_pairs=1393 total_evicted=1705 total_failed=0
2026-05-22T13:47:32.047773Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70901 paired=1 still_pending=0
2026-05-22T13:48:03.509264Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=116 elapsed=2.640436125s
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:48:25.985291Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:48:46.815103Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=49 elapsed=4.025636458s
2026-05-22T13:48:46.820516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 49 eligible frames
2026-05-22T13:48:49.168546Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.3MB → 1.1MB (5.8x), 23 JPEGs deleted
2026-05-22T13:48:52.241021Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 3.9MB → 1.4MB (2.8x), 24 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:50:26.367261Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 5 orphaned chunks
2026-05-22T13:51:35.287888Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70904 paired=1 still_pending=0
2026-05-22T13:51:35.320999Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1718 total_failed=0
2026-05-22T13:52:26.256014Z INFO screenpipe_db::db: created new speaker id=61 (no existing match within threshold)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:52:26.610576Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:52:27.441583Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:52:32.523749Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-22T13:53:56.217432Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=73 elapsed=3.960102541s
2026-05-22T13:53:56.218820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 73 eligible frames
2026-05-22T13:53:58.224777Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 8.2MB → 0.7MB (11.3x), 30 JPEGs deleted
2026-05-22T13:54:01.451825Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.4MB → 1.6MB (3.4x), 41 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:54:27.010269Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:56:27.284955Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:08.349782Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 84.3ms elapsed (expected 5.3ms) → inserting 79.0ms silence (7586 samples)
2026-05-22T13:58:09.612845Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=0 total_pairs=1395 total_evicted=1719 total_failed=0
2026-05-22T13:58:12.018857Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70946 paired=1 still_pending=0
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T13:58:27.685393Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T13:58:36.999048Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70951 paired=1 still_pending=0
2026-05-22T13:58:48.861194Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.9ms elapsed (expected 5.3ms) → inserting 77.6ms silence (7448 samples)
2026-05-22T13:58:49.880261Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12458 samples)
2026-05-22T13:58:50.023417Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 143.2ms elapsed (expected 5.3ms) → inserting 137.8ms silence (13231 samples)
2026-05-22T13:58:50.118529Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 90.0ms elapsed (expected 5.3ms) → inserting 84.6ms silence (8126 samples)
2026-05-22T13:59:06.631961Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=95 elapsed=5.166274917s
2026-05-22T13:59:06.633921Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-05-22T13:59:10.312737Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 11.3MB → 1.0MB (11.1x), 42 JPEGs deleted
2026-05-22T13:59:17.575005Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 8.7MB → 3.8MB (2.3x), 51 JPEGs deleted
2026-05-22T14:00:07.737792Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=23 pending_events=0 pending_frames=0 total_pairs=1397 total_evicted=1742 total_failed=0
2026-05-22T14:00:09.135679Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=visual_change)
2026-05-22T14:00:21.558601Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 82.6ms elapsed (expected 5.3ms) → inserting 77.3ms silence (7420 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:00:28.159546Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:00:37.141854Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70966 paired=2 still_pending=0
2026-05-22T14:00:53.896448Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70970 paired=1 still_pending=0
2026-05-22T14:00:53.904738Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70971 paired=1 still_pending=1
2026-05-22T14:00:57.920660Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70972 paired=1 still_pending=0
2026-05-22T14:01:00.769019Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70973 paired=1 still_pending=0
2026-05-22T14:01:01.358213Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:02.691769Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:01:03.763886Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70974 paired=1 still_pending=0
2026-05-22T14:01:10.914415Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=6 pending_frames=1 total_pairs=1405 total_evicted=1745 total_failed=0
2026-05-22T14:01:10.915437Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70975 paired=1 still_pending=0
2026-05-22T14:01:36.066534Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=3 pending_frames=1 total_pairs=1406 total_evicted=1749 total_failed=0
2026-05-22T14:01:36.067615Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70976 paired=1 still_pending=0
2026-05-22T14:01:36.416521Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.081093Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=2 pending_frames=2 total_pairs=1407 total_evicted=1750 total_failed=0
2026-05-22T14:01:39.082342Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:39.295073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:39.502217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.399891Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:40.657407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.711713Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:40.818557Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70978 paired=1 still_pending=0
2026-05-22T14:01:41.778930Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:01:44.500670Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=5 total_pairs=1410 total_evicted=1751 total_failed=0
2026-05-22T14:01:44.501372Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70977 paired=1 still_pending=0
2026-05-22T14:01:48.194279Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70979 paired=1 still_pending=0
2026-05-22T14:01:54.499913Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=7 pending_frames=5 total_pairs=1412 total_evicted=1752 total_failed=0
2026-05-22T14:01:54.500363Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70981 paired=1 still_pending=0
2026-05-22T14:01:56.424792Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70982 paired=1 still_pending=0
2026-05-22T14:01:58.585572Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70983 paired=1 still_pending=0
2026-05-22T14:01:58.590990Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70984 paired=1 still_pending=0
2026-05-22T14:02:03.051711Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70985 paired=1 still_pending=0
2026-05-22T14:02:03.263726Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:03.569425Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:02:04.966152Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2217 row_id=72719 frame_id=70985
2026-05-22T14:02:04.973484Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70986 paired=1 still_pending=1
2026-05-22T14:02:05.342198Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:02:11.346979Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70987 paired=1 still_pending=0
2026-05-22T14:02:11.734566Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=click)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:02:28.342440Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 3 orphaned chunks
2026-05-22T14:02:59.846501Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=1 pending_frames=3 total_pairs=1420 total_evicted=1763 total_failed=0
2026-05-22T14:02:59.847016Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70988 paired=1 still_pending=0
2026-05-22T14:03:00.715002Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70991 paired=1 still_pending=0
2026-05-22T14:03:03.360204Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70993 paired=1 still_pending=0
2026-05-22T14:03:05.276441Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:05.280948Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1 pending_frames=4 total_pairs=1424 total_evicted=1765 total_failed=0
2026-05-22T14:03:05.487010Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:05.699403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8419801864614017883, trigger=typing_pause)
2026-05-22T14:03:07.792882Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:08.102134Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:08.263284Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70994 paired=1 still_pending=0
2026-05-22T14:03:09.280048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:09.456514Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:10.390422Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:12.326864Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2228 row_id=72730 frame_id=70997
2026-05-22T14:03:12.672763Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.242239Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=1 pending_frames=6 total_pairs=1428 total_evicted=1766 total_failed=0
2026-05-22T14:03:14.242581Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:14.516950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:14.982336Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:03:15.254197Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:15.641431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:16.782568Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=2231 row_id=72733 frame_id=70996
2026-05-22T14:03:17.044189Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5111928977143741995, trigger=typing_pause)
2026-05-22T14:03:17.129796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=typing_pause)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-22T14:03:25.589833Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=70996 paired=1 still_pending=0
2026-05-22T14:04:04.114342Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 105.3ms elapsed (expected 5.3ms) → inserting 99.9ms silence (9594 samples)
2026-05-22T14:04:23.562487Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=24 elapsed=6.035809s
2026-05-22T14:04:23.563187Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-05-22T14:04:25.456799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 3.0MB → 0.5MB (5.5x), 11 JPEGs deleted
2026-05-22T14:04:27.403771Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 2.0MB → 0.3MB (6.7x), 11 JPEGs deleted
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:04:28.780182Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:04:35.965046Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 86.2ms elapsed (expected 5.3ms) → inserting 80.9ms silence (7765 samples)
2026-05-22T14:05:43.730293Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=11 pending_events=0 pending_frames=0 total_pairs=1432 total_evicted=1777 total_failed=0
2026-05-22T14:05:43.731644Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71000 paired=1 still_pending=0
2026-05-22T14:05:44.205677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5111928977143741995, trigger=click)
2026-05-22T14:05:57.318454Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71009 paired=1 still_pending=0
2026-05-22T14:06:03.698525Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71012 paired=1 still_pending=0
2026-05-22T14:06:10.270182Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71015 paired=1 still_pending=0
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:06:29.114609Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:06:37.334224Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71017 paired=1 still_pending=0
2026-05-22T14:06:40.129665Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.2ms elapsed (expected 5.3ms) → inserting 97.9ms silence (9394 samples)
2026-05-22T14:06:40.408940Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 102.4ms elapsed (expected 5.3ms) → inserting 97.0ms silence (9314 samples)
2026-05-22T14:06:46.281326Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_events=0 pending_frames=4 total_pairs=1437 total_evicted=1778 total_failed=0
2026-05-22T14:06:46.281655Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=71019 paired=1 still_pending=0
2026-05-22T14:06:51.746565Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 111.4ms elapsed (expected 5.3ms) → inserting 106.1ms silence (10183 samples)
2026-05-22T14:07:12.279271Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.8ms elapsed (expected 5.3ms) → inserting 80.5ms silence (7727 samples)
2026-05-22T14:07:37.769624Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.7ms elapsed (expected 5.3ms) → inserting 83.4ms silence (8007 samples)
2026-05-22T14:07:37.851834Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 91.8ms elapsed (expected 5.3ms) → inserting 86.4ms silence (8299 samples)
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:08:29.812318Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:09:20.340397Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.8ms elapsed (expected 5.3ms) → inserting 82.4ms silence (7915 samples)
2026-05-22T14:09:33.786926Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=6.384550083s
2026-05-22T14:09:33.789817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-22T14:09:36.927442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 4.4MB → 1.1MB (4.0x), 16 JPEGs deleted
2026-05-22T14:09:39.391281Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.8MB → 0.5MB (4.1x), 10 JPEGs deleted
2026-05-22T14:09:52.214144Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 85.3ms elapsed (expected 5.3ms) → inserting 80.0ms silence (7680 samples)
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-22T14:10:30.304029Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 4 orphaned chunks
2026-05-22T14:12:09.350799Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=13 pending_events=0 pending_frames=0 total_pairs=1438 total_evicted=1791 total_failed=0
2026-05-22T14:12:09.582311Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 88.1ms elapsed (expected 5.3ms) → inserting 82.8ms silence (7947 samples)
2026-05-22T14:12:10.464016Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=118 elapsed=1.079239583s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.5...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71195
|
NULL
|
0
|
2026-05-22T11:29:33.992181+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449373992_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449373992_m1.jpg...
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stop
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stop","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stop","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-1384121224300357177
|
4355975944206429543
|
typing_pause
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stop
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71194
|
NULL
|
0
|
2026-05-22T11:29:32.981695+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449372981_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449372981_m1.jpg...
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-2439992435974113610
|
4355975944206429543
|
typing_pause
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
71193
|
NULL
|
NULL
|
NULL
|
|
71193
|
NULL
|
0
|
2026-05-22T11:29:31.881246+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449371881_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449371881_m1.jpg...
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
5953142842603897926
|
4355975944206429543
|
typing_pause
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71192
|
NULL
|
0
|
2026-05-22T11:29:29.083440+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449369083_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449369083_m1.jpg...
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20\n[2026-05-22 10:31:19] ========================================\n[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20\n[2026-05-22 10:31:19] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (4.0G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.9G)\n Data dir: OK (170 files, 231M)\n\n[+00m06s] ▶ Counting source rows for 2026-05-20\n frames: 5860\n elements: 588259\n ui_events: 4035\n ocr_text: 1351\n meetings: 0\n audio_chunks: 38\n audio_transcriptions: 234\n\n[+00m06s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m07s] ▶ Syncing vision data for 2026-05-20\n video_chunks ✓ 0m01s\n frames (5860 rows) ✓ 1m06s\n ocr_text (1351 rows) ✓ 0m32s\n ui_events (4035 rows) ✓ 0m01s\n elements (588259 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m00s\n\n[+02m25s] ▶ Syncing audio data for 2026-05-20\n audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nsqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_chunks\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_transcriptions\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speakers\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema speaker_embeddings\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".schema audio_tags\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db \".schema audio_chunks\"\nCREATE TABLE audio_chunks(\n id INT,\n file_path TEXT,\n timestamp NUM,\n sync_id TEXT,\n machine_id TEXT,\n synced_at NUM,\n evicted_at NUM\n);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite \".tables\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 8372840\ndrwxr-xr-x 34 lukas staff 1088 22 May 10:35 .\ndrwx------+ 96 lukas staff 3072 21 May 19:48 ..\n-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store\n-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id\n-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight\ndrwxr-xr-x 601 lukas staff 19232 22 May 10:47 data\n-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite\n-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes\n-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log\n-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log\n-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log\n-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log\n-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log\n-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log\n-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log\n-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log\n-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log\n-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log\n-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log\n-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log\n-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log\n-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log\n-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log\n-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log\n-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log\n-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh\n-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk\n-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak\n-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2\ndrwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts\n-rw------- 1 lukas staff 1767 19 May 09:30 store.bin\n-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\" \n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \ndiarization_runs pipe_scheduler_state \ndiarization_segments secrets \nelements speaker_embeddings \nelements_fts speaker_identity_evidence \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_data ui_events_fts_idx \nframes_fts_docsize video_chunks \nframes_fts_idx vision_tags \nmeeting_transcript_segments \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema audio_chunks\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_transcriptions\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speakers\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema speaker_embeddings\" \nsqlite3 ~/.screenpipe/db.sqlite \".schema audio_tags\" \nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT\n NOT NULL DEFAULT 'pending'\n CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER\n NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX idx_audio_chunks_pending_timestamp\n ON audio_chunks(timestamp)\n WHERE transcription_status = 'pending';\nCREATE INDEX idx_audio_chunks_status\n ON audio_chunks(transcription_status);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_speaker_id_timestamp\n ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL,\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE INDEX idx_speaker_embeddings_speaker_id\n ON speaker_embeddings(speaker_id);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
1574809818300579953
|
4355975944206429543
|
click
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-20
[2026-05-22 10:31:19] ========================================
[2026-05-22 10:31:19] Screenpipe sync starting for: 2026-05-20
[2026-05-22 10:31:19] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (4.0G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.9G)
Data dir: OK (170 files, 231M)
[+00m06s] ▶ Counting source rows for 2026-05-20
frames: 5860
elements: 588259
ui_events: 4035
ocr_text: 1351
meetings: 0
audio_chunks: 38
audio_transcriptions: 234
[+00m06s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m07s] ▶ Syncing vision data for 2026-05-20
video_chunks ✓ 0m01s
frames (5860 rows) ✓ 1m06s
ocr_text (1351 rows) ✓ 0m32s
ui_events (4035 rows) ✓ 0m01s
elements (588259 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m00s
[+02m25s] ▶ Syncing audio data for 2026-05-20
audio_chunks (38 rows) ⠋ Parse error near line 3: table nas.audio_chunks has 7 columns but 11 values were supplied
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_chunks"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_transcriptions"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speakers"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema speaker_embeddings"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".schema audio_tags"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 /Volumes/screenpipe/archive.db ".schema audio_chunks"
CREATE TABLE audio_chunks(
id INT,
file_path TEXT,
timestamp NUM,
sync_id TEXT,
machine_id TEXT,
synced_at NUM,
evicted_at NUM
);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sqlite3 ~/.screenpipe/data/db.sqlite ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 8372840
drwxr-xr-x 34 lukas staff 1088 22 May 10:35 .
drwx------+ 96 lukas staff 3072 21 May 19:48 ..
-rw-r--r--@ 1 lukas staff 10244 16 May 16:46 .DS_Store
-rw-r--r--@ 1 lukas staff 37 11 May 20:54 .sync_install_id
-rw-r--r-- 1 lukas staff 5 22 May 10:35 clipboard-read-inflight
drwxr-xr-x 601 lukas staff 19232 22 May 10:47 data
-rw-r--r--@ 1 lukas staff 4265005056 22 May 10:45 db.sqlite
-rw-r--r-- 1 lukas staff 65536 22 May 10:34 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16529472 22 May 10:47 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 10 May 11:39 pipes
-rw-r--r--@ 1 lukas staff 378916 18 May 20:06 prune.log
-rw-r--r-- 1 lukas staff 28408 6 May 21:02 screenpipe.2026-05-06.0.log
-rw-r--r-- 1 lukas staff 566164 7 May 21:50 screenpipe.2026-05-07.0.log
-rw-r--r-- 1 lukas staff 382102 8 May 22:20 screenpipe.2026-05-08.0.log
-rw-r--r-- 1 lukas staff 167023 9 May 23:04 screenpipe.2026-05-09.0.log
-rw-r--r-- 1 lukas staff 88266 10 May 23:51 screenpipe.2026-05-10.0.log
-rw-r--r-- 1 lukas staff 528943 11 May 22:54 screenpipe.2026-05-11.0.log
-rw-r--r-- 1 lukas staff 294131 12 May 21:46 screenpipe.2026-05-12.0.log
-rw-r--r-- 1 lukas staff 449051 13 May 20:51 screenpipe.2026-05-13.0.log
-rw-r--r-- 1 lukas staff 319916 14 May 18:29 screenpipe.2026-05-14.0.log
-rw-r--r-- 1 lukas staff 201533 15 May 14:21 screenpipe.2026-05-15.0.log
-rw-r--r-- 1 lukas staff 24231 16 May 16:08 screenpipe.2026-05-16.0.log
-rw-r--r-- 1 lukas staff 314727 18 May 19:39 screenpipe.2026-05-18.0.log
-rw-r--r-- 1 lukas staff 333223 19 May 18:57 screenpipe.2026-05-19.0.log
-rw-r--r-- 1 lukas staff 287008 20 May 19:32 screenpipe.2026-05-20.0.log
-rw-r--r-- 1 lukas staff 267134 21 May 18:06 screenpipe.2026-05-21.0.log
-rw-r--r-- 1 lukas staff 76308 22 May 10:47 screenpipe.2026-05-22.0.log
-rwxr-xr-x@ 1 lukas staff 18401 12 May 21:28 screenpipe_sync.sh
-rwxr-xr-x@ 1 lukas staff 32005 11 May 20:54 screenpipe_sync.sh-bakk
-rwxr-xr-x@ 1 lukas staff 14994 6 May 20:26 screenpipe_sync.sh.bak
-rwxr-xr-x@ 1 lukas staff 21485 10 May 13:34 screenpipe_sync.sh.bak2
drwxr-xr-x 7 lukas staff 224 18 May 20:01 scripts
-rw------- 1 lukas staff 1767 19 May 09:30 store.bin
-rw-r--r--@ 1 lukas staff 120693 22 May 10:33 sync.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
diarization_runs pipe_scheduler_state
diarization_segments secrets
elements speaker_embeddings
elements_fts speaker_identity_evidence
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_data ui_events_fts_idx
frames_fts_docsize video_chunks
frames_fts_idx vision_tags
meeting_transcript_segments
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema audio_chunks"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_transcriptions"
sqlite3 ~/.screenpipe/db.sqlite ".schema speakers"
sqlite3 ~/.screenpipe/db.sqlite ".schema speaker_embeddings"
sqlite3 ~/.screenpipe/db.sqlite ".schema audio_tags"
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL, transcription_status TEXT
NOT NULL DEFAULT 'pending'
CHECK (transcription_status IN ('pending', 'transcribed', 'silent', 'failed')), transcription_attempts INTEGER
NOT NULL DEFAULT 0, last_transcription_attempt_at TIMESTAMP, transcription_failure_reason TEXT);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX idx_audio_chunks_pending_timestamp
ON audio_chunks(timestamp)
WHERE transcription_status = 'pending';
CREATE INDEX idx_audio_chunks_status
ON audio_chunks(transcription_status);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME, redacted_at INTEGER,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_speaker_id_timestamp
ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX idx_audio_transcriptions_redacted_at ON audio_transcriptions(redacted_at);
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL,
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE INDEX idx_speaker_embeddings_speaker_id
ON speaker_embeddings(speaker_id);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
71191
|
NULL
|
NULL
|
NULL
|
|
71191
|
NULL
|
0
|
2026-05-22T11:29:27.749051+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449367749_m1.jpg...
|
iTerm2
|
APP (-zsh)
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449367749_m1.jpg...
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git pull
remote: Enumerating objects: 445, done.
remote: Counting objects: 100% (265/265), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 445 (delta 214), reused 210 (delta 198), pack-reused 180 (from 2)
Receiving objects: 100% (445/445), 151.54 KiB | 1.43 MiB/s, done.
Resolving deltas: 100% (285/285), completed with 67 local objects.
From github.com:jiminny/app
d3ee1a203b..caba325b1a JY-20915-add-domain-specific-email-text-relay -> origin/JY-20915-add-domain-specific-email-text-relay
32cf0db4fb..8960f61b14 JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
4642fad114..168f64052c JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall
4f15440265..f2221ddb54 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
* [new branch] JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app
3eb70f7a73..a968dd2968 JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
6fa3fead5a..3347ccc179 JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
+ 1ac8a06aed...847efe844f JY-20853-mcp-seach_calls -> origin/JY-20853-mcp-seach_calls (forced update)
* [new branch] JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings
* [new branch] JY-20947-twilio-video-downloads -> origin/JY-20947-twilio-video-downloads
71b36decb6..6818adf8e2 master -> origin/master
Updating d3ee1a203b..caba325b1a
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++---
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 ++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++----
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++-----
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++-
app/Component/ES/QueuePriorityEnum.php | 40 ++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++---
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 ++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/DTO/Invitation/UserInvitationDTO.php | 8 +-
app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +++
app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +
app/Services/Activity/RingCentral/Service.php | 38 +++++++--
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 +++++++++----
app/Services/RecallAI/RecallAIService.php | 11 +++
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++++++++----
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 ++++
tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++++++++++++++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++-
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++-----------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 ++-
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++---
tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++
29 files changed, 1009 insertions(+), 218 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5692/5692 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
1) tests/Unit/Notifications/Activities/SmsReceivedTest.php (no_unused_imports)
---------- begin diff ----------
--- /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php
+++ /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php
@@ -5,14 +5,11 @@
namespace Tests\Unit\Notifications\Activities;
use Illuminate\Support\Facades\Config;
-use Jiminny\Mail\Activities\SmsReceived as SmsMailable;
use Jiminny\Models\Activity;
use Jiminny\Notifications\Activities\SmsReceived;
use Mockery;
use PHPUnit\Framework\Attributes\CoversClass;
-use ReflectionClass;
use Tests\TestCase;
-use Vinkla\Hashids\Facades\Hashids;
#[CoversClass(SmsReceived::class)]
class SmsReceivedTest extends TestCase
----------- end diff -----------
2) tests/Unit/Services/Mail/TextRelayServiceTest.php (new_with_parentheses, class_definition, function_declaration)
---------- begin diff ----------
--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php
+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php
@@ -198,7 +198,7 @@
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
- \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn($expires) => $expires instanceof \Carbon\Carbon));
+ \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
@@ -229,7 +229,7 @@
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
- \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn($expires) => $expires instanceof \Carbon\Carbon));
+ \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
@@ -242,7 +242,7 @@
private function createTextRelayService(): TextRelayService
{
- $service = new class extends TextRelayService {
+ $service = new class () extends TextRelayService {
public function __construct()
{
}
----------- end diff -----------
Fixed 2 of 5692 files in 39.611 seconds, 67.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 1461, done.
remote: Counting objects: 100% (841/841), done.
remote: Compressing objects: 100% (257/257), done.
remote: Total 1461 (delta 668), reused 660 (delta 582), pack-reused 620 (from 2)
Receiving objects: 100% (1461/1461), 500.16 KiB | 1.42 MiB/s, done.
Resolving deltas: 100% (963/963), completed with 95 local objects.
From github.com:jiminny/app
6818adf8e2..1aee7aad9a master -> origin/master
8960f61b14..d84274dbaa JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
168f64052c..8fafc5d81d JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall
* [new branch] JY-20664-customer-api-exec-reports -> origin/JY-20664-customer-api-exec-reports
+ a77c52000f...a9a392e002 JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app (forced update)
* [new branch] JY-20828-user-can-manage-desktop-recording-permissions -> origin/JY-20828-user-can-manage-desktop-recording-permissions
3347ccc179..180e5a963d JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
* [new branch] JY-20842-add-delete-events-for-es -> origin/JY-20842-add-delete-events-for-es
729a39244d..39e950a69f JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
+ 950f93a88b...e3b34108d9 JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings (forced update)
* [new branch] JY-20955-multiple-calendars-events -> origin/JY-20955-multiple-calendars-events
* [new branch] secfix/npm-20260522 -> origin/secfix/npm-20260522
Updating 177ea29b8d..1aee7aad9a
Fast-forward
.github/claude-reviewer/no-ticket-warning.txt | 8 +
.github/claude-reviewer/scripts/fetch-jira-context.mjs | 120 ++++++
.github/workflows/claude.yml | 72 +++-
.github/workflows/secfix.yml | 2 +-
app/Component/AskAnything/AskAnythingPromptService.php | 10 +-
app/Component/AskAnything/Dtos/AskAnythingPromptDto.php | 5 +
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +-
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/BatchStatusInterface.php | 48 ---
app/Component/ES/Processor/BatchStatusManager.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 69 +++-
app/Component/ES/Processor/RedisEntityExtractor.php | 25 ++
app/Component/ES/Processor/TargetEntitiesSelector.php | 144 +++++--
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 38 +-
app/Component/ES/Processor/Traits/WorkerIdTrait.php | 15 -
app/Component/ES/QueuePriorityEnum.php | 43 ++
app/Component/ES/UpdateProcessManager.php | 102 ++---
app/Component/Transcription/Service/TranscriptionService.php | 24 +-
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 28 +-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 28 +-
app/DTO/Invitation/UserInvitationDTO.php | 8 +-
app/Http/Controllers/API/ActivityController.php | 11 +-
app/Http/Controllers/API/V2/AskJiminnyReportsController.php | 2 +
app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +
app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +
app/Http/Transformers/SearchTransformer.php | 1 +
app/Jobs/Activity/Import/DownloadTrack.php | 8 +-
app/Models/AskAnything/AskAnythingPrompt.php | 9 +
app/Notifications/Activities/SmsReceived.php | 6 +-
app/Providers/JiminnyServiceProvider.php | 6 -
app/Repositories/AskAnythingRepository.php | 8 +-
app/Services/Activity/RingCentral/Service.php | 38 +-
app/Services/Activity/Salesforce/Service.php | 5 -
app/Services/Activity/TwilioVideo/Service.php | 26 +-
app/Services/Kiosk/AutomatedReports/AutomatedReportsService.php | 7 +
app/Services/Mail/Office/EmailApiClient.php | 78 +++-
app/Services/Mail/TextRelayService.php | 33 ++
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++-
app/Services/RecallAI/RecallAIService.php | 11 +
front-end/src/components/AiReports/Manage/useReportsGrid.js | 5 +-
front-end/src/components/DealInsights/Modals/AskAnythingModal.vue | 30 ++
front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js | 71 ++++
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++-
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 +
front-end/src/components/playback/Framework/FrameworksTab.vue | 22 +-
front-end/src/components/shared/AskAnything/AskAnythingPromptFormItem.vue | 2 +
front-end/src/components/shared/AskAnything/AskAnythingSettingsDrawer.vue | 23 +-
front-end/src/components/shared/AskAnything/__mocks__/AskAnythingSettingsDrawer.mocks.js | 1 +
front-end/src/components/shared/AskAnything/__tests__/AskAnythingSettingsDrawer.spec.js | 139 ++++---
front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html | 1235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap | 1382 ---------------------------------------------------------------
front-end/src/components/shared/AskAnything/prompts.js | 1 +
front-end/src/components/shared/AskAnything/useAskAnything.js | 1 +
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 ++-
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++-
front-end/src/store/modules/playback/mutations.js | 1 +
tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++-
tests/Unit/Component/AskAnything/AskAnythingPromptServiceTest.php | 37 +-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +-
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +-
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 144 ++++---
tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php | 106 +++++
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 438 +++++++++++++++-----
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 43 +-
tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php | 23 --
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 64 +++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 102 +++--
tests/Unit/Component/Transcription/Service/TranscriptionServiceTest.php | 31 +-
tests/Unit/Notifications/Activities/SmsReceivedTest.php | 50 +++
tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++-
tests/Unit/Services/Activity/TwilioVideo/ServiceTest.php | 67 +++-
tests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.php ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git pull\nremote: Enumerating objects: 445, done.\nremote: Counting objects: 100% (265/265), done.\nremote: Compressing objects: 100% (64/64), done.\nremote: Total 445 (delta 214), reused 210 (delta 198), pack-reused 180 (from 2)\nReceiving objects: 100% (445/445), 151.54 KiB | 1.43 MiB/s, done.\nResolving deltas: 100% (285/285), completed with 67 local objects.\nFrom github.com:jiminny/app\n d3ee1a203b..caba325b1a JY-20915-add-domain-specific-email-text-relay -> origin/JY-20915-add-domain-specific-email-text-relay\n 32cf0db4fb..8960f61b14 JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 4642fad114..168f64052c JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall\n 4f15440265..f2221ddb54 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n * [new branch] JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app\n 3eb70f7a73..a968dd2968 JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n 6fa3fead5a..3347ccc179 JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n + 1ac8a06aed...847efe844f JY-20853-mcp-seach_calls -> origin/JY-20853-mcp-seach_calls (forced update)\n * [new branch] JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings\n * [new branch] JY-20947-twilio-video-downloads -> origin/JY-20947-twilio-video-downloads\n 71b36decb6..6818adf8e2 master -> origin/master\nUpdating d3ee1a203b..caba325b1a\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++---\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 ++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++----\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++-----\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++-\n app/Component/ES/QueuePriorityEnum.php | 40 ++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++---\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 ++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/DTO/Invitation/UserInvitationDTO.php | 8 +-\n app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +++\n app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +\n app/Services/Activity/RingCentral/Service.php | 38 +++++++--\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 +++++++++----\n app/Services/RecallAI/RecallAIService.php | 11 +++\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++++++++----\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 ++++\n tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++++++++++++++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++-\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++-----------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 ++-\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++---\n tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++\n 29 files changed, 1009 insertions(+), 218 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nfailed to connect to the docker API at unix:///Users/lukas/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/lukas/.docker/run/docker.sock: connect: no such file or directory\nmake: *** [cs-fix] Error 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5692/5692 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Notifications/Activities/SmsReceivedTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php\n+++ /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php\n@@ -5,14 +5,11 @@\n namespace Tests\\Unit\\Notifications\\Activities;\n \n use Illuminate\\Support\\Facades\\Config;\n-use Jiminny\\Mail\\Activities\\SmsReceived as SmsMailable;\n use Jiminny\\Models\\Activity;\n use Jiminny\\Notifications\\Activities\\SmsReceived;\n use Mockery;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n-use ReflectionClass;\n use Tests\\TestCase;\n-use Vinkla\\Hashids\\Facades\\Hashids;\n \n #[CoversClass(SmsReceived::class)]\n class SmsReceivedTest extends TestCase\n\n ----------- end diff -----------\n\n 2) tests/Unit/Services/Mail/TextRelayServiceTest.php (new_with_parentheses, class_definition, function_declaration)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -198,7 +198,7 @@\n $gmailService->users_history = $usersHistory;\n \n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n- \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn($expires) => $expires instanceof \\Carbon\\Carbon));\n+ \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n \n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n@@ -229,7 +229,7 @@\n $gmailService->users_history = $usersHistory;\n \n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n- \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn($expires) => $expires instanceof \\Carbon\\Carbon));\n+ \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n \n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n@@ -242,7 +242,7 @@\n \n private function createTextRelayService(): TextRelayService\n {\n- $service = new class extends TextRelayService {\n+ $service = new class () extends TextRelayService {\n public function __construct()\n {\n }\n\n ----------- end diff -----------\n\n\nFixed 2 of 5692 files in 39.611 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch master\nYour branch is behind 'origin/master' by 74 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Salesforce/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 1461, done.\nremote: Counting objects: 100% (841/841), done.\nremote: Compressing objects: 100% (257/257), done.\nremote: Total 1461 (delta 668), reused 660 (delta 582), pack-reused 620 (from 2)\nReceiving objects: 100% (1461/1461), 500.16 KiB | 1.42 MiB/s, done.\nResolving deltas: 100% (963/963), completed with 95 local objects.\nFrom github.com:jiminny/app\n 6818adf8e2..1aee7aad9a master -> origin/master\n 8960f61b14..d84274dbaa JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 168f64052c..8fafc5d81d JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall\n * [new branch] JY-20664-customer-api-exec-reports -> origin/JY-20664-customer-api-exec-reports\n + a77c52000f...a9a392e002 JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app (forced update)\n * [new branch] JY-20828-user-can-manage-desktop-recording-permissions -> origin/JY-20828-user-can-manage-desktop-recording-permissions\n 3347ccc179..180e5a963d JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n * [new branch] JY-20842-add-delete-events-for-es -> origin/JY-20842-add-delete-events-for-es\n 729a39244d..39e950a69f JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n + 950f93a88b...e3b34108d9 JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings (forced update)\n * [new branch] JY-20955-multiple-calendars-events -> origin/JY-20955-multiple-calendars-events\n * [new branch] secfix/npm-20260522 -> origin/secfix/npm-20260522\nUpdating 177ea29b8d..1aee7aad9a\nFast-forward\n .github/claude-reviewer/no-ticket-warning.txt | 8 +\n .github/claude-reviewer/scripts/fetch-jira-context.mjs | 120 ++++++\n .github/workflows/claude.yml | 72 +++-\n .github/workflows/secfix.yml | 2 +-\n app/Component/AskAnything/AskAnythingPromptService.php | 10 +-\n app/Component/AskAnything/Dtos/AskAnythingPromptDto.php | 5 +\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +-\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/BatchStatusInterface.php | 48 ---\n app/Component/ES/Processor/BatchStatusManager.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 69 +++-\n app/Component/ES/Processor/RedisEntityExtractor.php | 25 ++\n app/Component/ES/Processor/TargetEntitiesSelector.php | 144 +++++--\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 38 +-\n app/Component/ES/Processor/Traits/WorkerIdTrait.php | 15 -\n app/Component/ES/QueuePriorityEnum.php | 43 ++\n app/Component/ES/UpdateProcessManager.php | 102 ++---\n app/Component/Transcription/Service/TranscriptionService.php | 24 +-\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 28 +-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 28 +-\n app/DTO/Invitation/UserInvitationDTO.php | 8 +-\n app/Http/Controllers/API/ActivityController.php | 11 +-\n app/Http/Controllers/API/V2/AskJiminnyReportsController.php | 2 +\n app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +\n app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +\n app/Http/Transformers/SearchTransformer.php | 1 +\n app/Jobs/Activity/Import/DownloadTrack.php | 8 +-\n app/Models/AskAnything/AskAnythingPrompt.php | 9 +\n app/Notifications/Activities/SmsReceived.php | 6 +-\n app/Providers/JiminnyServiceProvider.php | 6 -\n app/Repositories/AskAnythingRepository.php | 8 +-\n app/Services/Activity/RingCentral/Service.php | 38 +-\n app/Services/Activity/Salesforce/Service.php | 5 -\n app/Services/Activity/TwilioVideo/Service.php | 26 +-\n app/Services/Kiosk/AutomatedReports/AutomatedReportsService.php | 7 +\n app/Services/Mail/Office/EmailApiClient.php | 78 +++-\n app/Services/Mail/TextRelayService.php | 33 ++\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++-\n app/Services/RecallAI/RecallAIService.php | 11 +\n front-end/src/components/AiReports/Manage/useReportsGrid.js | 5 +-\n front-end/src/components/DealInsights/Modals/AskAnythingModal.vue | 30 ++\n front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js | 71 ++++\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++-\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 +\n front-end/src/components/playback/Framework/FrameworksTab.vue | 22 +-\n front-end/src/components/shared/AskAnything/AskAnythingPromptFormItem.vue | 2 +\n front-end/src/components/shared/AskAnything/AskAnythingSettingsDrawer.vue | 23 +-\n front-end/src/components/shared/AskAnything/__mocks__/AskAnythingSettingsDrawer.mocks.js | 1 +\n front-end/src/components/shared/AskAnything/__tests__/AskAnythingSettingsDrawer.spec.js | 139 ++++---\n front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html | 1235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap | 1382 ---------------------------------------------------------------\n front-end/src/components/shared/AskAnything/prompts.js | 1 +\n front-end/src/components/shared/AskAnything/useAskAnything.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 ++-\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++-\n front-end/src/store/modules/playback/mutations.js | 1 +\n tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++-\n tests/Unit/Component/AskAnything/AskAnythingPromptServiceTest.php | 37 +-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +-\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +-\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 144 ++++---\n tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php | 106 +++++\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 438 +++++++++++++++-----\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 43 +-\n tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php | 23 --\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 64 +++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 102 +++--\n tests/Unit/Component/Transcription/Service/TranscriptionServiceTest.php | 31 +-\n tests/Unit/Notifications/Activities/SmsReceivedTest.php | 50 +++\n tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++-\n tests/Unit/Services/Activity/TwilioVideo/ServiceTest.php | 67 +++-\n tests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.php | 24 +-\n tests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.php | 73 +++-\n tests/Unit/Services/Mail/Office/EmailApiClientTest.php | 86 +++-\n tests/Unit/Services/Mail/TextRelayServiceTest.php | 254 ++++++++++++\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++\n 79 files changed, 4254 insertions(+), 2020 deletions(-)\n create mode 100644 .github/claude-reviewer/no-ticket-warning.txt\n create mode 100644 .github/claude-reviewer/scripts/fetch-jira-context.mjs\n delete mode 100644 app/Component/ES/Processor/BatchStatusInterface.php\n create mode 100644 app/Component/ES/Processor/RedisEntityExtractor.php\n delete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTrait.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js\n create mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html\n delete mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap\n create mode 100644 tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php\n delete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.php\n create mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20963-fix-import-on-deleted-entity\nSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nfailed to connect to the docker API at unix:///Users/lukas/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/lukas/.docker/run/docker.sock: connect: no such file or directory\nmake: *** [cs-fix] Error 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5691/5691 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5691 files in 96.077 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git pull\nremote: Enumerating objects: 445, done.\nremote: Counting objects: 100% (265/265), done.\nremote: Compressing objects: 100% (64/64), done.\nremote: Total 445 (delta 214), reused 210 (delta 198), pack-reused 180 (from 2)\nReceiving objects: 100% (445/445), 151.54 KiB | 1.43 MiB/s, done.\nResolving deltas: 100% (285/285), completed with 67 local objects.\nFrom github.com:jiminny/app\n d3ee1a203b..caba325b1a JY-20915-add-domain-specific-email-text-relay -> origin/JY-20915-add-domain-specific-email-text-relay\n 32cf0db4fb..8960f61b14 JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 4642fad114..168f64052c JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall\n 4f15440265..f2221ddb54 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n * [new branch] JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app\n 3eb70f7a73..a968dd2968 JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n 6fa3fead5a..3347ccc179 JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n + 1ac8a06aed...847efe844f JY-20853-mcp-seach_calls -> origin/JY-20853-mcp-seach_calls (forced update)\n * [new branch] JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings\n * [new branch] JY-20947-twilio-video-downloads -> origin/JY-20947-twilio-video-downloads\n 71b36decb6..6818adf8e2 master -> origin/master\nUpdating d3ee1a203b..caba325b1a\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++---\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 ++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++----\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++-----\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++-\n app/Component/ES/QueuePriorityEnum.php | 40 ++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++---\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 ++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/DTO/Invitation/UserInvitationDTO.php | 8 +-\n app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +++\n app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +\n app/Services/Activity/RingCentral/Service.php | 38 +++++++--\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 +++++++++----\n app/Services/RecallAI/RecallAIService.php | 11 +++\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++++++++----\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 ++++\n tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++++++++++++++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++-\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++-----------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 ++-\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++---\n tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++\n 29 files changed, 1009 insertions(+), 218 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nfailed to connect to the docker API at unix:///Users/lukas/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/lukas/.docker/run/docker.sock: connect: no such file or directory\nmake: *** [cs-fix] Error 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5692/5692 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Notifications/Activities/SmsReceivedTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php\n+++ /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php\n@@ -5,14 +5,11 @@\n namespace Tests\\Unit\\Notifications\\Activities;\n \n use Illuminate\\Support\\Facades\\Config;\n-use Jiminny\\Mail\\Activities\\SmsReceived as SmsMailable;\n use Jiminny\\Models\\Activity;\n use Jiminny\\Notifications\\Activities\\SmsReceived;\n use Mockery;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n-use ReflectionClass;\n use Tests\\TestCase;\n-use Vinkla\\Hashids\\Facades\\Hashids;\n \n #[CoversClass(SmsReceived::class)]\n class SmsReceivedTest extends TestCase\n\n ----------- end diff -----------\n\n 2) tests/Unit/Services/Mail/TextRelayServiceTest.php (new_with_parentheses, class_definition, function_declaration)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -198,7 +198,7 @@\n $gmailService->users_history = $usersHistory;\n \n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n- \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn($expires) => $expires instanceof \\Carbon\\Carbon));\n+ \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n \n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n@@ -229,7 +229,7 @@\n $gmailService->users_history = $usersHistory;\n \n \\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);\n- \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn($expires) => $expires instanceof \\Carbon\\Carbon));\n+ \\Cache::shouldReceive('put')->with('test-topic', 12345, \\Mockery::on(fn ($expires) => $expires instanceof \\Carbon\\Carbon));\n \n $reflection = new ReflectionClass($service);\n $syncMethod = $reflection->getMethod('sync');\n@@ -242,7 +242,7 @@\n \n private function createTextRelayService(): TextRelayService\n {\n- $service = new class extends TextRelayService {\n+ $service = new class () extends TextRelayService {\n public function __construct()\n {\n }\n\n ----------- end diff -----------\n\n\nFixed 2 of 5692 files in 39.611 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch master\nYour branch is behind 'origin/master' by 74 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Salesforce/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 1461, done.\nremote: Counting objects: 100% (841/841), done.\nremote: Compressing objects: 100% (257/257), done.\nremote: Total 1461 (delta 668), reused 660 (delta 582), pack-reused 620 (from 2)\nReceiving objects: 100% (1461/1461), 500.16 KiB | 1.42 MiB/s, done.\nResolving deltas: 100% (963/963), completed with 95 local objects.\nFrom github.com:jiminny/app\n 6818adf8e2..1aee7aad9a master -> origin/master\n 8960f61b14..d84274dbaa JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 168f64052c..8fafc5d81d JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall\n * [new branch] JY-20664-customer-api-exec-reports -> origin/JY-20664-customer-api-exec-reports\n + a77c52000f...a9a392e002 JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app (forced update)\n * [new branch] JY-20828-user-can-manage-desktop-recording-permissions -> origin/JY-20828-user-can-manage-desktop-recording-permissions\n 3347ccc179..180e5a963d JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n * [new branch] JY-20842-add-delete-events-for-es -> origin/JY-20842-add-delete-events-for-es\n 729a39244d..39e950a69f JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n + 950f93a88b...e3b34108d9 JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings (forced update)\n * [new branch] JY-20955-multiple-calendars-events -> origin/JY-20955-multiple-calendars-events\n * [new branch] secfix/npm-20260522 -> origin/secfix/npm-20260522\nUpdating 177ea29b8d..1aee7aad9a\nFast-forward\n .github/claude-reviewer/no-ticket-warning.txt | 8 +\n .github/claude-reviewer/scripts/fetch-jira-context.mjs | 120 ++++++\n .github/workflows/claude.yml | 72 +++-\n .github/workflows/secfix.yml | 2 +-\n app/Component/AskAnything/AskAnythingPromptService.php | 10 +-\n app/Component/AskAnything/Dtos/AskAnythingPromptDto.php | 5 +\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +-\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/BatchStatusInterface.php | 48 ---\n app/Component/ES/Processor/BatchStatusManager.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 69 +++-\n app/Component/ES/Processor/RedisEntityExtractor.php | 25 ++\n app/Component/ES/Processor/TargetEntitiesSelector.php | 144 +++++--\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 38 +-\n app/Component/ES/Processor/Traits/WorkerIdTrait.php | 15 -\n app/Component/ES/QueuePriorityEnum.php | 43 ++\n app/Component/ES/UpdateProcessManager.php | 102 ++---\n app/Component/Transcription/Service/TranscriptionService.php | 24 +-\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 28 +-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 28 +-\n app/DTO/Invitation/UserInvitationDTO.php | 8 +-\n app/Http/Controllers/API/ActivityController.php | 11 +-\n app/Http/Controllers/API/V2/AskJiminnyReportsController.php | 2 +\n app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +\n app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +\n app/Http/Transformers/SearchTransformer.php | 1 +\n app/Jobs/Activity/Import/DownloadTrack.php | 8 +-\n app/Models/AskAnything/AskAnythingPrompt.php | 9 +\n app/Notifications/Activities/SmsReceived.php | 6 +-\n app/Providers/JiminnyServiceProvider.php | 6 -\n app/Repositories/AskAnythingRepository.php | 8 +-\n app/Services/Activity/RingCentral/Service.php | 38 +-\n app/Services/Activity/Salesforce/Service.php | 5 -\n app/Services/Activity/TwilioVideo/Service.php | 26 +-\n app/Services/Kiosk/AutomatedReports/AutomatedReportsService.php | 7 +\n app/Services/Mail/Office/EmailApiClient.php | 78 +++-\n app/Services/Mail/TextRelayService.php | 33 ++\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++-\n app/Services/RecallAI/RecallAIService.php | 11 +\n front-end/src/components/AiReports/Manage/useReportsGrid.js | 5 +-\n front-end/src/components/DealInsights/Modals/AskAnythingModal.vue | 30 ++\n front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js | 71 ++++\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++-\n front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 +\n front-end/src/components/playback/Framework/FrameworksTab.vue | 22 +-\n front-end/src/components/shared/AskAnything/AskAnythingPromptFormItem.vue | 2 +\n front-end/src/components/shared/AskAnything/AskAnythingSettingsDrawer.vue | 23 +-\n front-end/src/components/shared/AskAnything/__mocks__/AskAnythingSettingsDrawer.mocks.js | 1 +\n front-end/src/components/shared/AskAnything/__tests__/AskAnythingSettingsDrawer.spec.js | 139 ++++---\n front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html | 1235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap | 1382 ---------------------------------------------------------------\n front-end/src/components/shared/AskAnything/prompts.js | 1 +\n front-end/src/components/shared/AskAnything/useAskAnything.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 ++-\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++-\n front-end/src/store/modules/playback/mutations.js | 1 +\n tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++-\n tests/Unit/Component/AskAnything/AskAnythingPromptServiceTest.php | 37 +-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +-\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +-\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 144 ++++---\n tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php | 106 +++++\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 438 +++++++++++++++-----\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 43 +-\n tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php | 23 --\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 64 +++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 102 +++--\n tests/Unit/Component/Transcription/Service/TranscriptionServiceTest.php | 31 +-\n tests/Unit/Notifications/Activities/SmsReceivedTest.php | 50 +++\n tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++-\n tests/Unit/Services/Activity/TwilioVideo/ServiceTest.php | 67 +++-\n tests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.php | 24 +-\n tests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.php | 73 +++-\n tests/Unit/Services/Mail/Office/EmailApiClientTest.php | 86 +++-\n tests/Unit/Services/Mail/TextRelayServiceTest.php | 254 ++++++++++++\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++\n 79 files changed, 4254 insertions(+), 2020 deletions(-)\n create mode 100644 .github/claude-reviewer/no-ticket-warning.txt\n create mode 100644 .github/claude-reviewer/scripts/fetch-jira-context.mjs\n delete mode 100644 app/Component/ES/Processor/BatchStatusInterface.php\n create mode 100644 app/Component/ES/Processor/RedisEntityExtractor.php\n delete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTrait.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js\n create mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html\n delete mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap\n create mode 100644 tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php\n delete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.php\n create mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20963-fix-import-on-deleted-entity\nSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nfailed to connect to the docker API at unix:///Users/lukas/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/lukas/.docker/run/docker.sock: connect: no such file or directory\nmake: *** [cs-fix] Error 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5691/5691 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5691 files in 96.077 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entity) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"APP (-zsh)","depth":1,"bounds":{"left":0.47291666,"top":0.033333335,"width":0.05138889,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
6301176414030891772
|
-824167416439362820
|
visual_change
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git pull
remote: Enumerating objects: 445, done.
remote: Counting objects: 100% (265/265), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 445 (delta 214), reused 210 (delta 198), pack-reused 180 (from 2)
Receiving objects: 100% (445/445), 151.54 KiB | 1.43 MiB/s, done.
Resolving deltas: 100% (285/285), completed with 67 local objects.
From github.com:jiminny/app
d3ee1a203b..caba325b1a JY-20915-add-domain-specific-email-text-relay -> origin/JY-20915-add-domain-specific-email-text-relay
32cf0db4fb..8960f61b14 JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
4642fad114..168f64052c JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall
4f15440265..f2221ddb54 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
* [new branch] JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app
3eb70f7a73..a968dd2968 JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
6fa3fead5a..3347ccc179 JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
+ 1ac8a06aed...847efe844f JY-20853-mcp-seach_calls -> origin/JY-20853-mcp-seach_calls (forced update)
* [new branch] JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings
* [new branch] JY-20947-twilio-video-downloads -> origin/JY-20947-twilio-video-downloads
71b36decb6..6818adf8e2 master -> origin/master
Updating d3ee1a203b..caba325b1a
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++---
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 ++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++----
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++-----
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++-
app/Component/ES/QueuePriorityEnum.php | 40 ++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++---
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 ++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/DTO/Invitation/UserInvitationDTO.php | 8 +-
app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +++
app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +
app/Services/Activity/RingCentral/Service.php | 38 +++++++--
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 +++++++++----
app/Services/RecallAI/RecallAIService.php | 11 +++
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++++++++----
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 ++++
tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++++++++++++++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++-
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++-----------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 ++-
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++---
tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++
29 files changed, 1009 insertions(+), 218 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5692/5692 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
1) tests/Unit/Notifications/Activities/SmsReceivedTest.php (no_unused_imports)
---------- begin diff ----------
--- /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php
+++ /home/jiminny/tests/Unit/Notifications/Activities/SmsReceivedTest.php
@@ -5,14 +5,11 @@
namespace Tests\Unit\Notifications\Activities;
use Illuminate\Support\Facades\Config;
-use Jiminny\Mail\Activities\SmsReceived as SmsMailable;
use Jiminny\Models\Activity;
use Jiminny\Notifications\Activities\SmsReceived;
use Mockery;
use PHPUnit\Framework\Attributes\CoversClass;
-use ReflectionClass;
use Tests\TestCase;
-use Vinkla\Hashids\Facades\Hashids;
#[CoversClass(SmsReceived::class)]
class SmsReceivedTest extends TestCase
----------- end diff -----------
2) tests/Unit/Services/Mail/TextRelayServiceTest.php (new_with_parentheses, class_definition, function_declaration)
---------- begin diff ----------
--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php
+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php
@@ -198,7 +198,7 @@
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
- \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn($expires) => $expires instanceof \Carbon\Carbon));
+ \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
@@ -229,7 +229,7 @@
$gmailService->users_history = $usersHistory;
\Cache::shouldReceive('get')->with('test-topic')->andReturn(10000);
- \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn($expires) => $expires instanceof \Carbon\Carbon));
+ \Cache::shouldReceive('put')->with('test-topic', 12345, \Mockery::on(fn ($expires) => $expires instanceof \Carbon\Carbon));
$reflection = new ReflectionClass($service);
$syncMethod = $reflection->getMethod('sync');
@@ -242,7 +242,7 @@
private function createTextRelayService(): TextRelayService
{
- $service = new class extends TextRelayService {
+ $service = new class () extends TextRelayService {
public function __construct()
{
}
----------- end diff -----------
Fixed 2 of 5692 files in 39.611 seconds, 67.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 1461, done.
remote: Counting objects: 100% (841/841), done.
remote: Compressing objects: 100% (257/257), done.
remote: Total 1461 (delta 668), reused 660 (delta 582), pack-reused 620 (from 2)
Receiving objects: 100% (1461/1461), 500.16 KiB | 1.42 MiB/s, done.
Resolving deltas: 100% (963/963), completed with 95 local objects.
From github.com:jiminny/app
6818adf8e2..1aee7aad9a master -> origin/master
8960f61b14..d84274dbaa JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
168f64052c..8fafc5d81d JY-20606-desktop-app-recall -> origin/JY-20606-desktop-app-recall
* [new branch] JY-20664-customer-api-exec-reports -> origin/JY-20664-customer-api-exec-reports
+ a77c52000f...a9a392e002 JY-20741-user-can-log-in-access-the-desktop-app -> origin/JY-20741-user-can-log-in-access-the-desktop-app (forced update)
* [new branch] JY-20828-user-can-manage-desktop-recording-permissions -> origin/JY-20828-user-can-manage-desktop-recording-permissions
3347ccc179..180e5a963d JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
* [new branch] JY-20842-add-delete-events-for-es -> origin/JY-20842-add-delete-events-for-es
729a39244d..39e950a69f JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
+ 950f93a88b...e3b34108d9 JY-20855-mcp-ES-mappings -> origin/JY-20855-mcp-ES-mappings (forced update)
* [new branch] JY-20955-multiple-calendars-events -> origin/JY-20955-multiple-calendars-events
* [new branch] secfix/npm-20260522 -> origin/secfix/npm-20260522
Updating 177ea29b8d..1aee7aad9a
Fast-forward
.github/claude-reviewer/no-ticket-warning.txt | 8 +
.github/claude-reviewer/scripts/fetch-jira-context.mjs | 120 ++++++
.github/workflows/claude.yml | 72 +++-
.github/workflows/secfix.yml | 2 +-
app/Component/AskAnything/AskAnythingPromptService.php | 10 +-
app/Component/AskAnything/Dtos/AskAnythingPromptDto.php | 5 +
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +-
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/BatchStatusInterface.php | 48 ---
app/Component/ES/Processor/BatchStatusManager.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 69 +++-
app/Component/ES/Processor/RedisEntityExtractor.php | 25 ++
app/Component/ES/Processor/TargetEntitiesSelector.php | 144 +++++--
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 38 +-
app/Component/ES/Processor/Traits/WorkerIdTrait.php | 15 -
app/Component/ES/QueuePriorityEnum.php | 43 ++
app/Component/ES/UpdateProcessManager.php | 102 ++---
app/Component/Transcription/Service/TranscriptionService.php | 24 +-
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 28 +-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 28 +-
app/DTO/Invitation/UserInvitationDTO.php | 8 +-
app/Http/Controllers/API/ActivityController.php | 11 +-
app/Http/Controllers/API/V2/AskJiminnyReportsController.php | 2 +
app/Http/Requests/Settings/Teams/CreateTeamRequest.php | 12 +
app/Http/Requests/Settings/Teams/EditTeamRequest.php | 1 +
app/Http/Transformers/SearchTransformer.php | 1 +
app/Jobs/Activity/Import/DownloadTrack.php | 8 +-
app/Models/AskAnything/AskAnythingPrompt.php | 9 +
app/Notifications/Activities/SmsReceived.php | 6 +-
app/Providers/JiminnyServiceProvider.php | 6 -
app/Repositories/AskAnythingRepository.php | 8 +-
app/Services/Activity/RingCentral/Service.php | 38 +-
app/Services/Activity/Salesforce/Service.php | 5 -
app/Services/Activity/TwilioVideo/Service.php | 26 +-
app/Services/Kiosk/AutomatedReports/AutomatedReportsService.php | 7 +
app/Services/Mail/Office/EmailApiClient.php | 78 +++-
app/Services/Mail/TextRelayService.php | 33 ++
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++-
app/Services/RecallAI/RecallAIService.php | 11 +
front-end/src/components/AiReports/Manage/useReportsGrid.js | 5 +-
front-end/src/components/DealInsights/Modals/AskAnythingModal.vue | 30 ++
front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModal.spec.js | 71 ++++
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/EditTeamModal.vue | 51 ++-
front-end/src/components/Settings/Kiosk/modals/EditTeamModal/__tests__/EditTeamModal.spec.js | 14 +
front-end/src/components/playback/Framework/FrameworksTab.vue | 22 +-
front-end/src/components/shared/AskAnything/AskAnythingPromptFormItem.vue | 2 +
front-end/src/components/shared/AskAnything/AskAnythingSettingsDrawer.vue | 23 +-
front-end/src/components/shared/AskAnything/__mocks__/AskAnythingSettingsDrawer.mocks.js | 1 +
front-end/src/components/shared/AskAnything/__tests__/AskAnythingSettingsDrawer.spec.js | 139 ++++---
front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.html | 1235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
front-end/src/components/shared/AskAnything/__tests__/__snapshots__/AskAnythingSettingsDrawer.spec.js.snap | 1382 ---------------------------------------------------------------
front-end/src/components/shared/AskAnything/prompts.js | 1 +
front-end/src/components/shared/AskAnything/useAskAnything.js | 1 +
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 ++-
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++-
front-end/src/store/modules/playback/mutations.js | 1 +
tests/Feature/DTO/UserInvitationDTOTest.php | 65 ++-
tests/Unit/Component/AskAnything/AskAnythingPromptServiceTest.php | 37 +-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +-
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +-
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 144 ++++---
tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.php | 106 +++++
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 438 +++++++++++++++-----
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 43 +-
tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.php | 23 --
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 64 +++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 102 +++--
tests/Unit/Component/Transcription/Service/TranscriptionServiceTest.php | 31 +-
tests/Unit/Notifications/Activities/SmsReceivedTest.php | 50 +++
tests/Unit/Services/Activity/RingCentral/ServiceTest.php | 339 +++++++++++++++-
tests/Unit/Services/Activity/TwilioVideo/ServiceTest.php | 67 +++-
tests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.php ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71190
|
NULL
|
0
|
2026-05-22T11:29:24.611137+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449364611_m1.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449364611_m1.jpg...
|
BoosteroidAPP (DOCKERO 81DEV (-zsh)О 882APP (-zsh) BoosteroidAPP (DOCKERO 81DEV (-zsh)О 882APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreate mode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTracreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/create mode 100644 front-end/src/components/shared/AskAnything/-delete mode 100644 front-end/src/components/shared/AskAnything/.create mode 100644 tests/Unit/Component/ES/Processor/RedisEntitydelete mode 100644 tests/Unit/Component/ES/Processor/Traits/Workcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTestcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTestlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $Switched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --conHomeDMsBOZOSTEROID1.11.12 (Beta) LatestBetaLOADINGWhat's next:© 2026 Boosteroid Games S.R.L.Try Docker Debug forseamless, persistent debugging tools inLearn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-ent|docker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.+Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedED→Jiminny ...cnsmecruus# general# happy_birthday# jiminny-bg# platform-tickets# product_launches# random_of jimi...yesIOVtrova **Ikovzelovaeo Jiuyan taueVLo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... Ol:: AppsJira CloudToastlabl100% <478•Fri 22 May 14:29:24Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore+Stoyan TomMonday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov..•...
|
NULL
|
-5366853307644898585
|
NULL
|
visual_change
|
ocr
|
NULL
|
BoosteroidAPP (DOCKERO 81DEV (-zsh)О 882APP (-zsh) BoosteroidAPP (DOCKERO 81DEV (-zsh)О 882APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreate mode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTracreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/create mode 100644 front-end/src/components/shared/AskAnything/-delete mode 100644 front-end/src/components/shared/AskAnything/.create mode 100644 tests/Unit/Component/ES/Processor/RedisEntitydelete mode 100644 tests/Unit/Component/ES/Processor/Traits/Workcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTestcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTestlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $Switched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --conHomeDMsBOZOSTEROID1.11.12 (Beta) LatestBetaLOADINGWhat's next:© 2026 Boosteroid Games S.R.L.Try Docker Debug forseamless, persistent debugging tools inLearn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-ent|docker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.+Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedED→Jiminny ...cnsmecruus# general# happy_birthday# jiminny-bg# platform-tickets# product_launches# random_of jimi...yesIOVtrova **Ikovzelovaeo Jiuyan taueVLo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... Ol:: AppsJira CloudToastlabl100% <478•Fri 22 May 14:29:24Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore+Stoyan TomMonday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov..•...
|
71189
|
NULL
|
NULL
|
NULL
|
|
71189
|
NULL
|
0
|
2026-05-22T11:29:21.391086+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449361391_m1.jpg...
|
Boosteroid
|
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449361391_m1.jpg...
|
BoosteroidAPP (IDOCKERO 81DEV (-zsh)O $82APP (-zsh BoosteroidAPP (IDOCKERO 81DEV (-zsh)O $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreate mode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdelete mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreate mode 100644 tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $co -b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory used• •EDHomeDMsActivityFilesLaterMore+→Jiminny ...CHSIICCTIS# general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of jimi...° Direct messages. Stoyan TomovGalya Dimitrova "Nikolay YankovP. Aneliya Angelova2. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToastlabl100% <478•Fri 22 May 14:29:20Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/ORO-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov..•...
|
NULL
|
-6284847217854777250
|
NULL
|
visual_change
|
ocr
|
NULL
|
BoosteroidAPP (IDOCKERO 81DEV (-zsh)O $82APP (-zsh BoosteroidAPP (IDOCKERO 81DEV (-zsh)O $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreate mode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode 100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdelete mode 100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreate mode 100644 tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $co -b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory used• •EDHomeDMsActivityFilesLaterMore+→Jiminny ...CHSIICCTIS# general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of jimi...° Direct messages. Stoyan TomovGalya Dimitrova "Nikolay YankovP. Aneliya Angelova2. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToastlabl100% <478•Fri 22 May 14:29:20Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/ORO-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov..•...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71188
|
NULL
|
0
|
2026-05-22T11:29:19.204448+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449359204_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449359204_m2.jpg...
|
PhostornPlatform Sprint 4 Q2 - Platform Te-7 fJy-2 PhostornPlatform Sprint 4 Q2 - Platform Te-7 fJy-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu XJY-20676 delete AJ reports relateJY-20963 fix deleted object im XPipelines - jiminny/apps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabINavicatecode00O JIMINNY@ For you(• Recenti# Starred0+ Apps|Q Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5J All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b P attorm team& Processing t...a Site reliability...o=i New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email logs⅘> Developer escalations |afs Slack integrationQ SearchCSOMOA100% L2 * FtzzMay 14.29-10O Ask Rovo ® Eô (< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
-5039142662811998497
|
NULL
|
typing_pause
|
ocr
|
NULL
|
PhostornPlatform Sprint 4 Q2 - Platform Te-7 fJy-2 PhostornPlatform Sprint 4 Q2 - Platform Te-7 fJy-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu XJY-20676 delete AJ reports relateJY-20963 fix deleted object im XPipelines - jiminny/apps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabINavicatecode00O JIMINNY@ For you(• Recenti# Starred0+ Apps|Q Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5J All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b P attorm team& Processing t...a Site reliability...o=i New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email logs⅘> Developer escalations |afs Slack integrationQ SearchCSOMOA100% L2 * FtzzMay 14.29-10O Ask Rovo ® Eô (< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
71186
|
NULL
|
NULL
|
NULL
|
|
71187
|
NULL
|
0
|
2026-05-22T11:29:18.199065+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449358199_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449358199_m1.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.057638887,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.007777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.58819443,"top":0.14666666,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"bounds":{"left":0.58819443,"top":0.17777778,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.58819443,"top":0.20888889,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.58819443,"top":0.24,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.24,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.24,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.58819443,"top":0.2711111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.58819443,"top":0.30222222,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.58819443,"top":0.33333334,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.05138889,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":11,"bounds":{"left":0.59305555,"top":0.36444443,"width":0.045833334,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.45777777,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.07847222,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.060416665,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.7488889,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.58819443,"top":0.78,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8111111,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.58819443,"top":0.8844444,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.58819443,"top":0.91555554,"width":0.024305556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.9,"top":0.12777779,"width":0.04236111,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.94166666,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"bounds":{"left":0.7972222,"top":0.17666666,"width":0.104166664,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.09861111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":24,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.03888889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.15,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.22291666,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":24,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.065972224,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.8125,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":24,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.1388889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.17291667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":24,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.10069445,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":24,"bounds":{"left":0.7465278,"top":0.18777777,"width":0.065972224,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.8125,"top":0.19,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":24,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":25,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.2326389,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":90,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.23194444,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.8048611,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.82708335,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.84930557,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.8715278,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-9019930166124538418
|
-3495401782213667026
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
SlackFileEditViewGoHistoryWindowHelpAPP (•••DOCKERO 81DEV (-zsh)О ₴2APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatadDonantcfonui.coTactnhntests/Unit/Services/Mail/Office/EmailApiClietests/Unit/Services/Mail/TextRelayServiceTesbotests/Unit/Services/RecallAI/RecallAIService79 files changed, 4254 insertions(+), 2020 dcreate mode 100644 .github/claude-reviewer/ncreate mode 100644 .github/claude-reviewer/sBoosteroid.app/Applications/Boosteroid.appdelete mode 100644 app/Component/ES/Processocreatemode 100644 app/Component/ES/Processotype team iddeletemode100644 app/Component/ES/Processocreatemode 100644 app/Component/ES/QueuePricreate mode 100644 front-end/src/components/Books.app/Applications/Books.appcreate mode 100644 front-end/src/components/delete mode 100644 front-end/src/components/create mode 100644 tests/Unit/Component/ES/Pdelete mode 100644 tests/Unit/Component/ES/Pcreate mode 100644 tests/Unit/Component/ES/QContacts.app/Applications/Contacts.appFont Book.app/Applications/Font Book.appcreate mode 100644 tests/Unit/Notifications/create mode 100644 tests/Unit/Services/Mail/Boot Camp Assistant.app(Applications/Utilities/Boot Camp Assistant.applukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiSwitched to a new branch 'JY-20963-fix-importlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jidocker exec -it docker_lamp_1 ./vendor/bin/phPhoto Booth.appApplications/Photo Booth.appBuild mysql token queryWhat's next:Choose provider nameTry Docker Debug forseamless, persistent aevugging coors u any concatner or tmage →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-ent|docker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski andcontributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%ED→Jiminny ...+tcusmecruusААНAНAI+. Stoyan TanevLo James Graham8. Stefka StoyanovaCo Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToastlahl100% <478•Fri 22 May 14:29:17Describe what you are looking forStoyan Tomov6 0• Messages+₴2283₴84285₴6$7488Add canvasO FilesMore~itoyan Tom.Monday, May 18th ~гросто че обикновени юзьри получават грешкасато отидат на Team Insights да видят чартовете-ukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Jukas Kovalik 2:27 PMздрасти1маш ли минутка, трябва ми малко помощ седин тикетчли когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848ira Cloud-Sidekick SMS issueE Bug SRD-6848 in Jira CloudStatusAssigneeIn ProgressLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov+АаFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory used...
|
71185
|
NULL
|
NULL
|
NULL
|
|
71186
|
NULL
|
0
|
2026-05-22T11:29:16.897145+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449356897_m2.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449356897_m2.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.64361703,"top":1.0,"width":0.034242023,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.6788564,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.70113033,"top":1.0,"width":0.020279255,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.72107714,"top":1.0,"width":0.010970744,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5842536536765858165
|
-3514544834173860786
|
app_switch
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
PhostornPlatform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabINavicatecode00O JIMINNY@ For you(• Recent|# Starred•$ Apps• Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email logs⅘> Developer escalationsafs Slack integrationQ SearchCSOMOA100% L2 * FtzzMay 14-29-10O Ask Rovo ® Eô (< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71185
|
NULL
|
0
|
2026-05-22T11:29:16.783672+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449356783_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449356783_m1.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.057638887,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.007777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.58819443,"top":0.14666666,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"bounds":{"left":0.58819443,"top":0.17777778,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.58819443,"top":0.20888889,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.58819443,"top":0.24,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.24,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.24,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.58819443,"top":0.2711111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.58819443,"top":0.30222222,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.58819443,"top":0.33333334,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.05138889,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":11,"bounds":{"left":0.59305555,"top":0.36444443,"width":0.045833334,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.45777777,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.07847222,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.060416665,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.7488889,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.58819443,"top":0.78,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8111111,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.58819443,"top":0.8844444,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.58819443,"top":0.91555554,"width":0.024305556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.9,"top":0.12777779,"width":0.04236111,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.94166666,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"bounds":{"left":0.7972222,"top":0.17666666,"width":0.104166664,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.09861111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":24,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.03888889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":25,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2328456059403902036
|
-8107160014460086994
|
app_switch
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowAPP ()DOCKER0 81DEV (-zsh)О 882APP (-zsh)83tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode100644 app/Component/ES/QueuePriorityEnum.phpcreate mode100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdelete mode100611front-end/src/components/shared/AskAnything/testssnapshots/Ascreatemodetests,ComponentProcessorRedisEntityExtractorTest.phperidiraitTest.phnPS064|06406431or1iesLayS$I0963porSwitched toa new branch 'JY-20963-fix-import-on-deleted-entity)Slackdockerexec -itdocker_lamp_1 ./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistentdebugging tools in any container or image →Learn moreat https:://docs.docker.com/go/debug-cli/failed to connect to thedocker API at [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-ent)docker exec -it docker_lamp_1/vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimentalfeature and may be unstable,useitLoadedconfig default from-php-cs-fixer.dist.php"atyourownrisk.5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemoryusedHelpHomeDMsActivityFiles+ED→Jiminny ...CHSIICCTIS# general# happy_birthday# jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office#support#thank-youslomolGalya Dimitrova "Nikolay Yankov®. Aneliya Angelova2. Stoyan Tanevdo James Graham8. Stefka StoyanovaCo Vasil Vasilev&: Todor StamatovLukas Kovalik y...AppsJira CloudToastlahl100% <478•Fri 22 May 14:29:16Describe what you are looking forStoyan TomovMessagesAdd canvas@ FilesMore v+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимTodayLukas Kovalik 2:27 PMздрастиимаш ли минутка, трябваNnttps://jiminny.atlassiaJira Cloud ™Sidekick SMS issueXE Bug SRD-6848 in ira CloulStatusAssigneeIn ProgressLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov+Aa...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71184
|
NULL
|
0
|
2026-05-22T11:29:15.062888+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449355062_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449355062_m2.jpg...
|
PhostornPlatform Sprint 4 Q2 - Platform Te-7 (JY-2 PhostornPlatform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabINavicatecode00O JIMINNY@ For you(• Recent|# Starred•$ Apps• Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email logs⅘> Developer escalationsafs Slack integrationQ SearchCSOMOA100% L2 ∞* FtzzMay 14.29.14O Ask Rovo ® Eô (< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
-7385004150644483939
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhostornPlatform Sprint 4 Q2 - Platform Te-7 (JY-2 PhostornPlatform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabINavicatecode00O JIMINNY@ For you(• Recent|# Starred•$ Apps• Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email logs⅘> Developer escalationsafs Slack integrationQ SearchCSOMOA100% L2 ∞* FtzzMay 14.29.14O Ask Rovo ® Eô (< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
71181
|
NULL
|
NULL
|
NULL
|
|
71183
|
NULL
|
0
|
2026-05-22T11:29:14.026929+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449354026_m1.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449354026_m1.jpg...
|
Saving 'faVsco.js' settings
Cancel
Minimiz Saving 'faVsco.js' settings
Cancel
Minimize...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Saving 'faVsco.js' settings","depth":1,"bounds":{"left":0.36805555,"top":0.46222222,"width":0.2638889,"height":0.026666667},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":1,"bounds":{"left":0.375,"top":0.5011111,"width":0.23333333,"height":0.018888889},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":1,"bounds":{"left":0.61527777,"top":0.5011111,"width":0.0027777778,"height":0.018888889},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":1,"bounds":{"left":0.375,"top":0.53555554,"width":0.23333333,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":1,"bounds":{"left":0.61527777,"top":0.53555554,"width":0.0027777778,"height":0.018888889},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Minimize","depth":1,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-694385001992297597
|
7194573223250467852
|
visual_change
|
hybrid
|
NULL
|
Saving 'faVsco.js' settings
Cancel
Minimiz Saving 'faVsco.js' settings
Cancel
Minimize
SlackFileEditViewGoHistoryWindowHelpAPP ()DOCKER0 81DEV (-zsh)O $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode100644 app/Component/ES/QueuePriorityEnum.phpcreate mode100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests_del nt~mada1AAGAA funntLhinn//__snapshots__/AsanntaenanchataIл-PS$131SvFirefoxdocker exec -itdocker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →at [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-ent)docker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitatLoaded config default from".php-cs-fixer.dist.php"yourownrisk.5691/5691100%Fixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedHomeDMsActivity→Jiminny ...CHIgMICCIIS# general# happy_birthday# jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support(all100% <78•Fri 22 May 14:29:13Describe what you are looking forStoyan TomovMessagesAdd canvasO FilesMore v+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимTodayLukas Kovalik 2:27 PMNNikolay Yankov®. Aneliya Angelova2. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y...AppsS Jira CloudToastSidekick SMS issueXE Bug SRD-6848 in ira CloudStatusAssigneeIn ProgressLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan Tomov...
|
71182
|
NULL
|
NULL
|
NULL
|
|
71182
|
NULL
|
0
|
2026-05-22T11:29:10.292313+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449350292_m1.jpg...
|
PhpStorm
|
faVsco.js – UpdateCrmFieldDataJob.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449350292_m1.jpg...
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Activity\\Import;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Integrations\\ImportCrmFieldDataForActivity;\nuse Jiminny\\Integrations\\PlaybookResolver;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Activity\\ActivityCrmFieldsResolver;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Psr\\Log\\LoggerInterface;\n\nclass UpdateCrmFieldDataJob implements ShouldQueue\n{\n use Dispatchable;\n use InteractsWithQueue;\n use Queueable;\n\n public int $tries = 3;\n\n private int $activityId;\n private Activity $activity;\n private LoggerInterface $logger;\n private ActivityCrmFieldsResolver $activityCrmFieldsResolver;\n\n public function __construct(int $activityId)\n {\n $this->activityId = $activityId;\n\n $this->onQueue(Constants::QUEUE_DIALERS);\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n public function handle(\n LoggerInterface $logger,\n ActivityCrmFieldsResolver $activityCrmFieldsResolver,\n ProviderRegistry $providerRegistry,\n ActivityRepository $activityRepo\n ): void {\n // Dependencies\n $this->logger = $logger;\n $this->activityCrmFieldsResolver = $activityCrmFieldsResolver;\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job started');\n\n if (! $this->validateActivity($activityRepo)) {\n return;\n }\n\n $this->bootstrapResolverCrmService($providerRegistry);\n $this->logger->info('[UpdateCrmFieldDataJob] Job bootstrapped for activity', [\n 'activity_id' => $this->activityId,\n ]);\n\n $user = $this->activity->getUser();\n $crmId = $this->activity->getCrmProviderId();\n\n $activityField = $this->getActivityField();\n if (is_null($activityField)) {\n return;\n }\n\n $crmObjectType = $this->getCrmObjectType($crmId, $activityField);\n\n /** @var Collection $crmFieldsCollection */\n $crmFieldsCollection = $this->activityCrmFieldsResolver->getCrmFieldWithCache($user, $crmObjectType);\n\n /** Resolve an external Crm Object that matches to the particular activity */\n $externalCrmObject = $this->activityCrmFieldsResolver->resolveCrmObject(\n $crmId,\n $crmObjectType,\n $crmFieldsCollection,\n $activityField\n );\n\n if (empty($externalCrmObject)) {\n $this->logger->info('[UpdateCrmFieldDataJob] External Crm Object is empty', [\n 'activity_id' => $this->activityId,\n 'crm_object_type' => $crmObjectType,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n ]);\n\n return;\n }\n\n $this->saveCrmFields($crmFieldsCollection, $externalCrmObject);\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job finished', [\n 'activity_id' => $this->activityId,\n ]);\n }\n\n private function saveCrmFields(Collection $crmFieldsCollection, array $externalCrmObject): void\n {\n $this->logger->info('[UpdateCrmFieldDataJob] Fetched external Crm Object.', [\n 'activity_id' => $this->activityId,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n 'external_crm_object' => $externalCrmObject,\n ]);\n\n $importCrmFields = app(ImportCrmFieldDataForActivity::class, [\n 'activity' => $this->activity,\n ]);\n\n $importCrmFields->save($crmFieldsCollection, $externalCrmObject);\n }\n\n private function validateActivity(ActivityRepository $activityRepo): bool\n {\n $activity = $activityRepo->findById($this->activityId);\n if (! $activity instanceof Activity) {\n $this->logger->warning('[UpdateCrmFieldDataJob] Cannot find activity, skipping', [\n 'activity_id' => $this->activityId,\n ]);\n\n return false;\n }\n\n $crmConfig = $activity->getCrm();\n if ($crmConfig->getProviderName() !== Activity::PROVIDER_SALESFORCE) {\n $this->logger->info('[UpdateCrmFieldDataJob] Job is applicable for Salesforce only, skipping', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n if (! $activity->hasCrmProviderId()) {\n $this->logger->info('[UpdateCrmFieldDataJob] Activity does not have crm provider id', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n $this->activity = $activity;\n\n return true;\n }\n\n private function getActivityField(): ?Field\n {\n $user = $this->activity->getUser();\n\n $playbookResolver = app(PlaybookResolver::class);\n $playbook = $playbookResolver->resolvePlaybookByUser($user);\n\n if (! $playbook instanceof Playbook) {\n $this->logger->info('[UpdateCrmFieldData] No playbook found, cannot match ActivityField', [\n 'activity_id' => $this->activity->getId(),\n 'user_id' => $user->getId(),\n ]);\n\n return null;\n }\n\n $activityField = $playbook->getActivityField() ?? null;\n\n if (is_null($activityField)) {\n $this->logger->info('[UpdateCrmFieldData] No activity field found for the playbook', [\n 'activity_id' => $this->activity->getId(),\n 'playbook_id' => $playbook->getId(),\n ]);\n }\n\n return $activityField;\n }\n\n private function getCrmObjectType(string $crmId, Field $activityField): string\n {\n $crmObjectType = $this->activityCrmFieldsResolver->getObjectType($crmId, $activityField);\n $this->logger->info('[UpdateCrmFieldDataJob] Crm Object type identified', [\n 'activity_id' => $this->activityId,\n 'crm_id' => $crmId,\n 'crm_object_type' => $crmObjectType,\n ]);\n\n return $crmObjectType;\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n private function bootstrapResolverCrmService(ProviderRegistry $providerRegistry): void\n {\n $team = $this->activity->getUser()->getTeam();\n $crmProviderName = $this->activity->getCrm()->getProviderName();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $crmProviderName,\n ]);\n\n /** @var BaseService|ServiceInterface $crmService */\n $crmService = $crmResolver->prepareCrmService();\n\n $this->activityCrmFieldsResolver->setCrmService($crmService);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Activity\\Import;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Integrations\\ImportCrmFieldDataForActivity;\nuse Jiminny\\Integrations\\PlaybookResolver;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Activity\\ActivityCrmFieldsResolver;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Psr\\Log\\LoggerInterface;\n\nclass UpdateCrmFieldDataJob implements ShouldQueue\n{\n use Dispatchable;\n use InteractsWithQueue;\n use Queueable;\n\n public int $tries = 3;\n\n private int $activityId;\n private Activity $activity;\n private LoggerInterface $logger;\n private ActivityCrmFieldsResolver $activityCrmFieldsResolver;\n\n public function __construct(int $activityId)\n {\n $this->activityId = $activityId;\n\n $this->onQueue(Constants::QUEUE_DIALERS);\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n public function handle(\n LoggerInterface $logger,\n ActivityCrmFieldsResolver $activityCrmFieldsResolver,\n ProviderRegistry $providerRegistry,\n ActivityRepository $activityRepo\n ): void {\n // Dependencies\n $this->logger = $logger;\n $this->activityCrmFieldsResolver = $activityCrmFieldsResolver;\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job started');\n\n if (! $this->validateActivity($activityRepo)) {\n return;\n }\n\n $this->bootstrapResolverCrmService($providerRegistry);\n $this->logger->info('[UpdateCrmFieldDataJob] Job bootstrapped for activity', [\n 'activity_id' => $this->activityId,\n ]);\n\n $user = $this->activity->getUser();\n $crmId = $this->activity->getCrmProviderId();\n\n $activityField = $this->getActivityField();\n if (is_null($activityField)) {\n return;\n }\n\n $crmObjectType = $this->getCrmObjectType($crmId, $activityField);\n\n /** @var Collection $crmFieldsCollection */\n $crmFieldsCollection = $this->activityCrmFieldsResolver->getCrmFieldWithCache($user, $crmObjectType);\n\n /** Resolve an external Crm Object that matches to the particular activity */\n $externalCrmObject = $this->activityCrmFieldsResolver->resolveCrmObject(\n $crmId,\n $crmObjectType,\n $crmFieldsCollection,\n $activityField\n );\n\n if (empty($externalCrmObject)) {\n $this->logger->info('[UpdateCrmFieldDataJob] External Crm Object is empty', [\n 'activity_id' => $this->activityId,\n 'crm_object_type' => $crmObjectType,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n ]);\n\n return;\n }\n\n $this->saveCrmFields($crmFieldsCollection, $externalCrmObject);\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job finished', [\n 'activity_id' => $this->activityId,\n ]);\n }\n\n private function saveCrmFields(Collection $crmFieldsCollection, array $externalCrmObject): void\n {\n $this->logger->info('[UpdateCrmFieldDataJob] Fetched external Crm Object.', [\n 'activity_id' => $this->activityId,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n 'external_crm_object' => $externalCrmObject,\n ]);\n\n $importCrmFields = app(ImportCrmFieldDataForActivity::class, [\n 'activity' => $this->activity,\n ]);\n\n $importCrmFields->save($crmFieldsCollection, $externalCrmObject);\n }\n\n private function validateActivity(ActivityRepository $activityRepo): bool\n {\n $activity = $activityRepo->findById($this->activityId);\n if (! $activity instanceof Activity) {\n $this->logger->warning('[UpdateCrmFieldDataJob] Cannot find activity, skipping', [\n 'activity_id' => $this->activityId,\n ]);\n\n return false;\n }\n\n $crmConfig = $activity->getCrm();\n if ($crmConfig->getProviderName() !== Activity::PROVIDER_SALESFORCE) {\n $this->logger->info('[UpdateCrmFieldDataJob] Job is applicable for Salesforce only, skipping', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n if (! $activity->hasCrmProviderId()) {\n $this->logger->info('[UpdateCrmFieldDataJob] Activity does not have crm provider id', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n $this->activity = $activity;\n\n return true;\n }\n\n private function getActivityField(): ?Field\n {\n $user = $this->activity->getUser();\n\n $playbookResolver = app(PlaybookResolver::class);\n $playbook = $playbookResolver->resolvePlaybookByUser($user);\n\n if (! $playbook instanceof Playbook) {\n $this->logger->info('[UpdateCrmFieldData] No playbook found, cannot match ActivityField', [\n 'activity_id' => $this->activity->getId(),\n 'user_id' => $user->getId(),\n ]);\n\n return null;\n }\n\n $activityField = $playbook->getActivityField() ?? null;\n\n if (is_null($activityField)) {\n $this->logger->info('[UpdateCrmFieldData] No activity field found for the playbook', [\n 'activity_id' => $this->activity->getId(),\n 'playbook_id' => $playbook->getId(),\n ]);\n }\n\n return $activityField;\n }\n\n private function getCrmObjectType(string $crmId, Field $activityField): string\n {\n $crmObjectType = $this->activityCrmFieldsResolver->getObjectType($crmId, $activityField);\n $this->logger->info('[UpdateCrmFieldDataJob] Crm Object type identified', [\n 'activity_id' => $this->activityId,\n 'crm_id' => $crmId,\n 'crm_object_type' => $crmObjectType,\n ]);\n\n return $crmObjectType;\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n private function bootstrapResolverCrmService(ProviderRegistry $providerRegistry): void\n {\n $team = $this->activity->getUser()->getTeam();\n $crmProviderName = $this->activity->getCrm()->getProviderName();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $crmProviderName,\n ]);\n\n /** @var BaseService|ServiceInterface $crmService */\n $crmService = $crmResolver->prepareCrmService();\n\n $this->activityCrmFieldsResolver->setCrmService($crmService);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7923116779312214135
|
-8385861082218261356
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71181
|
NULL
|
0
|
2026-05-22T11:28:56.636463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449336636_m2.jpg...
|
PhpStorm
|
faVsco.js – UpdateCrmFieldDataJob.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449336636_m2.jpg...
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","depth":4,"bounds":{"left":0.16223404,"top":0.24581006,"width":0.33676863,"height":0.75418997},"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Activity\\Import;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Integrations\\ImportCrmFieldDataForActivity;\nuse Jiminny\\Integrations\\PlaybookResolver;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Activity\\ActivityCrmFieldsResolver;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Psr\\Log\\LoggerInterface;\n\nclass UpdateCrmFieldDataJob implements ShouldQueue\n{\n use Dispatchable;\n use InteractsWithQueue;\n use Queueable;\n\n public int $tries = 3;\n\n private int $activityId;\n private Activity $activity;\n private LoggerInterface $logger;\n private ActivityCrmFieldsResolver $activityCrmFieldsResolver;\n\n public function __construct(int $activityId)\n {\n $this->activityId = $activityId;\n\n $this->onQueue(Constants::QUEUE_DIALERS);\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n public function handle(\n LoggerInterface $logger,\n ActivityCrmFieldsResolver $activityCrmFieldsResolver,\n ProviderRegistry $providerRegistry,\n ActivityRepository $activityRepo\n ): void {\n // Dependencies\n $this->logger = $logger;\n $this->activityCrmFieldsResolver = $activityCrmFieldsResolver;\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job started');\n\n if (! $this->validateActivity($activityRepo)) {\n return;\n }\n\n $this->bootstrapResolverCrmService($providerRegistry);\n $this->logger->info('[UpdateCrmFieldDataJob] Job bootstrapped for activity', [\n 'activity_id' => $this->activityId,\n ]);\n\n $user = $this->activity->getUser();\n $crmId = $this->activity->getCrmProviderId();\n\n $activityField = $this->getActivityField();\n if (is_null($activityField)) {\n return;\n }\n\n $crmObjectType = $this->getCrmObjectType($crmId, $activityField);\n\n /** @var Collection $crmFieldsCollection */\n $crmFieldsCollection = $this->activityCrmFieldsResolver->getCrmFieldWithCache($user, $crmObjectType);\n\n /** Resolve an external Crm Object that matches to the particular activity */\n $externalCrmObject = $this->activityCrmFieldsResolver->resolveCrmObject(\n $crmId,\n $crmObjectType,\n $crmFieldsCollection,\n $activityField\n );\n\n if (empty($externalCrmObject)) {\n $this->logger->info('[UpdateCrmFieldDataJob] External Crm Object is empty', [\n 'activity_id' => $this->activityId,\n 'crm_object_type' => $crmObjectType,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n ]);\n\n return;\n }\n\n $this->saveCrmFields($crmFieldsCollection, $externalCrmObject);\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job finished', [\n 'activity_id' => $this->activityId,\n ]);\n }\n\n private function saveCrmFields(Collection $crmFieldsCollection, array $externalCrmObject): void\n {\n $this->logger->info('[UpdateCrmFieldDataJob] Fetched external Crm Object.', [\n 'activity_id' => $this->activityId,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n 'external_crm_object' => $externalCrmObject,\n ]);\n\n $importCrmFields = app(ImportCrmFieldDataForActivity::class, [\n 'activity' => $this->activity,\n ]);\n\n $importCrmFields->save($crmFieldsCollection, $externalCrmObject);\n }\n\n private function validateActivity(ActivityRepository $activityRepo): bool\n {\n $activity = $activityRepo->findById($this->activityId);\n if (! $activity instanceof Activity) {\n $this->logger->warning('[UpdateCrmFieldDataJob] Cannot find activity, skipping', [\n 'activity_id' => $this->activityId,\n ]);\n\n return false;\n }\n\n $crmConfig = $activity->getCrm();\n if ($crmConfig->getProviderName() !== Activity::PROVIDER_SALESFORCE) {\n $this->logger->info('[UpdateCrmFieldDataJob] Job is applicable for Salesforce only, skipping', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n if (! $activity->hasCrmProviderId()) {\n $this->logger->info('[UpdateCrmFieldDataJob] Activity does not have crm provider id', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n $this->activity = $activity;\n\n return true;\n }\n\n private function getActivityField(): ?Field\n {\n $user = $this->activity->getUser();\n\n $playbookResolver = app(PlaybookResolver::class);\n $playbook = $playbookResolver->resolvePlaybookByUser($user);\n\n if (! $playbook instanceof Playbook) {\n $this->logger->info('[UpdateCrmFieldData] No playbook found, cannot match ActivityField', [\n 'activity_id' => $this->activity->getId(),\n 'user_id' => $user->getId(),\n ]);\n\n return null;\n }\n\n $activityField = $playbook->getActivityField() ?? null;\n\n if (is_null($activityField)) {\n $this->logger->info('[UpdateCrmFieldData] No activity field found for the playbook', [\n 'activity_id' => $this->activity->getId(),\n 'playbook_id' => $playbook->getId(),\n ]);\n }\n\n return $activityField;\n }\n\n private function getCrmObjectType(string $crmId, Field $activityField): string\n {\n $crmObjectType = $this->activityCrmFieldsResolver->getObjectType($crmId, $activityField);\n $this->logger->info('[UpdateCrmFieldDataJob] Crm Object type identified', [\n 'activity_id' => $this->activityId,\n 'crm_id' => $crmId,\n 'crm_object_type' => $crmObjectType,\n ]);\n\n return $crmObjectType;\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n private function bootstrapResolverCrmService(ProviderRegistry $providerRegistry): void\n {\n $team = $this->activity->getUser()->getTeam();\n $crmProviderName = $this->activity->getCrm()->getProviderName();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $crmProviderName,\n ]);\n\n /** @var BaseService|ServiceInterface $crmService */\n $crmService = $crmResolver->prepareCrmService();\n\n $this->activityCrmFieldsResolver->setCrmService($crmService);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Activity\\Import;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Integrations\\ImportCrmFieldDataForActivity;\nuse Jiminny\\Integrations\\PlaybookResolver;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Activity\\ActivityCrmFieldsResolver;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Psr\\Log\\LoggerInterface;\n\nclass UpdateCrmFieldDataJob implements ShouldQueue\n{\n use Dispatchable;\n use InteractsWithQueue;\n use Queueable;\n\n public int $tries = 3;\n\n private int $activityId;\n private Activity $activity;\n private LoggerInterface $logger;\n private ActivityCrmFieldsResolver $activityCrmFieldsResolver;\n\n public function __construct(int $activityId)\n {\n $this->activityId = $activityId;\n\n $this->onQueue(Constants::QUEUE_DIALERS);\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n public function handle(\n LoggerInterface $logger,\n ActivityCrmFieldsResolver $activityCrmFieldsResolver,\n ProviderRegistry $providerRegistry,\n ActivityRepository $activityRepo\n ): void {\n // Dependencies\n $this->logger = $logger;\n $this->activityCrmFieldsResolver = $activityCrmFieldsResolver;\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job started');\n\n if (! $this->validateActivity($activityRepo)) {\n return;\n }\n\n $this->bootstrapResolverCrmService($providerRegistry);\n $this->logger->info('[UpdateCrmFieldDataJob] Job bootstrapped for activity', [\n 'activity_id' => $this->activityId,\n ]);\n\n $user = $this->activity->getUser();\n $crmId = $this->activity->getCrmProviderId();\n\n $activityField = $this->getActivityField();\n if (is_null($activityField)) {\n return;\n }\n\n $crmObjectType = $this->getCrmObjectType($crmId, $activityField);\n\n /** @var Collection $crmFieldsCollection */\n $crmFieldsCollection = $this->activityCrmFieldsResolver->getCrmFieldWithCache($user, $crmObjectType);\n\n /** Resolve an external Crm Object that matches to the particular activity */\n $externalCrmObject = $this->activityCrmFieldsResolver->resolveCrmObject(\n $crmId,\n $crmObjectType,\n $crmFieldsCollection,\n $activityField\n );\n\n if (empty($externalCrmObject)) {\n $this->logger->info('[UpdateCrmFieldDataJob] External Crm Object is empty', [\n 'activity_id' => $this->activityId,\n 'crm_object_type' => $crmObjectType,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n ]);\n\n return;\n }\n\n $this->saveCrmFields($crmFieldsCollection, $externalCrmObject);\n\n $this->logger->info('[UpdateCrmFieldDataJob] Job finished', [\n 'activity_id' => $this->activityId,\n ]);\n }\n\n private function saveCrmFields(Collection $crmFieldsCollection, array $externalCrmObject): void\n {\n $this->logger->info('[UpdateCrmFieldDataJob] Fetched external Crm Object.', [\n 'activity_id' => $this->activityId,\n 'crm_provider_id' => $this->activity->getCrmProviderId(),\n 'external_crm_object' => $externalCrmObject,\n ]);\n\n $importCrmFields = app(ImportCrmFieldDataForActivity::class, [\n 'activity' => $this->activity,\n ]);\n\n $importCrmFields->save($crmFieldsCollection, $externalCrmObject);\n }\n\n private function validateActivity(ActivityRepository $activityRepo): bool\n {\n $activity = $activityRepo->findById($this->activityId);\n if (! $activity instanceof Activity) {\n $this->logger->warning('[UpdateCrmFieldDataJob] Cannot find activity, skipping', [\n 'activity_id' => $this->activityId,\n ]);\n\n return false;\n }\n\n $crmConfig = $activity->getCrm();\n if ($crmConfig->getProviderName() !== Activity::PROVIDER_SALESFORCE) {\n $this->logger->info('[UpdateCrmFieldDataJob] Job is applicable for Salesforce only, skipping', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n if (! $activity->hasCrmProviderId()) {\n $this->logger->info('[UpdateCrmFieldDataJob] Activity does not have crm provider id', [\n 'activity_id' => $this->activityId,\n 'crm_provider' => $crmConfig->getProviderName(),\n ]);\n\n return false;\n }\n\n $this->activity = $activity;\n\n return true;\n }\n\n private function getActivityField(): ?Field\n {\n $user = $this->activity->getUser();\n\n $playbookResolver = app(PlaybookResolver::class);\n $playbook = $playbookResolver->resolvePlaybookByUser($user);\n\n if (! $playbook instanceof Playbook) {\n $this->logger->info('[UpdateCrmFieldData] No playbook found, cannot match ActivityField', [\n 'activity_id' => $this->activity->getId(),\n 'user_id' => $user->getId(),\n ]);\n\n return null;\n }\n\n $activityField = $playbook->getActivityField() ?? null;\n\n if (is_null($activityField)) {\n $this->logger->info('[UpdateCrmFieldData] No activity field found for the playbook', [\n 'activity_id' => $this->activity->getId(),\n 'playbook_id' => $playbook->getId(),\n ]);\n }\n\n return $activityField;\n }\n\n private function getCrmObjectType(string $crmId, Field $activityField): string\n {\n $crmObjectType = $this->activityCrmFieldsResolver->getObjectType($crmId, $activityField);\n $this->logger->info('[UpdateCrmFieldDataJob] Crm Object type identified', [\n 'activity_id' => $this->activityId,\n 'crm_id' => $crmId,\n 'crm_object_type' => $crmObjectType,\n ]);\n\n return $crmObjectType;\n }\n\n /**\n * @throws SocialAccountTokenInvalidException\n */\n private function bootstrapResolverCrmService(ProviderRegistry $providerRegistry): void\n {\n $team = $this->activity->getUser()->getTeam();\n $crmProviderName = $this->activity->getCrm()->getProviderName();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $crmProviderName,\n ]);\n\n /** @var BaseService|ServiceInterface $crmService */\n $crmService = $crmResolver->prepareCrmService();\n\n $this->activityCrmFieldsResolver->setCrmService($crmService);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7923116779312214135
|
-8385861082218261356
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71180
|
NULL
|
0
|
2026-05-22T11:28:53.775530+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449333775_m2.jpg...
|
PhpStorm
|
faVsco.js – UpdateCrmFieldDataJob.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449333775_m2.jpg...
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8101791824998039176
|
-8348547798392525882
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
PhostormcodeFV faVsco.js°9 master kroledeyC) CalendarController.onpkeporcontroller.onpc SoftohoneWebhookController.ongy Aostrdetcontroller.onpcommentcontexunterrace.onpoconterencesoeunourcontroller.ong© Controller.php€ ExportController.php© FrontendController.php© FrontendControllerTrait.phpGeocodingController.phpc) Healtncheckcontroller.onpLiveCoachController.phpgMissing leamController.php© MobileController.phpc)NotificationController.ohv© NotificationProviderController.php€ PlavbackController.php@ PlavlistController.ohpc) Pushercontroller.ono@ SlackController.ohp9 SupportController.php€ TeamSetunController.phn© UserAutomatedReportsController.php@ WelcomeController.phpM Middlewarem RequecteD Responses( SerializercD Transformers(e) Kernel.phpT PlaylistTrackResourceTrait.php© ValidateCrmConnectionRequiredTrait.php> O IntearationsMintorantinndv D Jobsv @ Activity>C Dialpadv W Importc) createParticioants.ono© DownloadTrack.phpC) HvdrateCrmDataBvExternalCallid.Job.@ ImportCall.ohoC) ImoortSxternalActivitv.oho© ImportTwilioVideoSpeechesJob.phpCIsActivitvReadv=orProcessina.lob.ohv(c) MatchermData.nho@)Undatecrmsieldbata.loh.nhn@ UndateCustomCrmFieldData.loh nhn> M.luctCalli"C ActivitvController.ohrsavercuvity.ongosyncriannat.pnp© SyncToPlanhat.php©PlaybackController.phppnp api.phpC) CreateSmsSentEvent.phpC) PlanhatActivityListener.pho(C) AskAnythingPromptService.pho(C) AutomatedReportsRepositorv.php(C) AutomatedReportsCommand.phpphp api v2.phpC) RequestGenerateReportJob.pho(C) AutomatedReportResult.php(C) AutomatedReport.oho<nhnnamesnace liminnv Httn ControllensApTIuse cardon carbonuse ChaseConey \LaravelDatadogHelper\Datadog;use cxception,use euLuninace Auchaccess auchorizaclonexceptzon.use 1uluminare varabase cloouent bullder.use 1uluminare nuup sonkesponseuse ILLuminate Hctp requestuse 1lluminate support collectionuse 1lluminate support racades Loouse 1LLuminate validation kuleuse 1LLuminate validation kules 1n^useLuminate vauicatzon valoationexcentionsuse Jiminny Comoonent ActivitvAnalvtics:use Jiminny Component \ActivitySearch\F1lterDefinitionColLection;luse _Jiminnv|Contracts\ES\Events|UodateSingleFntitv•use Jiminnv Contracts ES UndateTaraetEnum:use Jiminnv Contracts Nudae NudaeSactorvIntenface:use Jiminnv Contracts Plavlist PlavlistTrackFactorvInterface:use Jiminny\Contracts\Repositories \PlaylistActivityRepository:use Jiminnv Contracts Services Crm. ServiceIntenface:use Jiminny\Enums \TeamSetting:use Jiminny\Events \Activities\AiAutomation\ActivityProspectAdded;use Jiminny Events \Activities\Coaching\Coached:use Jiminny Contracts\Services\Crm\Supports0bjectTypeParseInterface:use Jiminny cxcepcions Loq1ctxcepc1on*use Jiminny Excentions SocialsccounttokenInvalidEycontion:use Jiminny Http\Controllers\API\BaseController as Controller:use Jiminny Http\Controllers\CommentContextInterface:use Jiminny Http kesponses Ap1 Abstracckesponse*use Jiminny Htto responses Aot kesponseruse Jimnny Htto sertauzzers sonserzauzer:use Jiminny Htto Transformers ActivitycommentTransformer:use Jiminny Htto Transformers ActavitvTooictriggertransformeruse Jiminny Htto Transformers Actavitviransformer:| 11— 55108=109=123_1241861— 187= custom.log= laravel.log« SF jiminny@localhost]4 HS_local [jiminny@localhost]& console [PROD]C) TextMessag(C) MatchCrmData.onpUpdatecrmrielaDataJob.onpxUpdateSalesforceAccount.ph# console SlAGiNGclass UpdateCrmFieldDataJob implements ShouldQueuepubLic 1nt Stries = 5*10 usages.orivate int sactivitvid'private Activity Sactivity;12 usaaesprivate LoggerInterface $logger;private ActivityCrmFieldsResolver SactivityCrmFieldsResolver:public function __construct(int $activityId)i...}* Othrows SocialAccountTokenInvalidExceptionpublic function handle(Loccerinterrace slooderProviderkeq1stry sproviderkeq1stry.ActivityRepository SactivityRepo): void {...}private function saveCrmFields(Collection ScrmFieldsCollection. arrav SexternalCrm0biect): void{...}orivate function validate.ctivity ActivitvRepositorv sactivitvReno:000l....nrivate function detActivitv.ie.do. sieldk..private function getCrm0bjectType(string $crmId, Field $activityField): string{...}* @throws SocialAccountTokenInvalidException*/Tusageprivate function bootstrapResolverCrmService(ProviderRegistry $providerRegistry): void{...}1 1 of 3 edits JAccept File & X Reject File 4%g+ 3 of 6 files →100% 2• Fri 22 May 14:28:53AskJiminnyReportActivityServiceTest vCascadeInvestigate Foreign KeSalestorce Token Fallb+0..UodateCrmFieldDataJob.ohpRead CreateActivitv=romUoloadService.oho• CreateActivityFromUploadService.phpCreateActivitv=romUoloadService.onol+6-21Now the medium priority nemsRead UpdateSalesforceAccount.php" UodateSalesforceAccount.ohol• UpdateSalesforceAccount.php+16 -6Now the ActivityController opportunity sync:Explored ActivityController.php and searched z queries• ActivityController.ohpActivityController.php+7 -76/6 tasks done >All 6 places have been updated to use CrmOwnerResolver with fallback to other team members tokens when theadminlowner tokon ic invalidlSummary of ChangesHigh Priority - Same root cause as Twilio1. MatchCrmData.oho: 179-194 - Critical iob for matchina CRM data on dialer recordinas2. HydrateCrmDataByExternalCallIdJob.php: 60-76 - Hydrates CRM data by external call ID (Amazon Connect)3. UodateCrmFieldDataJob.oho:202-217 - Uodates CRM field data on activities4. CreateActivityFromUploadService.php:113-119 - Parses CRM records for uploaded recordingsMedium Prioritv5.UndateSalesforceAccount.nhn:28-44 - Undates Salestorce account on team chanaes.6. ActivityController.php:1177-1192 - Syncs opportunity on activity viewPattern Used1. Creates a CrmownerResolver with the team and intended admin2. Calls prepareCrmService() which tries the admin first, then falls back to team members with active tokens (orderedView allapp/Listeners/Teams/# UpdateSalesforceAccount.pho +16-5app/Jobs/Activity/Import/@ MatchCrmData.php +9 -4app/Component/Uploader/Services/ D CreateActivityFromUploadService.php +7 -2annllohe/Activitvllmnort/ MLIndatoCrmGioldData.lob.nhntg.ann/lobs/Activitv/Imnort/ M HvdrateCrmDataRvSyternalCallid.loh.ohn18gapo/Htto/Controllers/AP//[M ActivitvController.ohv +8* Reiect alliiAccent alliAsk anvthina (884-L)<> Code Claude Qnus 4.7 MediumWN Windsurf Toams 22-1UTF.8io 4 spaces...
|
71179
|
NULL
|
NULL
|
NULL
|
|
71179
|
NULL
|
0
|
2026-05-22T11:28:50.295973+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449330295_m2.jpg...
|
PhpStorm
|
faVsco.js – UpdateCrmFieldDataJob.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449330295_m2.jpg...
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","depth":4,"bounds":{"left":0.16223404,"top":0.24581006,"width":0.33676863,"height":0.75418997},"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Http\\Controllers\\API;\n\nuse Carbon\\Carbon;\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Illuminate\\Validation\\ValidationException;\nuse InvalidArgumentException;\nuse Jiminny\\Component\\ActivityAnalytics;\nuse Jiminny\\Component\\ActivitySearch;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\PlaybackPage\\Comments\\Services\\ActivityCommentService;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Contracts\\Nudge\\NudgeFactoryInterface;\nuse Jiminny\\Contracts\\Playlist\\PlaylistTrackFactoryInterface;\nuse Jiminny\\Contracts\\Repositories\\PlaylistActivityRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ServiceInterface;\nuse Jiminny\\Enums\\TeamSetting;\nuse Jiminny\\Events\\Activities\\AiAutomation\\ActivityProspectAdded;\nuse Jiminny\\Events\\Activities\\Coaching\\Coached;\nuse Jiminny\\Contracts\\Services\\Crm\\SupportsObjectTypeParseInterface;\nuse Jiminny\\Exceptions\\LogicException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Http\\Controllers\\API\\BaseController as Controller;\nuse Jiminny\\Http\\Controllers\\CommentContextInterface;\nuse Jiminny\\Http\\Responses\\Api\\AbstractResponse;\nuse Jiminny\\Http\\Responses\\Api\\Response;\nuse Jiminny\\Http\\Serializers\\JsonSerializer;\nuse Jiminny\\Http\\Transformers\\ActivityCommentTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTopicTriggerTransformer;\nuse Jiminny\\Http\\Transformers\\ActivityTransformer;\nuse Jiminny\\Http\\Transformers\\AvailabilityNotificationTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingFeedbackTransformer;\nuse Jiminny\\Http\\Transformers\\CoachingSectionsTransformer;\nuse Jiminny\\Http\\Transformers\\SearchTransformer;\nuse Jiminny\\Http\\Transformers\\StatsTransformer;\nuse Jiminny\\Jobs\\Crm\\SaveActivity;\nuse Jiminny\\Jobs\\Crm\\UpdateStage;\nuse Jiminny\\Jobs\\Telephony\\StartRecording;\nuse Jiminny\\Jobs\\Telephony\\StopRecording;\nuse Jiminny\\Jobs\\Telephony\\ToggleRecording;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Activity\\CoachRequest;\nuse Jiminny\\Models\\Activity\\Comment;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\Activity\\Share;\nuse Jiminny\\Models\\CoachingFeedback;\nuse Jiminny\\Models\\CoachingSection;\nuse Jiminny\\Models\\CoachingSectionCriterion;\nuse Jiminny\\Models\\CoachingSectionFeedback;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\LayoutEntity;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Jiminny\\Models\\LanguageDialect;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Nudge;\nuse Jiminny\\Models\\PlaybookCategory;\nuse Jiminny\\Models\\Playlist;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\Track;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\CoachingFeedbackRepository;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Repositories\\TeamRepository;\nuse Jiminny\\Rules\\CrmReference;\nuse Jiminny\\Rules\\MultidimensionalArrayMaxCharRule;\nuse Jiminny\\Services\\ActivityService;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Crm\\ProviderRegistry;\nuse Jiminny\\Services\\PlaybackService;\nuse Jiminny\\Services\\UserService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Sentry;\nuse Symfony\\Component\\HttpFoundation;\n\nfinal class ActivityController extends Controller implements CommentContextInterface\n{\n // Number of minutes to look back on activities. i.e. a timeout on activity duration.\n private const int LOOK_BACK = 180;\n\n public function __construct(\n private ProviderRegistry $providerRegistry,\n private ActivityService $activityService,\n Response $response,\n private UserService $userService,\n private ActivitySearch\\Service\\ActivitySearch $activitySearch,\n private NudgeFactoryInterface $nudgeFactory,\n private ActivityCommentService $activityCommentService,\n private LoggerInterface $logger,\n private readonly CoachingFeedbackRepository $coachingFeedbackRepository,\n private readonly TeamRepository $teamRepository,\n ) {\n parent::__construct($response);\n }\n\n public static function getCommentImplementation(): string\n {\n return Comment::class;\n }\n\n public function delete()\n {\n $this->request->validate([\n '*' => 'uuid:activities',\n ]);\n\n $deletedIds = [];\n foreach ($this->request->all() as $activityId) {\n $activity = Activity::idOrUuId($activityId);\n\n try {\n if ($this->authorize('delete', $activity)) {\n $activity->delete();\n $deletedIds[] = $activityId;\n\n \\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n }\n } catch (AuthorizationException $authorizationException) {\n // They didn't have permission.\n }\n }\n\n return $this->response->withArray($deletedIds);\n }\n\n public function update(Request $request, Activity $activity)\n {\n $this->authorize('updateMetadata', $activity);\n\n $request->validate([\n 'title' => 'string|max:250',\n 'category_id' => 'uuid:playbook_categories',\n 'language' => [\n new In(\n LanguageDialect::query()\n ->with('language')\n ->cursor()\n ->map(static function (LanguageDialect $languageDialect): string {\n return $languageDialect->getLanguageLocale();\n })\n ->all()\n ),\n ],\n ]);\n\n if ($request->has('title')) {\n $activity->title = $request->input('title');\n }\n\n if ($request->has('category_id')) {\n $category = PlaybookCategory::uuid($request->input('category_id'));\n\n if ($category->playbook->team_id !== $request->user()->team_id) {\n return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n if ($request->has('language')) {\n if (! $activity->isInProgress()) {\n return $this->response->withError(\n 'Activity language can only be set while the meeting is in progress.',\n 400\n );\n }\n\n $activity->setLanguageCode($request->input('language'));\n }\n\n $activity->save();\n\n return $this->response->withOk();\n }\n\n // XXX: This should be merged with the update method.\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws SocialAccountTokenInvalidException\n *\n * @return mixed\n */\n public function summarize(Activity $activity): mixed\n {\n $this->logger->info('[Log Activity] Summarizing activity ', [\n 'activityId' => $activity->getUuid(),\n 'payload' => $this->request->all(),\n ]);\n $this->authorize('update', $activity);\n\n $this->logger->info('[Log Activity] Validating summary');\n // Validate the payload.\n $this->validateSummary($activity);\n\n // All objects must belong to this team.\n /** @var User $user */\n $user = $this->request->user();\n $team = $user->getTeam();\n $crmService = $this->providerRegistry->get($team->crm->provider);\n\n try {\n $crmUser = $user;\n if ($user->isCrmRequired() === false) {\n $crmUser = $team->owner;\n }\n $crmService->setUser($crmUser);\n } catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());\n }\n\n $rawEntities = $this->request->input('entities');\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid(\n $this->request->input('layout_id')\n );\n\n // Delay execution of CRM jobs to avoid locking issues.\n $jobDelay = 0;\n\n // If we have arrived from a notification, mark it as read.\n $notificationId = $this->request->input('nId');\n if ($notificationId) {\n $notification = $user->unreadNotifications->where('id', $notificationId)->first();\n\n if ($notification) {\n $notification->markAsRead();\n }\n }\n\n $title = $this->request->input('title');\n $prospects = $this->request->input('prospects');\n $opportunityId = $this->request->input('opportunity_id');\n $stageId = $this->request->input('stage_id');\n $categoryId = $this->request->input('category_id');\n $summary = $this->request->input('summary');\n $crmProviderId = $this->request->input('crm_id');\n $isInternal = $this->request->input('is_internal') ?? false;\n\n $lead = null;\n $category = null;\n $account = null;\n $contact = null;\n $opportunity = null;\n $stage = null;\n $callStage = null;\n\n foreach ($prospects as $prospectData) {\n $objectId = $prospectData['id'];\n\n if ($objectId === null) {\n continue;\n }\n\n $objectType = $prospectData['type'];\n $this->logger->info('debug', ['prospect_data' => $prospectData]);\n\n try {\n if ($objectType === null) {\n $this->logger->info('no object type');\n if ($crmService instanceof SupportsObjectTypeParseInterface) {\n $objectType = $crmService->parseObjectType($objectId);\n }\n }\n\n switch ($objectType) {\n case 'lead':\n $this->logger->info('Processing lead');\n /** @var Lead|null $lead */\n $lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();\n\n // Lead does not exist locally, import it.\n if ($lead === null) {\n $this->logger->info('Lead does not exist locally');\n /** @var Lead $lead */\n $lead = $crmService->syncLead($objectId);\n }\n\n $this->logger->info('Lead found', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n if ($stageId === null) {\n $this->logger->info('Stage ID is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $lead->stage;\n\n break;\n }\n\n $this->logger->info('Looking for stage');\n // Determine if they have changed the stage.\n /** @var Stage $stage */\n $stage = $team->crm->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_LEAD)\n ->firstOrFail();\n\n $this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);\n if ($lead->stage_id && $lead->stage_id !== $stage->id) {\n $this->logger->info('Stage has changed');\n // Storage current stage on activity.\n $callStage = $lead->stage;\n\n // The stage has changed, update in remote CRM.\n dispatch(new UpdateStage($activity, $lead, $callStage, $stage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing lead stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->getName(),\n $stage->getName()\n ),\n [\n 'user' => $user->getUuid(),\n 'lead' => $lead->getUuid(),\n ]\n );\n } else {\n $this->logger->info('Stage has not changed');\n // Stage remains as current.\n $callStage = $stage;\n }\n\n break;\n\n case 'account':\n $this->logger->info('Processing account');\n // If the object is not a lead, it should be an account.\n $account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();\n\n // Account does not exist locally, import it.\n if ($account === null) {\n $this->logger->info('Account does not exist locally');\n $account = $crmService->syncAccount($objectId);\n }\n\n $this->logger->info('Account found', ['accountId' => $account->id]);\n\n break;\n case 'contact':\n $this->logger->info('processing contact');\n $contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();\n\n // Contact does not exist locally, import it.\n if (! $contact instanceof Contact) {\n $this->logger->info('contact does not exist locally');\n $contact = $crmService->syncContact($objectId);\n }\n\n $this->logger->info('resolving account');\n $account = $this->resolveAccount($team, $contact, $crmService, $prospects);\n\n break;\n }\n\n // If they have specified an opportunity, retrieve this with stage.\n if ($opportunityId) {\n $this->logger->info('opportunity id is set');\n $opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();\n\n // Opportunity does not exist locally, import it.\n if ($opportunity === null) {\n $this->logger->info('opportunity does not exist locally');\n $opportunity = $crmService->syncOpportunity($opportunityId);\n }\n\n if ($stageId === null) {\n $this->logger->info('stage id is null');\n // If it was not provided, just assume it is the current stage.\n $callStage = $opportunity->stage ?? null;\n } else {\n $this->logger->info('looking for stage');\n /** @var ?Stage $opportunityStage */\n $opportunityStage = $team->crm\n ->stages()\n ->uuid($stageId, false)\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n // There is a chance we still cannot import this opportunity.\n if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {\n $this->logger->info('opportunity stage has changed');\n // Storage current stage on activity.\n $callStage = $opportunity->stage;\n\n dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));\n\n $this->logger->info(\n sprintf(\n '[%s] User changing opportunity stage from %s to %s',\n $crmService->getDisplayName(),\n $callStage->name,\n $opportunityStage->name\n ),\n [\n 'userId' => $user->id_string,\n 'opportunityId' => $opportunity->id_string,\n ]\n );\n } else {\n $this->logger->info('opportunity stage has not changed');\n // Stage remains as current.\n $callStage = $opportunityStage;\n }\n }\n }\n\n if ($crmProviderId) {\n // Cast $crmProviderId to string otherwise it won't use database index for some records\n $linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();\n\n // Check if this activity has already been assigned to a different activity.\n if ($linkedActivity && $linkedActivity->id !== $activity->id) {\n throw new InvalidArgumentException(\n 'Sorry, the linked task has already been logged under a different call. '\n . 'Please choose another linked task.'\n );\n }\n }\n } catch (InvalidArgumentException $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorWrongArgs($exception->getMessage());\n } catch (Exception $exception) {\n $this->logger->error('Failed to process prospect', [\n 'prospect_data' => $prospectData,\n 'reason' => $exception->getMessage(),\n ]);\n\n // Return a JSON response with the response array and status code.\n return $this->response->errorInternalError(\n 'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'\n );\n }\n }\n\n if ($categoryId) {\n $category = PlaybookCategory::uuid($categoryId);\n\n if ($category->playbook->team_id !== $team->id) {\n throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');\n }\n\n $activity->playbook_category_id = $category->id;\n }\n\n $this->logger->info('Prospect data', [\n 'lead_id' => $lead?->getId(),\n 'account_id' => $account?->getId(),\n 'contact_id' => $contact?->getId(),\n 'opportunity_id' => $opportunity?->getId(),\n 'stage_id' => $stage?->getId(),\n ]);\n\n if ($title) {\n $activity->title = $title;\n }\n\n if ($summary) {\n $activity->summary = $summary;\n }\n\n if ($crmProviderId) {\n $activity->crm_provider_id = $crmProviderId;\n }\n\n if ($callStage) {\n $this->logger->info('Setting stage id', ['stageId' => $callStage->id]);\n $activity->stage_id = $callStage->id;\n }\n\n if ($lead) {\n $this->logger->info('Setting lead id', ['leadId' => $lead->id]);\n $activity->lead_id = $lead->id;\n\n // If we are changed from an account > lead, unset the account data.\n $this->logger->info('Unsetting account id, opportunity id, contact id, value');\n $activity->account_id = null;\n $activity->opportunity_id = null;\n $activity->contact_id = null;\n $activity->value = null;\n }\n\n if ($account) {\n $this->logger->info('Setting account id', ['accountId' => $account->id]);\n $activity->account_id = $account->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('unsetting lead id');\n $activity->lead_id = null;\n\n // Unset the contact if switching different accounts. Will be set up below if still applicable.\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {\n $this->logger->info('Unsetting contact id');\n $activity->contact_id = null;\n }\n }\n\n if ($opportunity) {\n $this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);\n $this->logger->info('unsetting lead id');\n $activity->opportunity_id = $opportunity->id;\n $activity->value = $opportunity->value;\n\n // If we are changed from an lead > account, unset the lead data.\n $activity->lead_id = null;\n }\n\n if ($contact) {\n $this->logger->info('setting contact id', ['contactId' => $contact->id]);\n $activity->contact_id = $contact->id;\n\n // If we are changed from an lead > account, unset the lead data.\n $this->logger->info('Unsetting lead id');\n $activity->lead_id = null;\n }\n\n $activity->is_internal = $isInternal;\n $activity->save();\n $activity->refresh();\n\n $this->logger->notice('Activity saved', [\n 'activity_id' => $activity->getId(),\n 'lead_id' => $activity->lead_id,\n 'account_id' => $activity->account_id,\n 'contact_id' => $activity->contact_id,\n 'opportunity_id' => $activity->opportunity_id,\n 'stage_id' => $activity->stage_id,\n 'crm_provider_id' => $activity->getCrmProviderId(),\n ]);\n\n // Store entities as field data on the activity.\n $updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);\n\n if ($activity->isLoggable()) {\n // Follow-up Task or Event data.\n $followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);\n\n $this->logger->info('CRM LOG manual log triggered', [\n 'activityId' => $activity->getUuid(),\n 'followupData' => $followupData,\n 'userId' => $user->getUuid(),\n ]);\n\n // Store data in the CRM.\n // ++add check for crm_required\n $job = new SaveActivity($activity, $followupData);\n\n if ($updatedData) {\n $job->delay(Carbon::now()->addMinutes($jobDelay));\n }\n\n dispatch($job);\n\n // Manually dispatch log for Opportunity or Prospect added\n if ($activity->hasOpportunity() || $activity->hasProspect()) {\n event(new ActivityProspectAdded(\n activity: $activity,\n eventSource: 'manually-log-crm-data'\n ));\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.\n *\n * @param ServiceInterface $service\n * @param Activity $activity\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array\n {\n $updatedData = [];\n $existingData = $activity->data()->get();\n\n // We need to delete any existing data to overwrite with latest values.\n $activity->data()->delete();\n\n $layoutEntities = $layout->entities()\n ->with('field', 'parent')\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->get();\n\n /** @var LayoutEntity $entity */\n foreach ($layoutEntities as $entity) {\n // If the user has provided a value for this entity\n if (array_key_exists($entity->id_string, $entities)) {\n $value = $entities[$entity->id_string];\n\n // Convert raw data into values that the CRM can consume.\n if ($value) {\n $value = $service->normalizeValue($entity->field->type, $value);\n }\n\n // Check the field is part of the activity-summary section.\n if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {\n // This is the internal database ID, not the external CRM ID.\n $objectId = null;\n\n switch ($entity->field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $objectId = $activity->account_id;\n\n break;\n\n case Field::OBJECT_CONTACT:\n $objectId = $activity->contact_id;\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n $objectId = $activity->opportunity_id;\n\n break;\n\n case Field::OBJECT_LEAD:\n $objectId = $activity->lead_id;\n\n break;\n\n case Field::OBJECT_TASK:\n case Field::OBJECT_EVENT:\n $objectId = $activity->id;\n\n break;\n }\n\n if ($objectId) {\n /** @var FieldData $data */\n $data = $activity->data()->create([\n 'crm_layout_entity_id' => $entity->id,\n 'crm_field_id' => $entity->crm_field_id,\n 'object_type' => $entity->field->object_type,\n 'object_id' => $objectId,\n 'value' => $value,\n ]);\n\n // Never send read-only field data to the CRM.\n if ($entity->read_only === false && $entity->is_visible) {\n $existingValue = $existingData\n ->where('crm_layout_entity_id', $entity->id)\n ->where('crm_field_id', $entity->crm_field_id)\n ->where('object_type', $entity->field->object_type)\n ->where('object_id', $objectId)\n ->first();\n\n // If the field was actually changed, we need to reflect this in the CRM too.\n if ($existingValue === null || $existingValue->value !== $value) {\n $updatedData[] = $data->id;\n }\n }\n }\n }\n }\n }\n\n return $updatedData;\n }\n\n /**\n * Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.\n *\n * @param ServiceInterface $crmService\n * @param Layout $layout\n * @param array $entities The raw entity data from user\n *\n * @return array\n */\n private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array\n {\n $fieldData = [];\n foreach ($entities as $entityId => $value) {\n // Only bother with fields that have a value.\n if ($value) {\n // Extract the entity from the UUID. Check the field is valid and part of the follow-up section.\n $entity = $layout->entities()\n ->uuid($entityId, false)\n ->whereHas('parent', function ($query) {\n $query->where('label', 'follow-up');\n })\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->first();\n\n if ($entity) {\n // Convert raw data into values that the CRM can consume.\n $value = $crmService->normalizeValue($entity->field->type, $value);\n\n // Add the field and value to the payload.\n $fieldData += [\n $entity->field->crm_provider_id => $value,\n ];\n }\n }\n }\n\n return $fieldData;\n }\n\n /**\n * @param Activity $activity\n */\n private function validateSummary(Activity $activity): void\n {\n $team = $activity->user->team;\n $crmProvider = $team->crm->provider;\n $attributes = [];\n\n $rules = [\n 'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,\n 'title' => 'string|max:250',\n 'prospects' => 'required|array',\n 'opportunity_id' => new CrmReference($crmProvider),\n 'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',\n 'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator\n 'summary' => 'max:50000',\n 'nId' => 'exists:notifications,id',\n 'crm_id' => new CrmReference($crmProvider),\n 'entities' => 'array',\n 'is_internal' => 'boolean',\n ];\n\n /** @var Layout $layout */\n $layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));\n\n // Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.\n $entities = $layout->entities()\n ->where('read_only', 0)\n ->whereHas('field', function ($query) {\n $query->where('is_selectable', 1);\n })\n ->whereHas('parent', function ($query) use ($activity) {\n if ($activity->isLoggable() === false) {\n $query->where('label', '<>', 'follow-up');\n }\n });\n\n $isInternal = $this->request->input('is_internal', false);\n\n foreach ($entities->get() as $entity) {\n $rules += $this->buildFieldValidator($entity, $isInternal);\n $attributes += $this->buildFieldMessage($entity);\n }\n\n $this->request->validate($rules, [], $attributes);\n }\n\n private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array\n {\n return [\n 'entities.' . $entity->id_string => $entity->getValidator($isInternal),\n ];\n }\n\n /**\n * @param LayoutEntity $entity\n *\n * @return array\n */\n private function buildFieldMessage(LayoutEntity $entity): array\n {\n $label = $entity->label;\n if ($label === null) {\n $label = $entity->field->label;\n }\n\n return [\n 'entities.' . $entity->id_string => $label,\n ];\n }\n\n public function search(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->debugLog(\n $user,\n 'User extracted from request',\n ['user' => $user->getId(), 'tz' => $user->getTimezone()]\n );\n\n $searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());\n\n $this->debugLog(\n $user,\n 'ActivitySearch criteria built',\n ['searchCriteria' => $searchCriteria]\n );\n\n $filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);\n\n $this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);\n\n $this->validateSearch($request, $filterSet);\n\n $this->debugLog($user, 'Request validated');\n\n $searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);\n\n /** @var Collection<Activity> $activities */\n $activities = $searchResponse['results'];\n\n $this->debugLog($user, 'Activities ES response extracted');\n\n $hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(\n $user->getTeamId(),\n TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),\n );\n\n if ($hideInternalMeetingsSetting?->getValue() === '1') {\n $activities = $activities->filter(function (Activity $activity) {\n if ($activity->is_internal && empty($activity->actual_start_time)) {\n return false;\n }\n\n return true;\n });\n }\n\n $this->debugLog($user, 'Internal meetings (?!) filtered');\n\n $this->response->getManager()\n ->parseIncludes([\n 'category',\n 'organizer.group',\n 'prospect',\n 'stage',\n 'opportunity',\n 'stats',\n 'scorecards',\n 'masterTrack',\n 'activeParticipants',\n 'notification',\n ])\n ->setSerializer(new JsonSerializer());\n\n $transformerExcludes = $this->request->input('exclude');\n if ($transformerExcludes) {\n $this->response->getManager()->parseExcludes($transformerExcludes);\n }\n\n $this->debugLog($user, 'Response Manager (?!) applied');\n\n $transformer = new ActivityTransformer();\n $transformer->setConsumer($user);\n\n $this->debugLog($user, 'Activity Transformer added');\n\n $resource = new \\League\\Fractal\\Resource\\Collection($activities, $transformer);\n $page = $searchCriteria->getPageNumber();\n\n $this->debugLog($user, 'Search criteria page number called', ['page' => $page]);\n\n $histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');\n\n $this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);\n\n return $this->response->withArray([\n 'pagination' => [\n 'total' => $searchResponse['totalHits'],\n 'current' => $page,\n 'prev' => max($page - 1, 1),\n 'next' => $page + 1,\n ],\n 'results' => $this->response->getManager()->createData($resource)->toArray(),\n 'histogram' => $histogram,\n ]);\n }\n\n private function debugLog(User $user, string $logMessage, ?array $context = []): void\n {\n // Debug for Learning People Only\n if ($user->getTeamId() !== 260) {\n return;\n }\n\n Log::notice(\n sprintf('[activity-search-controller] %s', $logMessage),\n $context\n );\n }\n\n /** @throws ValidationException */\n private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void\n {\n $rules = [\n 'exclude' => 'array',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ];\n\n if ($prefix !== null && mb_strpos($prefix, '.') !== false) {\n $rules[rtrim($prefix, '.')] = sprintf(\n 'required|array|max:%d',\n $filterSet->count()\n );\n }\n\n $validationRules = $filterSet->getValidationRules($prefix)\n ->merge($rules)\n ->all();\n\n $request->validate($validationRules);\n }\n\n public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $search = $this->updateOrCreateActivitySearch($request);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function updateActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('update', $search);\n\n $this->updateOrCreateActivitySearch($request, $search);\n\n return $this->response->withOk();\n }\n\n private function storeNamedSearchFilters(\n Collection $request,\n Search $search,\n FilterDefinitionCollection $filterSet,\n ?string $prefix = null,\n ): self {\n $arrayTypeProperties = $filterSet\n ->getPropertyTypes([\n FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,\n ])\n ->all();\n\n $supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);\n\n foreach ($supportedRequestProperties as $requestPropertyName) {\n if (! array_has($request, $requestPropertyName)) {\n continue;\n }\n\n /** @var string|string[] $propertyValue */\n $propertyValue = array_get($request, $requestPropertyName);\n $propertyName = $prefix === null\n ? $requestPropertyName\n : mb_substr($requestPropertyName, mb_strlen($prefix));\n\n $isArrayType = array_has($arrayTypeProperties, $propertyName);\n\n if (! $isArrayType) {\n /** @var string $requestPropertyValue */\n\n $search->filters()->updateOrCreate(\n [\n 'filter' => $propertyName,\n ],\n [\n 'value' => $propertyValue,\n ]\n );\n\n continue;\n }\n\n /** @var string[] $requestPropertyValue */\n\n /** @var SearchFilter[]|Collection $existingFilterValues */\n $existingFilterValuesKeyed = $search->filters()\n ->where('filter', $propertyName)\n ->get()\n ->keyBy('id');\n\n // Iterate over values provided as request parameters\n foreach ($propertyValue as $value) {\n /** @var SearchFilter|null $valueFilter */\n $valueFilter = $search->filters()\n ->where(\n [\n 'filter' => $propertyName,\n 'value' => $value,\n ]\n )\n ->first();\n\n if ($valueFilter !== null) {\n // Remove filter value pair from list to be deleted\n $existingFilterValuesKeyed->forget($valueFilter->id);\n } else {\n // Add new filter/value pair\n $search->filters()->updateOrCreate([\n 'filter' => $propertyName,\n 'value' => $value,\n ]);\n }\n }\n\n // Delete filter value pairs for this filter that no longer exist in request parameters\n foreach ($existingFilterValuesKeyed as $existingFilter) {\n $existingFilter->delete();\n }\n }\n\n /** @var Collection<int, SearchFilter> $filtersKeyed */\n $filtersKeyed = $search->filters()->get()->keyBy('filter');\n\n // wipe removed filters from this search\n foreach ($filtersKeyed as $filterName => $filter) {\n if (array_has($request, $prefix . $filterName)) {\n continue;\n }\n\n // Remove all filter values for this filter\n $search->filters()->where('filter', $filterName)->delete();\n }\n\n return $this;\n }\n\n /**\n * @throws AuthorizationException\n */\n public function fetchActivitySearch(\n Search $search,\n Request $request,\n SearchTransformer $searchTransformer,\n ): JsonResponse {\n $this->authorize('view', $search);\n\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $search->loadCount('automatedReports');\n\n return $this->response->withItem(\n $search,\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse\n {\n /** @var User $user */\n $user = $request->user();\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection(\n $user->searches()->withCount('automatedReports')->get(),\n $searchTransformer\n ->withConsumer($user)\n );\n }\n\n /**\n * Deletes a saved search\n *\n * @param Request $request\n * @param Search $search\n *\n * @throws Exception\n *\n * @return JsonResponse\n */\n public function deleteActivitySearch(Request $request, Search $search): JsonResponse\n {\n $this->authorize('delete', $search);\n\n // Disable and orphan any AutomatedReports that use this search\n $search->automatedReports()->withTrashed()->update([\n 'activity_search_id' => null,\n 'status' => false,\n ]);\n\n // Delete filters and the search itself\n $search->filters()->delete();\n $search->delete();\n\n return $this->response->withOk();\n }\n\n public function live(Request $request, ElasticActivityRepository $repository): JsonResponse\n {\n $user = $this->getUserFromRequest($request);\n\n $this->request->validate([\n 'sort_direction' => 'in:asc,desc',\n 'limit' => 'integer|min:1|max:50',\n 'page' => 'integer|min:1',\n ]);\n\n $activities = $repository->getLiveCoachingEligibleActivities(\n user: $user,\n lookBackMinutes: self::LOOK_BACK,\n limit: (int) $this->request->input('limit', 25),\n page: (int) $this->request->input('page', 1),\n sortBy: ['actual_start_time', 'scheduled_start_time'],\n sortDirection: (string) $this->request->input('sort_direction', 'asc'),\n );\n\n $this->response\n ->getManager()\n ->parseIncludes(['organizer.group', 'prospect'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($activities, new ActivityTransformer());\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function show(Activity $activity, ActivityService $activityService): JsonResponse\n {\n $this->authorize('show', $activity);\n\n $user = $activity->getUser();\n $team = $user->getTeam();\n\n // Sync the opportunity with the latest data if possible.\n if ($activity->opportunity_id) {\n try {\n $integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $integrationAdmin,\n 'providerSlug' => $team->getCrmConfiguration()->getProviderName(),\n ]);\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->syncOpportunity($activity->opportunity->crm_provider_id);\n } catch (Exception $exception) {\n // Move on.\n }\n }\n\n $activityData = $activityService->getActivityData($this->request->user(), $activity);\n\n return response()->json($activityData);\n }\n\n public function createRecording(Activity $activity)\n {\n $this->authorize('record', $activity);\n\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Tell Twilio to start recording this activity.\n if ($activity->recording_state === Activity::RECORDING_OFF) {\n $job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withCreated();\n }\n\n return $this->response->errorGone('Activity is already recording.');\n }\n\n public function updateRecording(Request $request, Activity $activity)\n {\n $this->authorize('record', $activity);\n\n $request->validate([\n 'preference' => 'boolean',\n 'state' => [\n 'string',\n Rule::in([\n Activity::RECORDING_IN_PROGRESS,\n Activity::RECORDING_PAUSED,\n ]),\n ],\n ]);\n\n if ($request->has('state')) {\n if ($activity->hasRecordingReasonComplianceRestricted()) {\n return $this->response->errorGone('Recording this number has been disabled by your organization.');\n }\n\n // Toggle the recording state between paused and resumed.\n if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {\n $job = (new ToggleRecording($activity, $request->input('state')))\n ->onQueue(Constants::QUEUE_CONFERENCES);\n\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Recording is not toggleable.');\n }\n\n if ($request->has('preference')) {\n $activity->update([\n 'recording_preference' => $request->input('preference') ? 1 : 0,\n ]);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorWrongArgs('Something went wrong');\n }\n\n public function stopRecording(Activity $activity)\n {\n $this->authorize('stopRecord', $activity);\n\n // Tell Twilio to stop recording this activity.\n if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {\n $job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);\n dispatch($job);\n\n return $this->response->withOk();\n }\n\n return $this->response->errorGone('Activity is not recording.');\n }\n\n /**\n * Add activity to this user's favorites playlist\n *\n * @throws AuthorizationException\n */\n public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse\n {\n $this->authorize('favorite', $activity);\n\n $user = $this->getUserFromRequest($this->request);\n $favorite = $activity->wasFavoritedBy($user);\n $name = $activity->activity_title ?? '';\n\n // It needs to check at least one record.\n if (! $favorite) {\n $favoritePlaylist = $user->favoritePlaylist();\n\n $playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(\n $activity,\n $user,\n $favoritePlaylist\n );\n\n if ($playlistActivity !== null) {\n $playlistActivity->update(\n // Just update, don't sort.\n ['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],\n );\n } else {\n $playlistActivity = $activity->playlistActivities()->create([\n 'playlist_id' => $favoritePlaylist->getId(),\n 'user_id' => $user->getId(),\n 'start_time' => 0,\n 'name' => mb_strimwidth($name, 0, 100),\n ]);\n // Sort it on top.\n $playlistActivity->update(\n [\n 'sort' => $playlistActivityRepository->calculateNewSortOrder(\n null,\n $playlistActivity,\n ),\n ],\n );\n }\n\n $playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);\n\n return new JsonResponse([], JsonResponse::HTTP_CREATED);\n }\n\n return new JsonResponse(\n [\n 'error' => [\n 'code' => AbstractResponse::CODE_CONFLICT,\n 'http_code' => JsonResponse::HTTP_CONFLICT,\n 'message' => 'Resource Already Exists',\n ],\n ],\n JsonResponse::HTTP_CONFLICT,\n );\n }\n\n /**\n * Remove activity from this user's favorites playlist\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unfavorite(Activity $activity)\n {\n $user = $this->request->user();\n\n $favorites = $activity->favoritedBy($user);\n\n if ($favorites && $favorites->isEmpty()) {\n return $this->response->errorNotFound('Favorite not found.');\n }\n\n $this->authorize('unfavorite', [$activity, $favorites]);\n\n // When you unfavorite an activity,\n // it should remove all the activities in it, including snippets.\n $isDeleted = $favorites->each(function ($favorite) {\n $favorite->forceDelete();\n });\n\n if ($isDeleted) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not remove favorite.');\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function notify(Activity $activity)\n {\n $this->authorize('notify', $activity);\n\n $user = $this->request->user();\n\n $existingNotification = $activity->availabilityNotifications()\n ->where('user_id', $user->id)\n ->exists();\n\n if ($existingNotification) {\n return $this->response->errorWrongArgs('Notification is already configured.');\n }\n\n $notification = Activity\\AvailabilityNotification::create([\n 'user_id' => $user->id,\n 'activity_id' => $activity->id,\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($notification, new AvailabilityNotificationTransformer());\n }\n\n /**\n * @param Activity $activity\n * @param Activity\\AvailabilityNotification $notification\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function unnotify(Activity $activity, Activity\\AvailabilityNotification $notification)\n {\n $this->authorize('unnotify', [$activity, $notification]);\n\n if ($notification->sent_at || $notification->delete()) {\n return $this->response->withNoContent();\n }\n\n return $this->response->errorGone('Could not delete notification.');\n }\n\n public function play(Request $request, Activity $activity)\n {\n $this->authorize('stream', $activity);\n\n $request->validate([\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $activity->plays()->create([\n 'user_id' => $user->getId(),\n 'start_time' => $request->input('start_time'),\n ]);\n\n return $this->response->withCreated();\n }\n\n /**\n * @param Activity $activity\n *\n * @return mixed\n */\n public function comment(Activity $activity)\n {\n return $this->newComment($activity);\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @return mixed\n */\n public function replyComment(Activity $activity, Comment $comment)\n {\n return $this->newComment($activity, $comment);\n }\n\n /**\n * @param Activity $activity\n * @param Comment|null $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n protected function newComment(Activity $activity, ?Comment $comment = null)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n 'type' => 'integer|between:0,3',\n 'visibility' => sprintf('nullable|integer|between:1,%d', count(Comment::getVisibilityLevels())),\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n $threadStartId = null;\n if ($comment) {\n $threadStartId = $comment->thread_start_id ?: $comment->id;\n }\n\n try {\n $newComment = Comment::create([\n 'parent_comment_id' => $comment->id ?? null,\n 'thread_start_id' => $threadStartId,\n 'activity_id' => $activity->id,\n 'user_id' => $this->request->user()->id,\n 'comment' => trim($this->request->input('comment')),\n 'start_time' => $this->request->input('start_time', 0),\n 'end_time' => $this->request->input('end_time', 0),\n 'type' => $this->request->input('type', Comment::TYPE_NEUTRAL),\n 'visibility' => $this->request->input('visibility', Comment::VISIBILITY_PUBLIC),\n ]);\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($newComment, new ActivityCommentTransformer());\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not create comment.' . $exception->getMessage());\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function updateComment(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'comment' => 'required|between:1,5000',\n //'start_time' => 'numeric|between:0,'.$activity->duration,\n //'end_time' => 'required_with:start_time|greater_than_or_equal:start_time|numeric|between:0,'.$activity->duration,\n ]);\n\n try {\n $comment->update([\n 'comment' => trim($this->request->input('comment')),\n ]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment.');\n }\n }\n\n public function updateCommentVisibility(Activity $activity, Comment $comment)\n {\n $this->authorize('comment', [$activity, $comment]);\n\n $this->request->validate([\n 'visibility' => sprintf('integer|between:1,%d', count(Comment::getVisibilityLevels())),\n ]);\n\n $visibility = $this->request->input('visibility');\n\n if ($comment->parent !== null) {\n return $this->response->errorWrongArgs('Comment visibility can only be updated on top level comments.');\n }\n\n try {\n $this->activityCommentService->updateCommentVisibility($comment, $visibility);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withOk();\n } catch (Exception $exception) {\n Sentry::captureException($exception);\n\n return $this->response->errorInternalError('Could not update comment\\'s visibility.');\n }\n }\n\n /**\n * @param Activity $activity\n * @param Comment $comment\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function deleteComment(Activity $activity, Comment $comment)\n {\n $this->authorize('deleteComment', [$activity, $comment]);\n\n // Delete comment and any children.\n $comment->delete();\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function fetchComments()\n {\n $user = $this->request->user();\n $this->request->validate([\n 'forUserId' => 'uuid:users,team_id,' . $user->team_id,\n 'types' => 'array',\n 'types.*' => 'integer|between:0,3',\n ]);\n $forUser = null;\n\n $types = [Comment::TYPE_NEUTRAL, Comment::TYPE_GAME_CHANGER, Comment::TYPE_POSITIVE];\n $user = $this->request->user();\n if ($this->request->has('forUserId')) {\n $forUser = $user->team->users()->uuid($this->request->input('forUserId'));\n }\n\n $comments = Comment::query()\n ->whereHas('activity', static function (Builder $builder) use ($user, $forUser): void {\n $builder\n // I left feedback on my own activity; or\n ->where('activities.user_id', $user->getId());\n if ($forUser) {\n // I left feedback on any activity for this user.\n $builder->orWhere([\n 'user_id' => $user->getId(),\n 'activities.user_id' => $forUser->getId(),\n ]);\n }\n })\n ->whereIn('type', $this->request->input('types', $types))\n ->orderBy('created_at', 'desc')\n ->get();\n\n $this->response\n ->getManager()\n ->parseIncludes(['activity', 'user'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($comments, new ActivityCommentTransformer());\n }\n\n public function deleteCoachingFeedback(Activity $activity, CoachingFeedback $coachingFeedback)\n {\n $this->authorize('deleteCoachingFeedback', [$activity, $coachingFeedback]);\n $activity = $coachingFeedback->getActivity();\n\n if ($coachingFeedback->delete()) {\n event(new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'delete-coaching-feedback',\n ));\n\n return $this->response->withOk();\n }\n\n return $this->response->withError('Delete operation failed. Contact support.', 500);\n }\n\n /**\n * Add new or update Coaching feedback\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n * @throws \\Illuminate\\Validation\\ValidationException\n *\n * @return mixed\n */\n public function putCoachingFeedback(Request $request, Activity $activity)\n {\n $user = $request->user();\n\n if (! $user instanceof User) {\n abort(403);\n }\n $teamId = $user->getTeamId();\n\n $this->authorize('coach', $activity);\n\n $this->request->validate([\n 'coach_id' => 'required|uuid:users,team_id,' . $teamId,\n 'coachee_id' => 'required|uuid:users,team_id,' . $teamId,\n 'visibility' => ['required', Rule::in(CoachingFeedback::VISIBILITIES)],\n 'coaching_sections.*.uuid' => 'required|uuid:coaching_sections',\n 'coaching_sections.*.score' => ['required', Rule::in(CoachingSectionFeedback::SCORES)],\n 'coaching_sections.*.summary' => 'string|max:10000',\n 'coaching_sections.*.criteria.*.uuid' => 'required|uuid:coaching_section_criteria',\n 'coaching_sections.*.criteria.*.note' => 'required|string|max:10000',\n 'sharedWithUsers' => [\n 'required_if:visibility,' . CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS,\n 'array',\n ],\n 'sharedWithUsers.*' => [\n 'uuid:users,team_id,' . $teamId,\n ],\n ]);\n\n /** @var User $coach */\n $coach = User::uuid($this->request->input('coach_id'));\n /** @var User $coachee */\n $coachee = User::uuid($this->request->input('coachee_id'));\n $coachingSectionFeedbacks = $this->request->input('coaching_sections');\n\n $previousRecord = $this->coachingFeedbackRepository->getOneForActivityByCoacheeAndCoach(\n $coachee->getId(),\n $coach->getId(),\n $activity->getId()\n );\n $recordIsNew = false;\n if ($previousRecord === null) {\n $recordIsNew = true;\n }\n\n if (! $coachee->isSameTeamId($coach)) {\n return $this->response->errorForbidden('User not member of your team.');\n }\n\n if (! is_array($coachingSectionFeedbacks) || count($coachingSectionFeedbacks) < 1) {\n return $this->response->withError('At least one Coaching Framework Section shall be scored.', 422);\n }\n\n if (! $activity->participants()->where('participants.user_id', $coachee->id)->exists()) {\n return $this->response->withError('Coached user did not participate activity.', 422);\n }\n\n $visibility = $this->request->input('visibility');\n\n $shouldSendNotification = $recordIsNew;\n if ($recordIsNew === false && $visibility !== $previousRecord->getVisibility()) {\n $shouldSendNotification = true;\n }\n\n /**\n * Create CoachingFeedback\n *\n * @var CoachingFeedback $coachingFeedback\n */\n $coachingFeedback = $activity->coachingFeedbacks()->updateOrCreate(\n [\n 'coach_id' => $coach->id,\n 'coachee_id' => $coachee->id,\n ],\n [\n 'framework_id' => $activity->category->id,\n 'visibility' => $visibility,\n ]\n );\n\n $sharedUserIds = [];\n if ($visibility === CoachingFeedback::VISIBLE_TO_SPECIFIC_USERS) {\n foreach ($this->request->input('sharedWithUsers') as $sharedWithUserUuid) {\n /** @var User $user */\n $user = User::uuid($sharedWithUserUuid);\n $sharedUserIds[] = $user->getId();\n }\n }\n\n $syncResult = $coachingFeedback->customAccessUsers()->sync($sharedUserIds);\n\n $scores = [];\n\n\n /**\n * Create CoachingSectionsFeedbacks.\n *\n * @var CoachingSectionFeedback $coachingSectionFeedback\n */\n foreach ($coachingSectionFeedbacks as $coachingSectionFeedbackInput) {\n $coachingSection = CoachingSection::uuid($coachingSectionFeedbackInput['uuid']);\n $coachingSectionFeedback = $coachingFeedback->sectionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_id' => $coachingSection->id,\n ],\n [\n 'score' => array_get($coachingSectionFeedbackInput, 'score'),\n 'summary' => array_get($coachingSectionFeedbackInput, 'summary') ?? '',\n ]\n );\n\n $scores[] = array_get($coachingSectionFeedbackInput, 'score');\n\n $criteria = array_get($coachingSectionFeedbackInput, 'criteria');\n if (is_array($criteria) && ! empty($criteria)) {\n foreach ($criteria as $criteriaFeedbackInput) {\n $coachingSectionFeedback->criterionFeedbacks()->updateOrCreate(\n [\n 'coaching_section_criterion_id' => CoachingSectionCriterion::uuid(array_get($criteriaFeedbackInput, 'uuid'))\n ->id,\n ],\n ['note' => array_get($criteriaFeedbackInput, 'note')],\n );\n }\n }\n }\n\n $coachingFeedback->average_score = array_sum($scores) / count($scores);\n\n if ($recordIsNew === false && $coachingFeedback->getAverageScore() !== $previousRecord->getAverageScore()) {\n $shouldSendNotification = true;\n }\n if (! empty($syncResult['attached']) || ! empty($syncResult['detached']) || ! empty($syncResult['updated'])) {\n $shouldSendNotification = true;\n }\n\n $coachingFeedback->save();\n // ensure updated at for coaching feedback on section feedback summary added.\n $coachingFeedback->touch();\n\n if ($shouldSendNotification) {\n event(new Coached($coachingFeedback));\n }\n\n Datadog::increment('jiminny.activity.score.update', 1, ['company' => $activity->user->team->slug]);\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n $coachingFeedbackTransformer = new CoachingFeedbackTransformer();\n $coachingFeedbackTransformer->setConsumer($this->getUserFromRequest($request));\n\n return $this->response->withItem($coachingFeedback, $coachingFeedbackTransformer);\n }\n\n\n /**\n * Retrieve category criteria for coaching.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachingSections(Activity $activity)\n {\n $this->authorize('coach', $activity);\n\n if ($activity->category === null) {\n return $this->response->errorUnprocessable('Category has not yet been assigned.');\n }\n\n $criteria = $activity\n ->category\n ->coachingSections()\n ->where('is_enabled', 1)\n ->orderBy('sequence', 'asc');\n\n $this->response\n ->getManager()\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withCollection($criteria->get(), new CoachingSectionsTransformer());\n }\n\n /**\n * @throws AuthorizationException\n * @throws ValidationException\n *\n * @return mixed\n */\n public function addToPlaylist(Activity $activity, PlaylistTrackFactoryInterface $playlistTrackFactory)\n {\n $this->request->validate([\n 'playlists' => 'required|array',\n 'playlists.*' => 'uuid:playlists',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'name' => 'required|max:100',\n ]);\n\n $this->authorize('addToPlaylist', [$activity, $this->request->input('playlists')]);\n\n $startTime = $this->request->input('start_time');\n $endTime = $this->request->input('end_time');\n $name = $this->request->input('name');\n /** @var User $user */\n $user = $this->request->user();\n\n // Get playlist by uuid.\n foreach ($this->request->input('playlists') as $playlistId) {\n // Pull out the playlist model.\n $playlist = Playlist::uuid($playlistId);\n\n $playlistTrackFactory->createTrack($playlist, $user, [\n 'name' => $name,\n 'activity' => $activity,\n 'start_time' => $startTime,\n 'end_time' => $endTime,\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function share(Request $request, Activity $activity): JsonResponse\n {\n $this->authorize('share', $activity);\n\n $request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'recipients.*.type' => 'in:user,group',\n 'recipients.*.id' => 'string|max:40',\n 'share' => 'string|max:255',\n ]);\n\n $user = $request->user();\n\n $recipients = $request->get('recipients');\n $users = $this->userService->convertRecipientsToUsers($user, $recipients);\n\n $shareData = [\n 'from_user_id' => $user->id,\n 'note' => $request->input('note'),\n 'start_time' => $request->input('start_time'),\n 'end_time' => $request->input('end_time'),\n ];\n\n // Create a share object against a notification provider channel\n if ($request->input('share')) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'notification_provider_channel' => $request->input('share'),\n ]\n )\n );\n\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n\n // Create a share object against each recipient\n foreach ($users as $recipient) {\n /** @var Share $share */\n $share = $activity->shares()->create(\n array_merge(\n $shareData,\n [\n 'to_user_id' => $recipient->id,\n ]\n )\n );\n\n // If parent_share_id has been selected yet\n if (! isset($shareData['parent_share_id'])) {\n // All subsequent shares need to reference this row as parent_share_id\n $shareData['parent_share_id'] = $share->id;\n }\n }\n\n return $this->response->withOk();\n }\n\n /**\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function coachRequest(Activity $activity)\n {\n $this->authorize('coachRequest', $activity);\n\n $this->request->validate([\n 'note' => 'string|max:1000',\n 'start_time' => 'numeric|between:0,' . $activity->duration,\n 'end_time' => 'nullable|greater_than_or_equal:start_time|numeric|between:0,' . $activity->duration,\n 'coachers.*.type' => 'required|in:user',\n 'coachers.*.id' => 'required',\n ]);\n\n $coachers = $this->request->get('coachers');\n $user = $this->request->user();\n $users = $this->userService->convertRecipientsToUsers($user, $coachers);\n\n foreach ($users as $coacher) {\n CoachRequest::create([\n 'user_id' => $coacher->id,\n 'activity_id' => $activity->id,\n 'note' => $this->request->get('note'),\n 'start_time' => $this->request->get('start_time'),\n 'end_time' => $this->request->get('end_time'),\n ]);\n }\n\n return $this->response->withOk();\n }\n\n public function createActivityTopicTriggers(Activity $activity, LoggerInterface $logger): HttpFoundation\\JsonResponse\n {\n $this->authorize('analyzeTopicTriggers', $activity);\n\n if (! $activity->hasTranscription()) {\n return new HttpFoundation\\JsonResponse(\n [\n 'error' => 'Transcription not found.',\n ],\n JsonResponse::HTTP_NOT_FOUND\n );\n }\n\n $logger->info(__METHOD__ . ': queued for analysis', [\n 'activity' => $activity->id_string,\n ]);\n\n dispatch(new ActivityAnalytics\\Job\\AnalyzeActivityTopicTriggers($activity));\n\n return new HttpFoundation\\JsonResponse(null, JsonResponse::HTTP_CREATED);\n }\n\n public function fetchActivityTopicTriggers(\n Activity $activity,\n LoggerInterface $logger,\n ActivityTopicTriggerTransformer $transformer\n ): HttpFoundation\\JsonResponse {\n $this->authorize('fetchTopicTriggers', $activity);\n\n $logger->debug(__METHOD__, [\n 'activity' => $activity->id_string,\n ]);\n\n if (! $activity->isProcessed()) {\n return new HttpFoundation\\JsonResponse([]);\n }\n\n $payload = [];\n\n if ($activity->hasTopicTriggers()) {\n $payload = $activity->getTopicTriggersSorted()\n ->map(\n static fn (Activity\\TopicTrigger $activityTopicTrigger): array\n => $transformer->transform($activityTopicTrigger)\n )\n ->values()\n ->all();\n }\n\n return new HttpFoundation\\JsonResponse($payload);\n }\n\n /**\n * @param Activity $activity\n * @param StatsTransformer $statsTransformer\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function stats(Activity $activity, StatsTransformer $statsTransformer)\n {\n $this->authorize('stream', $activity);\n\n if (! $activity->hasTranscription()) {\n return $this->response->errorNotFound('Waveform data is not yet generated.');\n }\n\n $this->response\n ->getManager()\n ->parseIncludes(['wavedata'])\n ->setSerializer(new JsonSerializer());\n\n return $this->response->withItem($activity, $statsTransformer);\n }\n\n public function destroy(Activity $activity)\n {\n $this->authorize('delete', $activity);\n\n $activity->delete();\n\n \\Log::info('Soft delete activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);\n\n return $this->response->withNoContent();\n }\n\n public function note(Activity $activity)\n {\n $this->authorize('note', $activity);\n\n $this->request->validate([\n 'note' => 'required|min:1|max:2000',\n 'time' => 'required|numeric|min:0|max:86400',\n ]);\n\n $note = $this->request->input('note');\n $time = $this->request->input('time');\n\n $this->activityService->setActivity($activity);\n $this->activityService->takeNote($this->getUser(), $note, $time);\n\n return $this->response->withCreated();\n }\n\n /**\n * Mark an activity as private.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPrivate(Activity $activity)\n {\n $this->authorize('markAsPrivate', $activity);\n\n if ($activity->is_private === false) {\n $activity->is_private = true;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * Mark an activity as public.\n *\n * @param Activity $activity\n *\n * @throws AuthorizationException\n *\n * @return mixed\n */\n public function markAsPublic(Activity $activity)\n {\n $this->authorize('markAsPublic', $activity);\n\n if ($activity->is_private) {\n $activity->is_private = false;\n $activity->save();\n\n return $this->response->withOk();\n }\n\n return $this->response->withNoContent();\n }\n\n /**\n * @throws LogicException\n */\n public function fetchCloudFrontS3MediaKeys(Activity $activity, PlaybackService $playbackService): JsonResponse\n {\n $masterTrack = $activity->masterTrack()->first();\n\n if (! $masterTrack instanceof Track) {\n throw new LogicException(sprintf('Master track not found for activity \"%s\"', $activity->getUuid()));\n }\n\n return $this->response->withArray(\n $playbackService->generateCookies(\n $masterTrack,\n $this->request->ip(),\n ),\n );\n }\n\n /**\n * @throws ValidationException\n */\n private function updateOrCreateActivitySearch(Request $request, ?Search $search = null): Search\n {\n $request->validate([\n 'name' => 'required|string|min:2|max:100',\n ]);\n\n $user = $this->getUserFromRequest($request);\n\n $searchName = $request->input('name');\n\n if ($search !== null) {\n $search->update([\n 'name' => $searchName,\n ]);\n\n return $search;\n }\n\n $request->validate([\n 'filters' => ['required', 'array', new MultidimensionalArrayMaxCharRule(limit: 255)],\n 'nudges' => 'array|max:' . count(Nudge::MAP_CHANNEL),\n 'nudges.*.channel' => 'required|in:' . implode(',', Nudge::MAP_CHANNEL),\n 'nudges.*.frequency' => 'required|in:' . implode(',', Nudge::MAP_FREQUENCY),\n 'nudges.*.expiresAt' => [\n 'required',\n 'date',\n 'after:today',\n 'before_or_equal:' . now()->addYear()->format('Y-m-d'),\n ],\n ]);\n\n $searchCriteria = Criteria::createFromRequest(\n Collection::make($request->input('filters', []))->all(),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($searchCriteria, $user);\n $this->validateSearch($request, $filterSet, 'filters.');\n\n /** @var Search $search */\n $search = Search::create([\n 'name' => $searchName,\n 'uuid' => Uuid::uuid4()->toString(),\n 'user_id' => $user->getId(),\n ]);\n\n Collection::make($request->input('nudges', []))\n ->each(fn (array $attributes): Nudge => $this->nudgeFactory->createNudge($search, $attributes));\n\n $this->storeNamedSearchFilters(Collection::make($request->all()), $search, $filterSet, 'filters.');\n\n return $search;\n }\n\n private function resolveAccount(\n Team $team,\n Contact $contact,\n ServiceInterface $crmService,\n array $prospects,\n ): ?Account {\n $this->logger->info('Resolving account from contact');\n $account = $contact->getAccount();\n\n if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS)) {\n $this->logger->info('Team does not have feature to link activity to multiple prospects');\n\n return $account;\n }\n\n $this->logger->info('Resolving account from prospect data');\n $accountData = array_filter(\n $prospects,\n static fn (array $prospectData): bool => $prospectData['type'] === 'account'\n );\n\n if (! empty($accountData)) {\n $this->logger->info('Found account data in prospects');\n $accountData = reset($accountData);\n\n $account = $team->crm->accounts()->where('crm_provider_id', $accountData['id'])->first();\n\n if (! $account instanceof Account) {\n $this->logger->info('Account not found in database, syncing from CRM');\n $account = $crmService->syncAccount($accountData['id']);\n }\n }\n\n $this->logger->info('Resolved account', ['account' => $account->getId()]);\n\n return $account;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7923116779312214135
|
-8385861082218261356
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Http\Controllers\API;
use Carbon\Carbon;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\In;
use Illuminate\Validation\ValidationException;
use InvalidArgumentException;
use Jiminny\Component\ActivityAnalytics;
use Jiminny\Component\ActivitySearch;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\PlaybackPage\Comments\Services\ActivityCommentService;
use Jiminny\Component\Queue\Constants;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Contracts\Nudge\NudgeFactoryInterface;
use Jiminny\Contracts\Playlist\PlaylistTrackFactoryInterface;
use Jiminny\Contracts\Repositories\PlaylistActivityRepository;
use Jiminny\Contracts\Services\Crm\ServiceInterface;
use Jiminny\Enums\TeamSetting;
use Jiminny\Events\Activities\AiAutomation\ActivityProspectAdded;
use Jiminny\Events\Activities\Coaching\Coached;
use Jiminny\Contracts\Services\Crm\SupportsObjectTypeParseInterface;
use Jiminny\Exceptions\LogicException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Http\Controllers\API\BaseController as Controller;
use Jiminny\Http\Controllers\CommentContextInterface;
use Jiminny\Http\Responses\Api\AbstractResponse;
use Jiminny\Http\Responses\Api\Response;
use Jiminny\Http\Serializers\JsonSerializer;
use Jiminny\Http\Transformers\ActivityCommentTransformer;
use Jiminny\Http\Transformers\ActivityTopicTriggerTransformer;
use Jiminny\Http\Transformers\ActivityTransformer;
use Jiminny\Http\Transformers\AvailabilityNotificationTransformer;
use Jiminny\Http\Transformers\CoachingFeedbackTransformer;
use Jiminny\Http\Transformers\CoachingSectionsTransformer;
use Jiminny\Http\Transformers\SearchTransformer;
use Jiminny\Http\Transformers\StatsTransformer;
use Jiminny\Jobs\Crm\SaveActivity;
use Jiminny\Jobs\Crm\UpdateStage;
use Jiminny\Jobs\Telephony\StartRecording;
use Jiminny\Jobs\Telephony\StopRecording;
use Jiminny\Jobs\Telephony\ToggleRecording;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Activity\CoachRequest;
use Jiminny\Models\Activity\Comment;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\Activity\Share;
use Jiminny\Models\CoachingFeedback;
use Jiminny\Models\CoachingSection;
use Jiminny\Models\CoachingSectionCriterion;
use Jiminny\Models\CoachingSectionFeedback;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\LayoutEntity;
use Jiminny\Models\Feature\FeatureEnum;
use Jiminny\Models\LanguageDialect;
use Jiminny\Models\Lead;
use Jiminny\Models\Nudge;
use Jiminny\Models\PlaybookCategory;
use Jiminny\Models\Playlist;
use Jiminny\Models\Stage;
use Jiminny\Models\Team;
use Jiminny\Models\Track;
use Jiminny\Models\User;
use Jiminny\Repositories\CoachingFeedbackRepository;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Repositories\TeamRepository;
use Jiminny\Rules\CrmReference;
use Jiminny\Rules\MultidimensionalArrayMaxCharRule;
use Jiminny\Services\ActivityService;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Crm\ProviderRegistry;
use Jiminny\Services\PlaybackService;
use Jiminny\Services\UserService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
use Ramsey\Uuid\Uuid;
use Sentry;
use Symfony\Component\HttpFoundation;
final class ActivityController extends Controller implements CommentContextInterface
{
// Number of minutes to look back on activities. i.e. a timeout on activity duration.
private const int LOOK_BACK = 180;
public function __construct(
private ProviderRegistry $providerRegistry,
private ActivityService $activityService,
Response $response,
private UserService $userService,
private ActivitySearch\Service\ActivitySearch $activitySearch,
private NudgeFactoryInterface $nudgeFactory,
private ActivityCommentService $activityCommentService,
private LoggerInterface $logger,
private readonly CoachingFeedbackRepository $coachingFeedbackRepository,
private readonly TeamRepository $teamRepository,
) {
parent::__construct($response);
}
public static function getCommentImplementation(): string
{
return Comment::class;
}
public function delete()
{
$this->request->validate([
'*' => 'uuid:activities',
]);
$deletedIds = [];
foreach ($this->request->all() as $activityId) {
$activity = Activity::idOrUuId($activityId);
try {
if ($this->authorize('delete', $activity)) {
$activity->delete();
$deletedIds[] = $activityId;
\Log::info('Soft deleted activity ' . $activity->id_string . ' by user ' . $this->getUser()->id);
}
} catch (AuthorizationException $authorizationException) {
// They didn't have permission.
}
}
return $this->response->withArray($deletedIds);
}
public function update(Request $request, Activity $activity)
{
$this->authorize('updateMetadata', $activity);
$request->validate([
'title' => 'string|max:250',
'category_id' => 'uuid:playbook_categories',
'language' => [
new In(
LanguageDialect::query()
->with('language')
->cursor()
->map(static function (LanguageDialect $languageDialect): string {
return $languageDialect->getLanguageLocale();
})
->all()
),
],
]);
if ($request->has('title')) {
$activity->title = $request->input('title');
}
if ($request->has('category_id')) {
$category = PlaybookCategory::uuid($request->input('category_id'));
if ($category->playbook->team_id !== $request->user()->team_id) {
return $this->response->errorNotFound('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
if ($request->has('language')) {
if (! $activity->isInProgress()) {
return $this->response->withError(
'Activity language can only be set while the meeting is in progress.',
400
);
}
$activity->setLanguageCode($request->input('language'));
}
$activity->save();
return $this->response->withOk();
}
// XXX: This should be merged with the update method.
/**
* @param Activity $activity
*
* @throws AuthorizationException
* @throws SocialAccountTokenInvalidException
*
* @return mixed
*/
public function summarize(Activity $activity): mixed
{
$this->logger->info('[Log Activity] Summarizing activity ', [
'activityId' => $activity->getUuid(),
'payload' => $this->request->all(),
]);
$this->authorize('update', $activity);
$this->logger->info('[Log Activity] Validating summary');
// Validate the payload.
$this->validateSummary($activity);
// All objects must belong to this team.
/** @var User $user */
$user = $this->request->user();
$team = $user->getTeam();
$crmService = $this->providerRegistry->get($team->crm->provider);
try {
$crmUser = $user;
if ($user->isCrmRequired() === false) {
$crmUser = $team->owner;
}
$crmService->setUser($crmUser);
} catch (SocialAccountTokenInvalidException $accountTokenInvalidException) {
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($accountTokenInvalidException->getMessage());
}
$rawEntities = $this->request->input('entities');
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid(
$this->request->input('layout_id')
);
// Delay execution of CRM jobs to avoid locking issues.
$jobDelay = 0;
// If we have arrived from a notification, mark it as read.
$notificationId = $this->request->input('nId');
if ($notificationId) {
$notification = $user->unreadNotifications->where('id', $notificationId)->first();
if ($notification) {
$notification->markAsRead();
}
}
$title = $this->request->input('title');
$prospects = $this->request->input('prospects');
$opportunityId = $this->request->input('opportunity_id');
$stageId = $this->request->input('stage_id');
$categoryId = $this->request->input('category_id');
$summary = $this->request->input('summary');
$crmProviderId = $this->request->input('crm_id');
$isInternal = $this->request->input('is_internal') ?? false;
$lead = null;
$category = null;
$account = null;
$contact = null;
$opportunity = null;
$stage = null;
$callStage = null;
foreach ($prospects as $prospectData) {
$objectId = $prospectData['id'];
if ($objectId === null) {
continue;
}
$objectType = $prospectData['type'];
$this->logger->info('debug', ['prospect_data' => $prospectData]);
try {
if ($objectType === null) {
$this->logger->info('no object type');
if ($crmService instanceof SupportsObjectTypeParseInterface) {
$objectType = $crmService->parseObjectType($objectId);
}
}
switch ($objectType) {
case 'lead':
$this->logger->info('Processing lead');
/** @var Lead|null $lead */
$lead = $team->crm->leads()->where('crm_provider_id', $objectId)->first();
// Lead does not exist locally, import it.
if ($lead === null) {
$this->logger->info('Lead does not exist locally');
/** @var Lead $lead */
$lead = $crmService->syncLead($objectId);
}
$this->logger->info('Lead found', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
if ($stageId === null) {
$this->logger->info('Stage ID is null');
// If it was not provided, just assume it is the current stage.
$callStage = $lead->stage;
break;
}
$this->logger->info('Looking for stage');
// Determine if they have changed the stage.
/** @var Stage $stage */
$stage = $team->crm->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_LEAD)
->firstOrFail();
$this->logger->info('Stage found', ['stageId' => $stage->id, 'lead_stage' => $lead->stage_id]);
if ($lead->stage_id && $lead->stage_id !== $stage->id) {
$this->logger->info('Stage has changed');
// Storage current stage on activity.
$callStage = $lead->stage;
// The stage has changed, update in remote CRM.
dispatch(new UpdateStage($activity, $lead, $callStage, $stage));
$this->logger->info(
sprintf(
'[%s] User changing lead stage from %s to %s',
$crmService->getDisplayName(),
$callStage->getName(),
$stage->getName()
),
[
'user' => $user->getUuid(),
'lead' => $lead->getUuid(),
]
);
} else {
$this->logger->info('Stage has not changed');
// Stage remains as current.
$callStage = $stage;
}
break;
case 'account':
$this->logger->info('Processing account');
// If the object is not a lead, it should be an account.
$account = $team->crm->accounts()->where('crm_provider_id', $objectId)->first();
// Account does not exist locally, import it.
if ($account === null) {
$this->logger->info('Account does not exist locally');
$account = $crmService->syncAccount($objectId);
}
$this->logger->info('Account found', ['accountId' => $account->id]);
break;
case 'contact':
$this->logger->info('processing contact');
$contact = $team->crm->contacts()->where('crm_provider_id', $objectId)->first();
// Contact does not exist locally, import it.
if (! $contact instanceof Contact) {
$this->logger->info('contact does not exist locally');
$contact = $crmService->syncContact($objectId);
}
$this->logger->info('resolving account');
$account = $this->resolveAccount($team, $contact, $crmService, $prospects);
break;
}
// If they have specified an opportunity, retrieve this with stage.
if ($opportunityId) {
$this->logger->info('opportunity id is set');
$opportunity = $team->crm->opportunities()->where('crm_provider_id', $opportunityId)->first();
// Opportunity does not exist locally, import it.
if ($opportunity === null) {
$this->logger->info('opportunity does not exist locally');
$opportunity = $crmService->syncOpportunity($opportunityId);
}
if ($stageId === null) {
$this->logger->info('stage id is null');
// If it was not provided, just assume it is the current stage.
$callStage = $opportunity->stage ?? null;
} else {
$this->logger->info('looking for stage');
/** @var ?Stage $opportunityStage */
$opportunityStage = $team->crm
->stages()
->uuid($stageId, false)
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
// There is a chance we still cannot import this opportunity.
if ($opportunityStage !== null && $opportunity !== null && $opportunity->stage_id !== $opportunityStage->id) {
$this->logger->info('opportunity stage has changed');
// Storage current stage on activity.
$callStage = $opportunity->stage;
dispatch(new UpdateStage($activity, $opportunity, $callStage, $opportunityStage));
$this->logger->info(
sprintf(
'[%s] User changing opportunity stage from %s to %s',
$crmService->getDisplayName(),
$callStage->name,
$opportunityStage->name
),
[
'userId' => $user->id_string,
'opportunityId' => $opportunity->id_string,
]
);
} else {
$this->logger->info('opportunity stage has not changed');
// Stage remains as current.
$callStage = $opportunityStage;
}
}
}
if ($crmProviderId) {
// Cast $crmProviderId to string otherwise it won't use database index for some records
$linkedActivity = Activity::where('crm_provider_id', (string) $crmProviderId)->first();
// Check if this activity has already been assigned to a different activity.
if ($linkedActivity && $linkedActivity->id !== $activity->id) {
throw new InvalidArgumentException(
'Sorry, the linked task has already been logged under a different call. '
. 'Please choose another linked task.'
);
}
}
} catch (InvalidArgumentException $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorWrongArgs($exception->getMessage());
} catch (Exception $exception) {
$this->logger->error('Failed to process prospect', [
'prospect_data' => $prospectData,
'reason' => $exception->getMessage(),
]);
// Return a JSON response with the response array and status code.
return $this->response->errorInternalError(
'Sorry, an error occurred. Please try again or reach out to support if the problem continues.'
);
}
}
if ($categoryId) {
$category = PlaybookCategory::uuid($categoryId);
if ($category->playbook->team_id !== $team->id) {
throw new InvalidArgumentException('Sorry, this category does not belong to your playbook.');
}
$activity->playbook_category_id = $category->id;
}
$this->logger->info('Prospect data', [
'lead_id' => $lead?->getId(),
'account_id' => $account?->getId(),
'contact_id' => $contact?->getId(),
'opportunity_id' => $opportunity?->getId(),
'stage_id' => $stage?->getId(),
]);
if ($title) {
$activity->title = $title;
}
if ($summary) {
$activity->summary = $summary;
}
if ($crmProviderId) {
$activity->crm_provider_id = $crmProviderId;
}
if ($callStage) {
$this->logger->info('Setting stage id', ['stageId' => $callStage->id]);
$activity->stage_id = $callStage->id;
}
if ($lead) {
$this->logger->info('Setting lead id', ['leadId' => $lead->id]);
$activity->lead_id = $lead->id;
// If we are changed from an account > lead, unset the account data.
$this->logger->info('Unsetting account id, opportunity id, contact id, value');
$activity->account_id = null;
$activity->opportunity_id = null;
$activity->contact_id = null;
$activity->value = null;
}
if ($account) {
$this->logger->info('Setting account id', ['accountId' => $account->id]);
$activity->account_id = $account->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('unsetting lead id');
$activity->lead_id = null;
// Unset the contact if switching different accounts. Will be set up below if still applicable.
if (! $team->hasFeature(FeatureEnum::LINK_ACTIVITY_TO_MULTIPLE_PROSPECTS) || empty($contact)) {
$this->logger->info('Unsetting contact id');
$activity->contact_id = null;
}
}
if ($opportunity) {
$this->logger->info('setting opportunity id', ['opportunityId' => $opportunity->id]);
$this->logger->info('unsetting lead id');
$activity->opportunity_id = $opportunity->id;
$activity->value = $opportunity->value;
// If we are changed from an lead > account, unset the lead data.
$activity->lead_id = null;
}
if ($contact) {
$this->logger->info('setting contact id', ['contactId' => $contact->id]);
$activity->contact_id = $contact->id;
// If we are changed from an lead > account, unset the lead data.
$this->logger->info('Unsetting lead id');
$activity->lead_id = null;
}
$activity->is_internal = $isInternal;
$activity->save();
$activity->refresh();
$this->logger->notice('Activity saved', [
'activity_id' => $activity->getId(),
'lead_id' => $activity->lead_id,
'account_id' => $activity->account_id,
'contact_id' => $activity->contact_id,
'opportunity_id' => $activity->opportunity_id,
'stage_id' => $activity->stage_id,
'crm_provider_id' => $activity->getCrmProviderId(),
]);
// Store entities as field data on the activity.
$updatedData = $this->storeEntities($crmService, $activity, $layout, $rawEntities);
if ($activity->isLoggable()) {
// Follow-up Task or Event data.
$followupData = $this->fetchFollowupEntities($crmService, $layout, $rawEntities);
$this->logger->info('CRM LOG manual log triggered', [
'activityId' => $activity->getUuid(),
'followupData' => $followupData,
'userId' => $user->getUuid(),
]);
// Store data in the CRM.
// ++add check for crm_required
$job = new SaveActivity($activity, $followupData);
if ($updatedData) {
$job->delay(Carbon::now()->addMinutes($jobDelay));
}
dispatch($job);
// Manually dispatch log for Opportunity or Prospect added
if ($activity->hasOpportunity() || $activity->hasProspect()) {
event(new ActivityProspectAdded(
activity: $activity,
eventSource: 'manually-log-crm-data'
));
}
}
return $this->response->withOk();
}
/**
* Extract any activity data to be upserted in the Lead/Opportunity/Task etc in the CRM.
*
* @param ServiceInterface $service
* @param Activity $activity
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function storeEntities(ServiceInterface $service, Activity $activity, Layout $layout, array $entities): array
{
$updatedData = [];
$existingData = $activity->data()->get();
// We need to delete any existing data to overwrite with latest values.
$activity->data()->delete();
$layoutEntities = $layout->entities()
->with('field', 'parent')
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->get();
/** @var LayoutEntity $entity */
foreach ($layoutEntities as $entity) {
// If the user has provided a value for this entity
if (array_key_exists($entity->id_string, $entities)) {
$value = $entities[$entity->id_string];
// Convert raw data into values that the CRM can consume.
if ($value) {
$value = $service->normalizeValue($entity->field->type, $value);
}
// Check the field is part of the activity-summary section.
if ($entity->parent && $entity->parent->label === 'activity-summary' && $value) {
// This is the internal database ID, not the external CRM ID.
$objectId = null;
switch ($entity->field->object_type) {
case Field::OBJECT_ACCOUNT:
$objectId = $activity->account_id;
break;
case Field::OBJECT_CONTACT:
$objectId = $activity->contact_id;
break;
case Field::OBJECT_OPPORTUNITY:
$objectId = $activity->opportunity_id;
break;
case Field::OBJECT_LEAD:
$objectId = $activity->lead_id;
break;
case Field::OBJECT_TASK:
case Field::OBJECT_EVENT:
$objectId = $activity->id;
break;
}
if ($objectId) {
/** @var FieldData $data */
$data = $activity->data()->create([
'crm_layout_entity_id' => $entity->id,
'crm_field_id' => $entity->crm_field_id,
'object_type' => $entity->field->object_type,
'object_id' => $objectId,
'value' => $value,
]);
// Never send read-only field data to the CRM.
if ($entity->read_only === false && $entity->is_visible) {
$existingValue = $existingData
->where('crm_layout_entity_id', $entity->id)
->where('crm_field_id', $entity->crm_field_id)
->where('object_type', $entity->field->object_type)
->where('object_id', $objectId)
->first();
// If the field was actually changed, we need to reflect this in the CRM too.
if ($existingValue === null || $existingValue->value !== $value) {
$updatedData[] = $data->id;
}
}
}
}
}
}
return $updatedData;
}
/**
* Extract any followup data to be dispatched in a job to create a new Task/Event in the CRM.
*
* @param ServiceInterface $crmService
* @param Layout $layout
* @param array $entities The raw entity data from user
*
* @return array
*/
private function fetchFollowupEntities(ServiceInterface $crmService, Layout $layout, array $entities): array
{
$fieldData = [];
foreach ($entities as $entityId => $value) {
// Only bother with fields that have a value.
if ($value) {
// Extract the entity from the UUID. Check the field is valid and part of the follow-up section.
$entity = $layout->entities()
->uuid($entityId, false)
->whereHas('parent', function ($query) {
$query->where('label', 'follow-up');
})
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->first();
if ($entity) {
// Convert raw data into values that the CRM can consume.
$value = $crmService->normalizeValue($entity->field->type, $value);
// Add the field and value to the payload.
$fieldData += [
$entity->field->crm_provider_id => $value,
];
}
}
}
return $fieldData;
}
/**
* @param Activity $activity
*/
private function validateSummary(Activity $activity): void
{
$team = $activity->user->team;
$crmProvider = $team->crm->provider;
$attributes = [];
$rules = [
'layout_id' => 'required|uuid:crm_layouts,crm_configuration_id,' . $team->crm_id,
'title' => 'string|max:250',
'prospects' => 'required|array',
'opportunity_id' => new CrmReference($crmProvider),
'category_id' => 'uuid:playbook_categories|required_unless:is_internal,true',
'stage_id' => 'uuid:stages,team_id,' . $team->id, // Todo: move to proper validator
'summary' => 'max:50000',
'nId' => 'exists:notifications,id',
'crm_id' => new CrmReference($crmProvider),
'entities' => 'array',
'is_internal' => 'boolean',
];
/** @var Layout $layout */
$layout = $team->crm->layouts()->uuid($this->request->input('layout_id'));
// Only validate fields, not headers etc. If not loggable, we don't care about follow-up section.
$entities = $layout->entities()
->where('read_only', 0)
->whereHas('field', function ($query) {
$query->where('is_selectable', 1);
})
->whereHas('parent', function ($query) use ($activity) {
if ($activity->isLoggable() === false) {
$query->where('label', '<>', 'follow-up');
}
});
$isInternal = $this->request->input('is_internal', false);
foreach ($entities->get() as $entity) {
$rules += $this->buildFieldValidator($entity, $isInternal);
$attributes += $this->buildFieldMessage($entity);
}
$this->request->validate($rules, [], $attributes);
}
private function buildFieldValidator(LayoutEntity $entity, bool $isInternal): array
{
return [
'entities.' . $entity->id_string => $entity->getValidator($isInternal),
];
}
/**
* @param LayoutEntity $entity
*
* @return array
*/
private function buildFieldMessage(LayoutEntity $entity): array
{
$label = $entity->label;
if ($label === null) {
$label = $entity->field->label;
}
return [
'entities.' . $entity->id_string => $label,
];
}
public function search(Request $request, ElasticActivityRepository $repository): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->debugLog(
$user,
'User extracted from request',
['user' => $user->getId(), 'tz' => $user->getTimezone()]
);
$searchCriteria = Criteria::createFromRequest($request->all(), $user->getTimezone());
$this->debugLog(
$user,
'ActivitySearch criteria built',
['searchCriteria' => $searchCriteria]
);
$filterSet = $this->activitySearch->getHomepageFilterSet($searchCriteria, $user);
$this->debugLog($user, 'FilterSet built', ['filterSet' => $filterSet]);
$this->validateSearch($request, $filterSet);
$this->debugLog($user, 'Request validated');
$searchResponse = $repository->onDemandSearch($user, $searchCriteria, $filterSet);
/** @var Collection<Activity> $activities */
$activities = $searchResponse['results'];
$this->debugLog($user, 'Activities ES response extracted');
$hideInternalMeetingsSetting = $this->teamRepository->getTeamSettingByTeamId(
$user->getTeamId(),
TeamSetting::HIDE_INTERNAL_SCHEDULED_MEETINGS->name(),
);
if ($hideInternalMeetingsSetting?->getValue() === '1') {
$activities = $activities->filter(function (Activity $activity) {
if ($activity->is_internal && empty($activity->actual_start_time)) {
return false;
}
return true;
});
}
$this->debugLog($user, 'Internal meetings (?!) filtered');
$this->response->getManager()
->parseIncludes([
'category',
'organizer.group',
'prospect',
'stage',
'opportunity',
'stats',
'scorecards',
'masterTrack',
'activeParticipants',
'notification',
])
->setSerializer(new JsonSerializer());
$transformerExcludes = $this->request->input('exclude');
if ($transformerExcludes) {
$this->response->getManager()->parseExcludes($transformerExcludes);
}
$this->debugLog($user, 'Response Manager (?!) applied');
$transformer = new ActivityTransformer();
$transformer->setConsumer($user);
$this->debugLog($user, 'Activity Transformer added');
$resource = new \League\Fractal\Resource\Collection($activities, $transformer);
$page = $searchCriteria->getPageNumber();
$this->debugLog($user, 'Search criteria page number called', ['page' => $page]);
$histogram = array_pluck(array_get($searchResponse, 'histogram.buckets', []), 'doc_count', 'key_as_string');
$this->debugLog($user, 'Histogram generated. Response is ready.', ['histogram' => $histogram]);
return $this->response->withArray([
'pagination' => [
'total' => $searchResponse['totalHits'],
'current' => $page,
'prev' => max($page - 1, 1),
'next' => $page + 1,
],
'results' => $this->response->getManager()->createData($resource)->toArray(),
'histogram' => $histogram,
]);
}
private function debugLog(User $user, string $logMessage, ?array $context = []): void
{
// Debug for Learning People Only
if ($user->getTeamId() !== 260) {
return;
}
Log::notice(
sprintf('[activity-search-controller] %s', $logMessage),
$context
);
}
/** @throws ValidationException */
private function validateSearch(Request $request, FilterDefinitionCollection $filterSet, ?string $prefix = null): void
{
$rules = [
'exclude' => 'array',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
];
if ($prefix !== null && mb_strpos($prefix, '.') !== false) {
$rules[rtrim($prefix, '.')] = sprintf(
'required|array|max:%d',
$filterSet->count()
);
}
$validationRules = $filterSet->getValidationRules($prefix)
->merge($rules)
->all();
$request->validate($validationRules);
}
public function createActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$search = $this->updateOrCreateActivitySearch($request);
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function updateActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('update', $search);
$this->updateOrCreateActivitySearch($request, $search);
return $this->response->withOk();
}
private function storeNamedSearchFilters(
Collection $request,
Search $search,
FilterDefinitionCollection $filterSet,
?string $prefix = null,
): self {
$arrayTypeProperties = $filterSet
->getPropertyTypes([
FilterDefinitionCollection::PROPERTY_TYPE_ARRAY,
])
->all();
$supportedRequestProperties = $filterSet->getSupportedRequestProperties($prefix);
foreach ($supportedRequestProperties as $requestPropertyName) {
if (! array_has($request, $requestPropertyName)) {
continue;
}
/** @var string|string[] $propertyValue */
$propertyValue = array_get($request, $requestPropertyName);
$propertyName = $prefix === null
? $requestPropertyName
: mb_substr($requestPropertyName, mb_strlen($prefix));
$isArrayType = array_has($arrayTypeProperties, $propertyName);
if (! $isArrayType) {
/** @var string $requestPropertyValue */
$search->filters()->updateOrCreate(
[
'filter' => $propertyName,
],
[
'value' => $propertyValue,
]
);
continue;
}
/** @var string[] $requestPropertyValue */
/** @var SearchFilter[]|Collection $existingFilterValues */
$existingFilterValuesKeyed = $search->filters()
->where('filter', $propertyName)
->get()
->keyBy('id');
// Iterate over values provided as request parameters
foreach ($propertyValue as $value) {
/** @var SearchFilter|null $valueFilter */
$valueFilter = $search->filters()
->where(
[
'filter' => $propertyName,
'value' => $value,
]
)
->first();
if ($valueFilter !== null) {
// Remove filter value pair from list to be deleted
$existingFilterValuesKeyed->forget($valueFilter->id);
} else {
// Add new filter/value pair
$search->filters()->updateOrCreate([
'filter' => $propertyName,
'value' => $value,
]);
}
}
// Delete filter value pairs for this filter that no longer exist in request parameters
foreach ($existingFilterValuesKeyed as $existingFilter) {
$existingFilter->delete();
}
}
/** @var Collection<int, SearchFilter> $filtersKeyed */
$filtersKeyed = $search->filters()->get()->keyBy('filter');
// wipe removed filters from this search
foreach ($filtersKeyed as $filterName => $filter) {
if (array_has($request, $prefix . $filterName)) {
continue;
}
// Remove all filter values for this filter
$search->filters()->where('filter', $filterName)->delete();
}
return $this;
}
/**
* @throws AuthorizationException
*/
public function fetchActivitySearch(
Search $search,
Request $request,
SearchTransformer $searchTransformer,
): JsonResponse {
$this->authorize('view', $search);
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
$search->loadCount('automatedReports');
return $this->response->withItem(
$search,
$searchTransformer
->withConsumer($user)
);
}
public function listActivitySearch(Request $request, SearchTransformer $searchTransformer): JsonResponse
{
/** @var User $user */
$user = $request->user();
$this->response
->getManager()
->setSerializer(new JsonSerializer());
return $this->response->withCollection(
$user->searches()->withCount('automatedReports')->get(),
$searchTransformer
->withConsumer($user)
);
}
/**
* Deletes a saved search
*
* @param Request $request
* @param Search $search
*
* @throws Exception
*
* @return JsonResponse
*/
public function deleteActivitySearch(Request $request, Search $search): JsonResponse
{
$this->authorize('delete', $search);
// Disable and orphan any AutomatedReports that use this search
$search->automatedReports()->withTrashed()->update([
'activity_search_id' => null,
'status' => false,
]);
// Delete filters and the search itself
$search->filters()->delete();
$search->delete();
return $this->response->withOk();
}
public function live(Request $request, ElasticActivityRepository $repository): JsonResponse
{
$user = $this->getUserFromRequest($request);
$this->request->validate([
'sort_direction' => 'in:asc,desc',
'limit' => 'integer|min:1|max:50',
'page' => 'integer|min:1',
]);
$activities = $repository->getLiveCoachingEligibleActivities(
user: $user,
lookBackMinutes: self::LOOK_BACK,
limit: (int) $this->request->input('limit', 25),
page: (int) $this->request->input('page', 1),
sortBy: ['actual_start_time', 'scheduled_start_time'],
sortDirection: (string) $this->request->input('sort_direction', 'asc'),
);
$this->response
->getManager()
->parseIncludes(['organizer.group', 'prospect'])
->setSerializer(new JsonSerializer());
return $this->response->withCollection($activities, new ActivityTransformer());
}
/**
* @param Activity $activity
*
* @throws AuthorizationException
*
* @return mixed
*/
public function show(Activity $activity, ActivityService $activityService): JsonResponse
{
$this->authorize('show', $activity);
$user = $activity->getUser();
$team = $user->getTeam();
// Sync the opportunity with the latest data if possible.
if ($activity->opportunity_id) {
try {
$integrationAdmin = $user->isCrmRequired() ? $user : $team->getOwner();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $integrationAdmin,
'providerSlug' => $team->getCrmConfiguration()->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->syncOpportunity($activity->opportunity->crm_provider_id);
} catch (Exception $exception) {
// Move on.
}
}
$activityData = $activityService->getActivityData($this->request->user(), $activity);
return response()->json($activityData);
}
public function createRecording(Activity $activity)
{
$this->authorize('record', $activity);
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Tell Twilio to start recording this activity.
if ($activity->recording_state === Activity::RECORDING_OFF) {
$job = (new StartRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withCreated();
}
return $this->response->errorGone('Activity is already recording.');
}
public function updateRecording(Request $request, Activity $activity)
{
$this->authorize('record', $activity);
$request->validate([
'preference' => 'boolean',
'state' => [
'string',
Rule::in([
Activity::RECORDING_IN_PROGRESS,
Activity::RECORDING_PAUSED,
]),
],
]);
if ($request->has('state')) {
if ($activity->hasRecordingReasonComplianceRestricted()) {
return $this->response->errorGone('Recording this number has been disabled by your organization.');
}
// Toggle the recording state between paused and resumed.
if (! $activity->isRecordingState(Activity::RECORDING_OFF)) {
$job = (new ToggleRecording($activity, $request->input('state')))
->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Recording is not toggleable.');
}
if ($request->has('preference')) {
$activity->update([
'recording_preference' => $request->input('preference') ? 1 : 0,
]);
return $this->response->withOk();
}
return $this->response->errorWrongArgs('Something went wrong');
}
public function stopRecording(Activity $activity)
{
$this->authorize('stopRecord', $activity);
// Tell Twilio to stop recording this activity.
if ($activity->isRecordingState(Activity::RECORDING_IN_PROGRESS)) {
$job = (new StopRecording($activity))->onQueue(Constants::QUEUE_CONFERENCES);
dispatch($job);
return $this->response->withOk();
}
return $this->response->errorGone('Activity is not recording.');
}
/**
* Add activity to this user's favorites playlist
*
* @throws AuthorizationException
*/
public function favorite(Activity $activity, PlaylistActivityRepository $playlistActivityRepository): JsonResponse
{
$this->authorize('favorite', $activity);
$user = $this->getUserFromRequest($this->request);
$favorite = $activity->wasFavoritedBy($user);
$name = $activity->activity_title ?? '';
// It needs to check at least one record.
if (! $favorite) {
$favoritePlaylist = $user->favoritePlaylist();
$playlistActivity = $playlistActivityRepository->findByBaseActivityUserAndPlaylist(
$activity,
$user,
$favoritePlaylist
);
if ($playlistActivity !== null) {
$playlistActivity->update(
// Just update, don't sort.
['start_time' => 0, 'name' => mb_strimwidth($name, 0, 100)],
);
} else {
$playlistActivity = $activity->playlistActivities()->create([
'playlist_id' => $favoritePlaylist->getId(),
'user_id' => $user->getId(),
'start_time' => 0,
'name' => mb_strimwidth($name, 0, 100),
]);
// Sort it on top.
$playlistActivity->update(
[
'sort' => $playlistActivityRepository->calculateNewSortOrder(
null,
$playlistActivity,
),
],
);
}
$playlistActivityRepository->calculateNewSortOrder(null, $playlistActivity);
return new JsonResponse([], JsonResponse::HTTP_CREATED);
}
return new JsonResponse(
[
'error' => [
'code' => AbstractResponse::CODE_CONFLICT,
'http_code' => JsonResponse::HTTP_CONFLICT,
'message' => 'Resource Already Exists',
],
],
JsonResponse::HTTP_CONFLICT,
);
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71178
|
NULL
|
0
|
2026-05-22T11:28:47.666241+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449327666_m2.jpg...
|
PhpStorm
|
faVsco.js – ActivityController.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449327666_m2.jpg...
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4235983745889776938
|
-8204421443435123770
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
PhostormFV faVsco.jsProiect v© UploadController.pnp© ActionitemsController.php© ActivityController.phpcAicrmnotescontroller.onpbasecontroller.onpc) Clientl okencontroller.ono© CrmController.phpC) DealLevelPromptscontroller.php© DealRiskcontroller.php©)Instantmeetingcontroller.phoC) LanquageController.phpC)LavoutManagementcontroller.ohoP LiveFeedController.ohnC)Meetinascontroller.onoC) MessageController.ohoC) MetadataController.oho© MobileSettingsController.phpC)MomentController.oho9) NudaeController nhnYc) NumberAllocatorControlier nhnlOrganizationLicensesController.php© OrganizationMembersController.php© OrganizationRetentionPolicyController© OrganizationRolesController.php© OrganizationSyncController.phpDartnerController.onp© PhoneNumberController.php€ PlaybackController.php© PlaylistController.php0) ScimController.php© SidekickController.php€ SoftphoneController.phpc) ssocontroller.phpc) subscriptionController.phpc)TeamalAutomationcontroller.onoC)TeamAiContextController.onog TeamController.ohpC) TeaminsiahtsController.ohoC) TranscriotionController.ohoC) TranslationController.onoC) UserController. ohni@ VocabularvController.ohn>M AuthMGustomerAniM internal• D Kiosk• MTeamc@ ActivitvController.php© AutomatedReportsController.php(e) NachhoardControllor nhn(e)ImnersonationController.phosavercuvity.ong•PurgeLookupcache.pnposyncriannat.pnp© SyncToPlanhat.php©PlaybackController.phppnp api.phpC) CreateSmsSentEvent.php(C) PlanhatActivityListener.pho(C) AskAnythingPromptService.pho(C) AutomatedReportsRepositorv.php(C) AutomatedReportsCommand.phpphp api v2.phpC) RequestGenerateReportJob.pho(C) AutomatedReportResult.php©AutomatedReport.ohpk?phpnamesnace liminnv Httn ControllensApTIuse cardon carbonuse ChaseConey \LaravelDatadogHelper\Datadog;use cxception,use euLuninace Auch access auchorizaclonexception.use 1uluminare varabase cloouent bullder.use Iuluminace nuup usonkesponseuse ILLuminate Hctp requestuse 1lluminate support collectionuse 1lluminate support racades Loouse 1LLuminate validation kuleuse 1LLuminate validation kules 1n^useLuminate vauicatzon valoationexcentionsuse Jiminny Comoonent ActivitvAnalvtics:use Jiminny Component \ActivitySearch\F1lterDefinitionColLection;luse _Jiminnv|Contracts\ES\Events|UodateSingleFntitv•use Jiminnv Contracts ES UndateTaraetEnum:use Jiminnv Contracts Nudae NudaeSactorvIntenface:use Jiminnv Contracts Plavlist PlavlistTrackFactorvInterface:use Jiminny\Contracts\Repositories \PlaylistActivityRepository:use Jiminnv Contracts Services Crm. ServiceIntenface:use Jiminny\Enums \TeamSetting:use Jiminny\Events \Activities\AiAutomation\ActivityProspectAdded;use Jiminny Events \Activities\Coaching\Coached:use Jiminny Contracts\Services\Crm\Supports0bjectTypeParseInterface:use Jiminny cxcepcions Loq1ctxcepc1on*use Jiminny Exceptions SocialAccountTokenTnvalidFycention•use Jiminny Http\Controllers\API\BaseController as Controller:use Jiminny Http\Controllers\CommentContextInterface:use Jiminny Http kesponses Ap1 Abstracckesponse*use Jiminny Htto responses Aot kesponseruse Jimnny Htto sertauzzers usonserzauzer:use Jiminny Htto Transformers ActivitycommentTransformer:use Jiminny HttpWraasforiêrs. Ac vAccept File 3- a% Reject EileoRmer. * 6 of 6 files →use Jiminny\Http\Transformers\ActivityTransformer13 (= laravel.log« SF jiminny@localhost]4 HS_local [jiminny@localhost]& console [PROD](C) MatchCrmData.onp© UpdateCrmFieldDataJob.php# console SlAGiNGuse ILLuminate Contracts Queue Shoulduueue:final readonlv class UodateSalesforceAccount imolements ShouldOueueoublic functionorivate ProviderRegistry ScrmRegistry..private LoggerInterface $logger,D1..}public function handle(TeamCreated|TeamUpdated Sevent): void$teamCreator = $event->teamCreator;if (Sevent->team->account_id === null || $teamCreator === null) {ScrmService = $this->crmRegistry->get($teamCreator->getTeam->getCrmConfiguration->getProviderNamesteam = steamureator->oereamorSintearationAdmin = SteCreator->isCrmRequiredO 2 SteamCreator : Steam->qetOwnerO:if (SteamCreator->isCrmRequired)scrmservice-›secusersceancreacorr} else {scrmservice->setuserreamcreator->oetleamo->qetuwneron:tryfScrmResolver = app( abstract: Crm0wnerResolver::class.'providerSlug' => Steam->getCrmConfiguration->qetProviderNameO} catch (Exception $e) {sthas->loqger->infol'Attemot to resolve CRi service for "sevent->team->cetluldo tarled.".'excention' => se->cetcode0.itny sSevent->team->account->aptCrmPnovidenTd0'Jiminny_Client_ID__c' => Sevent->team->getUuidO=> Sevent->team->getTier->getTitleO,100% 52• Fri 22 May 14:28:47AskJiminnyReportActivityServiceTest vCascadeInvestigate Foreign KeSalestorce Token Fallb+0..UodateCrmFieldDataJob.pho+7 -2Read CreateActivitv=romUoloadService.ono• CreateActivityFromUploadService.phpCreateActivitv=romUoloadService.onol+6-21Now the medium priority nemsRead UpdateSalesforceAccount.php" UodateSalesforceAccount.ohol• UpdateSalesforceAccount.php+16 -6Now the ActivityController opportunity sync:Explored ActivityController.php and searched z queries• ActivityController.ohpActivityController.php+7 -76/6 tasks done >All 6 places have been updated to use CrmOwnerResolver with fallback to other team members tokens when theadminlowner token ic invalidlSummary of ChangesHigh Priority - Same root cause as Twilio1. MatchCrmData.oho: 179-194 - Critical iob for matchina CRM data on dialer recordinas2. HydrateCrmDataByExternalCallIdJob.php: 60-76 - Hydrates CRM data by external call ID (Amazon Connect)3. UodateCrmFieldDataJob.oho:202-217 - Uodates CRM field data on activities4. CreateActivityFromUploadService.php:113-119 - Parses CRM records for uploaded recordingsMedium Prioritv5.UndateSalesforceAccount.nhn:28-44 - Undates Salestorce account on team chanaes.b. Activitycontroller.php:11//-1192 - syncs opportunity on activity viewPattern Used1. Creates a CrmownerResolver with the team and intended admin2. Calls prepareCrmService() which tries the admin first, then falls back to team members with active tokens (ordered6 tiles with chanaes vView alllapp/Listeners/Teams/# UpdateSalesforceAccount.pho +16-5app/Jobs/Activity/Import/@ MatchCrmData.php +9-4app/Component/Uploader/Services/ D CreateActivityFromUploadService.php +7 -2annllohe/Activitvllmnort/MlindatoCrmGioldData.loh.nhnt8.app/Jobs/Activity/Import/ HydrateCrmDataByExternalCallidJob.php +8 -3aoo/Htto/Controllers/AP|/M ActivitvController.ohv +8* Reiect allAccent alliAsk anvthina (&4-L)<> Code Claude Qnus 1.7 MediumW Windsurf Teamc1-1.UTE.8io 4 spaces...
|
71177
|
NULL
|
NULL
|
NULL
|
|
71177
|
NULL
|
0
|
2026-05-22T11:28:45.698350+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449325698_m2.jpg...
|
PhpStorm
|
faVsco.js – ActivityController.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449325698_m2.jpg...
|
Project: faVsco.js, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8043719072324535154
|
-8628527368849355612
|
app_switch
|
hybrid
|
NULL
|
Project: faVsco.js, menu
PhostormFV faVsco.jsProie Project: faVsco.js, menu
PhostormFV faVsco.jsProiect v© UploadController.pnp© ActionitemsController.php© ActivityController.phpcAicrmnotescontroller.onpbasecontroller.onpc) Clientl okencontroller.ono© CrmController.phpC) DealLevelPromptscontroller.php© DealRiskcontroller.php©)Instantmeetingcontroller.phoC) LanquageController.phoC)LavoutManagementcontroller.ohoP LiveFeedController.ohnC)Meetinascontroller.onoC) MessageController.ohoC) MetadataController.oho© MobileSettingsController.phpC)MomentController.oho9) NudaeController nhnYc) NumberAllocatorControlier nhnlOrganizationLicensesController.php© OrganizationMembersController.php© OrganizationRetentionPolicyController© OrganizationRolesController.php© OrganizationSyncController.phpDartnerController.onp© PhoneNumberController.php€ PlaybackController.php© PlaylistController.php0) ScimController.php© SidekickController.php€ SoftphoneController.phpc) ssocontroller.phpc) subscriptionController.phpc)TeamalAutomationcontroller.onoC)TeamAiContextController.onog TeamController.ohpC) TeaminsiahtsController.ohoC) TranscriotionController.ohoC) TranslationController.onoC) UserController. ohni@ VocabularvController.ohn>M AuthMGustomerAniM internal• D Kiosk• MTeamc@ ActivitvController.php© AutomatedReportsController.php(e) NachhoardControllor nhn(e)ImnersonationController.phosavercuvity.ong•PurgeLookupcache.pnposyncriannat.pnp© SyncToPlanhat.php©PlaybackController.phppnp api.phpC) CreateSmsSentEvent.php(C) PlanhatActivityListener.pho(C) AskAnythingPromptService.pho(C) AutomatedReportsRepository.php(C) AutomatedReportsCommand.phpphp api v2.phpC) RequestGenerateReportJob.pho(C) AutomatedReportResult.php©AutomatedReport.ohpk?phpnamesnace liminnv Httn ControllensApTIuse cardon carbonuse ChaseConey \LaravelDatadogHelper\Datadog;use cxception,use euLuninace Auchaccess auchorizaclonexceptzon.use 1uluminare varabase cloouent bullder.use Iuluminace nuup usonkesponseuse 1LLuminate Hctp requestuse 1lluminate support collectionuse 1lluminate support racades Loouse 1LLuminate validation kuleuse 1LLuminate validation kules 1n^useLuminate vauicatzon valoationexcention:use Jiminny Comoonent ActivitvAnalvtics:use Jiminny Component \ActivitySearch\F1lterDefinitionColLection;luse _Jiminnv|Contracts\ES\Events|UodateSingleFntitv•use Jiminnv Contracts ES UndateTaraetEnum:use Jiminnv Contracts Nudae NudaeSactorvIntenface:use Jiminnv Contracts Plavlist PlavlistTrackFactorvInterface:use Jiminny\Contracts\Repositories \PlaylistActivityRepository:use Jiminnv Contracts Services Crm. ServiceIntenface:use Jiminny\Enums \TeamSetting:use Jiminny\Events \Activities\AiAutomation\ActivityProspectAdded;use Jiminny Events \Activities\Coaching\Coached:use Jiminny Contracts\Services\Crm\Supports0bjectTypeParseInterface:use Jiminny cxcepcions Loq1ctxcepc1on*use Jiminny Exceptions SocialAccountTokenTnvalidFycention•use Jiminny Http\Controllers\API\BaseController as Controller:use Jiminny Http\Controllers\CommentContextInterface:use Jiminny Http kesponses Ap1 Abstracckesponse*use Jiminny Htto responses Aot kesponseruse Jimnny Htto sertauzzers sonserzauzer:use Jiminny Htto Transformers ActivitycommentTransformer:use Jiminny HttpWraasforiêrs. Ac vAccept File 3- a% Reject EileoRmer. * 6 of 6 files →use Jiminny\Http\Transformers\ActivityTransformer13 (= laravel.log4 SF jiminny@localhost]4 HS_local [jiminny@localhost]& console [PROD](C) MatchCrmData.onp© UpdateCrmFieldDataJob.php# console SlAGiNGuse ILLuminate Contracts Queue Shoulduueue:final readonly class UodateSalesforce ccount imolements Shou doueueoublic functionorivate ProviderRegistry ScrmRegistry..private LoggerInterface $logger,D1..}public function handle(TeamCreated|TeamUpdated Sevent): void$teamCreator = $event->teamCreator;if (Sevent->team->account_id === null || $teamCreator === null) {ScrmService = Sthis->crmRegistry->oetSteamCreaton->aetteamO->aetCrmConfzouration@->oetProviderNamesteam = steamureator->oereamorSintearationAdmin = SteCreator->isCrmRequiredO 2 SteamCreator : Steam->qetOwnerO:if (SteamCreator->isCrmRequired)scrmservice-›secusersceancreacorr} else {scrmservice->setuserreamcreator->oetleamo->qetuwnero.tryfScrmResolver = app( abstract: Crm0wnerResolver::class.'providerSlug' => Steam->getCrmConfiguration->qetProviderNameO} catch (Exception $e) {sthas->loqger->infol'Attemot to resolve CRi service for "sevent->team->cetluldo tarled.".'excention' => se->cetcode0.itny sSevent->team->account->aptCrmPnovidenTd0'Jiminny_Client_ID__c' => Sevent->team->getUuidO=> Sevent->team->getTier->getTitleO,100% 2• Fri 22 May 14:28:45AskJiminnyReportActivityServiceTest vCascadeInvestigate Foreign KeSalestorce Token Fallb+0 ..• UpdateCrmFieldDataJob.php• CreateActivityFromUploadService.php• CreateActivityFromUploadService.php+6 -2Now the medium orioritv itemsPoad UndateSalesforceAccount.png• UpdateSalesforceAccount.php• UpdateSalesforceAccount.php+16 -6Now the ActivityController opportunity sync:Exolored ActivitvController.oho and searched 2 aueries^ ActivitvController.nhnActivitvController.ohvl+7-76/6 tacke doneAll 6 nlaces have been undated to use Crmlwne rRecolver with fallback to other team members' tokens when theSummary of ChangesHigh Priority - Same root cause as Twilio1. MatchCrmData.php: 179-194 - Critical job for matching CRM data on dialer recordings2. HydrateCrmDataBvExternalCallIdJob.oho:60-76 - Hvdrates CRM data bv external call ID (Amazon Connect)3. UpdateCrmFieldDataJob.php:202-217 - Updates CRM field data on activities4. CreateActivitvFromUoloadService.oho:113-119 - Parses CRM records for uoloaded recordinasMedium Priority5. UpdateSalesforceAccount.php: 28-44 - Updates Salesforce account on team changes6. ActivitvController.oho: 1177-1192 - Svncs opportunity on activity view.Pattern UsedCosh loastinn nau1. Creates a CrmOwnerResolver with the team and intended admin2. Calls prepareCrmServiceo which tries the admin first. then falls back to team members with active tokens orderecView allapp/Listeners/Teams/# UpdateSalesforceAccount.pho +16-5app/Jobs/Activity/Import/@ MatchCrmData.php +9 -4app/Component/Uploader/Services/ D CreateActivityFromUploadService.php +7 -2ann/lohe/Activitvllmnort/ MLindatoCrmGioldData.lob.nhntg.ann/lobs/Activitv/Imnort/ M HvdrateCrmDataRvSyternalCallid.lob.ohnt8gapo/Htto/Controllers/AP//[M ActivitvController.ohv +8* Reiect alliiAccent alliAsk anvthina (&4-L)<> Code Claude Qnus 4.7 MediumW Windsurf Team1-1.UTE.8Po 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71176
|
NULL
|
0
|
2026-05-22T11:28:43.223876+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449323223_m2.jpg...
|
Firefox
|
[SRD-6848] Sidekick SMS issue - Jira — Work
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37/SRD-6848...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449323223_m2.jpg...
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
Close tab
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Jiminny
Jiminny
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Sentry error
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
[JY-20813] Twilio number is not released when Voice role is removed from user - Jira
[JY-20813] Twilio number is not released when Voice role is removed from user - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Summary
Summary
More actions for summary
More actions for summary
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star All open tickets
11
Unassigned tickets
Unassigned tickets
Star Unassigned tickets
1
Support team Queue
Support team Queue
Star Support team Queue
6
Raised by me
Raised by me
Star Raised by me
0
Assigned to me
Assigned to me
Star Assigned to me
1
Service requests
Service requests
Star Service requests
6
Platform team
Platform team
Star Platform team
1
Processing team
Processing team
Star Processing team
5
Site reliability team
Site reliability team
Star Site reliability team
0
New features requests
New features requests
Star New features requests
0
InfoSec issues
InfoSec issues
Star InfoSec issues
0
Ready for Customer
Ready for Customer
Star Ready for Customer
2
Resolved tickets
Resolved tickets
Star Resolved tickets
999+
View all queues
View all queues
Service requests
Service requests
Create
Create
More for service requests
More for service requests
Incidents
Incidents
Create
Create
More for incidents
More for incidents
Reports
Reports
More actions for reports
More actions for reports
Operations
Operations
More actions for operations
More actions for operations
Knowledge Base
Knowledge Base
More actions for knowledge base
More actions for knowledge base
Customers
Customers
More actions for customers
More actions for customers
Channels
Channels
Email logs
Email logs
More actions for customer notification logs
More actions for customer notification logs
Developer escalations
Developer escalations
More actions for developer escalations
More actions for developer escalations
Slack integration
Slack integration
More actions for Slack integration
More actions for Slack integration
Reporting Center
Reporting Center
More actions for Reporting Center
More actions for Reporting Center
Add shortcut
Add shortcut
More actions for developer escalations
More actions for developer escalations
Archived work items
Archived work items
More actions for archived work items
More actions for archived work items
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Back
Back
Bug - Change work type
SRD-6848
SRD-6848
Copy link
Sidekick SMS issue- edit summary, edit
Sidekick SMS issue
Sidekick SMS issue
Link work item
Link work item
Link web pages and more
Link web pages and more
Add form
Add form
Add design
Add design
Create
Create
Add app
Stoyan Tomov
raised this request
via
Jira
Hide details
Hide details
View request in portal
View request in portal
Description
Description
• Unsaved changes
Edit Description, edit
Hey team,
Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent to one of his prospects.
I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn’t find any trace of his attempted reply to that prospect ([PHONE]).
To send the text message, he replied to the email he got when the prospect texted him first:
Open image-20260513-072619.png
And this is the email he got after replying to the email:
Open image-20260513-072433.png
Reportedly, the text message he tried sending was only two words long.
Mario and I performed a couple of tests, and despite receiving each reply via email, we both got the same emails as Scott, stating that the messages were not sent. Below are the failure messages and the result of our testing:
Open image-20260513-072900.png
Open image-20260513-072913.png
Open image-20260513-072944.png
I couldn’t help but notice that, unlike with Mario’s reply, my reply via email included my email signature by default, and this can significantly increase the size of the text message, but this shouldn’t be an issue if the SMS gets segmented when a certain threshold is reached, making it a so-called long SMS.
Can someone please check why we are always receiving these failure emails, even though the messages were sent, and of course, why Scott’s text message was not sent at all?
Data Centre
More information about
Edit Data Centre
US
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
Start an SMS conversation with another Jiminny user and reply to each other via email.
Customer type
More information about
Edit Customer type
Enterprise
Actual outcome
More information about
Edit Actual outcome
With or without success the sender always receives a failure email
Expected outcome
More information about
Edit Expected outcome
The text messages to be sent via email without failures
Severity level
More information about
Edit Severity level
S2
Impact
Impact
More information about
Edit Impact, edit
None
Root cause
Root cause
More information about
Edit Root cause, edit
None
Attachments
Attachments
5
More actions for attachments
More actions for attachments
Open image-20260513-072913.png
image-20260513-072
913.png...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.15791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.14245346,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Sentry error","depth":4,"bounds":{"left":0.0028257978,"top":0.35155627,"width":0.024601065,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.37071028,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.38188347,"width":0.14245346,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20813] Twilio number is not released when Voice role is removed from user - Jira","depth":4,"bounds":{"left":0.0,"top":0.40343177,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20813] Twilio number is not released when Voice role is removed from user - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.41460496,"width":0.14793883,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.43774942,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.15508644,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.16240026,"top":0.25618514,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.27853152,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.28451717,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.14577793,"top":0.28172386,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Summary","depth":21,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary","depth":24,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for summary","depth":22,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for summary","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Queues","depth":21,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Queues","depth":24,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.13646941,"top":0.33280128,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for queues","depth":22,"bounds":{"left":0.14577793,"top":0.33280128,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for queues","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Team Priority","depth":23,"bounds":{"left":0.095578454,"top":0.35514766,"width":0.059507977,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Team Priority","depth":26,"bounds":{"left":0.10621676,"top":0.36113328,"width":0.029587766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All open tickets","depth":25,"bounds":{"left":0.099567816,"top":0.38068634,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All open tickets","depth":28,"bounds":{"left":0.11020612,"top":0.386672,"width":0.034075797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star All open tickets","depth":26,"bounds":{"left":0.14577793,"top":0.38387868,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11","depth":28,"bounds":{"left":0.14810506,"top":0.38826814,"width":0.0033244682,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unassigned tickets","depth":25,"bounds":{"left":0.099567816,"top":0.40622506,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned tickets","depth":28,"bounds":{"left":0.11020612,"top":0.4122107,"width":0.03307846,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Unassigned tickets","depth":26,"bounds":{"left":0.14577793,"top":0.4094174,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":28,"bounds":{"left":0.14893617,"top":0.41380686,"width":0.0016622341,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Support team Queue","depth":25,"bounds":{"left":0.099567816,"top":0.43176377,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Support team Queue","depth":28,"bounds":{"left":0.11020612,"top":0.43774942,"width":0.03025266,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Support team Queue","depth":26,"bounds":{"left":0.14577793,"top":0.4349561,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6","depth":28,"bounds":{"left":0.14860372,"top":0.43934557,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Raised by me","depth":25,"bounds":{"left":0.099567816,"top":0.45730248,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Raised by me","depth":28,"bounds":{"left":0.11020612,"top":0.4632881,"width":0.029753989,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Raised by me","depth":26,"bounds":{"left":0.14577793,"top":0.46049482,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":28,"bounds":{"left":0.1484375,"top":0.46488428,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Assigned to me","depth":25,"bounds":{"left":0.099567816,"top":0.4828412,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Assigned to me","depth":28,"bounds":{"left":0.11020612,"top":0.4888268,"width":0.03174867,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Assigned to me","depth":26,"bounds":{"left":0.14577793,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":28,"bounds":{"left":0.14893617,"top":0.490423,"width":0.0016622341,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service requests","depth":25,"bounds":{"left":0.099567816,"top":0.5083799,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service requests","depth":28,"bounds":{"left":0.11020612,"top":0.5143655,"width":0.033410903,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Service requests","depth":26,"bounds":{"left":0.14577793,"top":0.51157224,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6","depth":28,"bounds":{"left":0.14860372,"top":0.5159617,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform team","depth":25,"bounds":{"left":0.099567816,"top":0.5339186,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform team","depth":28,"bounds":{"left":0.11020612,"top":0.53990424,"width":0.031083776,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Platform team","depth":26,"bounds":{"left":0.14577793,"top":0.5371109,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":28,"bounds":{"left":0.14893617,"top":0.5415004,"width":0.0016622341,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing team","depth":25,"bounds":{"left":0.099567816,"top":0.5594573,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing team","depth":28,"bounds":{"left":0.11020612,"top":0.5654429,"width":0.03307846,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Processing team","depth":26,"bounds":{"left":0.14577793,"top":0.56264967,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5","depth":28,"bounds":{"left":0.14860372,"top":0.56703913,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Site reliability team","depth":25,"bounds":{"left":0.099567816,"top":0.584996,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Site reliability team","depth":28,"bounds":{"left":0.11020612,"top":0.59098166,"width":0.03274601,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Site reliability team","depth":26,"bounds":{"left":0.14577793,"top":0.58818835,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":28,"bounds":{"left":0.1484375,"top":0.5925778,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"New features requests","depth":25,"bounds":{"left":0.099567816,"top":0.6105347,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New features requests","depth":28,"bounds":{"left":0.11020612,"top":0.61652035,"width":0.032579787,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star New features requests","depth":26,"bounds":{"left":0.14577793,"top":0.61372703,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":28,"bounds":{"left":0.1484375,"top":0.6181165,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"InfoSec issues","depth":25,"bounds":{"left":0.099567816,"top":0.6360734,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"InfoSec issues","depth":28,"bounds":{"left":0.11020612,"top":0.6420591,"width":0.03324468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star InfoSec issues","depth":26,"bounds":{"left":0.14577793,"top":0.6392658,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":28,"bounds":{"left":0.1484375,"top":0.64365524,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ready for Customer","depth":25,"bounds":{"left":0.099567816,"top":0.66161215,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ready for Customer","depth":28,"bounds":{"left":0.11020612,"top":0.6675978,"width":0.032912236,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Ready for Customer","depth":26,"bounds":{"left":0.14577793,"top":0.66480446,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2","depth":28,"bounds":{"left":0.14860372,"top":0.6691939,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Resolved tickets","depth":25,"bounds":{"left":0.099567816,"top":0.68715084,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolved tickets","depth":28,"bounds":{"left":0.11020612,"top":0.69313645,"width":0.027094414,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Resolved tickets","depth":26,"bounds":{"left":0.14112367,"top":0.6903432,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"999+","depth":28,"bounds":{"left":0.14245346,"top":0.69473267,"width":0.009973404,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View all queues","depth":24,"bounds":{"left":0.095578454,"top":0.7126895,"width":0.059507977,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View all queues","depth":27,"bounds":{"left":0.10621676,"top":0.7186752,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service requests","depth":21,"bounds":{"left":0.09158909,"top":0.73822826,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service requests","depth":24,"bounds":{"left":0.1022274,"top":0.7442139,"width":0.03756649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.15309176,"top":0.74142057,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for service requests","depth":22,"bounds":{"left":0.15442154,"top":0.74142057,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for service requests","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Incidents","depth":22,"bounds":{"left":0.09158909,"top":0.76376694,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Incidents","depth":25,"bounds":{"left":0.1022274,"top":0.7697526,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":23,"bounds":{"left":0.15309176,"top":0.7669593,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for incidents","depth":23,"bounds":{"left":0.15442154,"top":0.7669593,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for incidents","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reports","depth":19,"bounds":{"left":0.09158909,"top":0.7893057,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reports","depth":22,"bounds":{"left":0.1022274,"top":0.7952913,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for reports","depth":20,"bounds":{"left":0.15309176,"top":0.792498,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for reports","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Operations","depth":19,"bounds":{"left":0.09158909,"top":0.81484437,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Operations","depth":22,"bounds":{"left":0.1022274,"top":0.82083,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for operations","depth":20,"bounds":{"left":0.15309176,"top":0.81803674,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for operations","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Knowledge Base","depth":19,"bounds":{"left":0.09158909,"top":0.84038305,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Knowledge Base","depth":22,"bounds":{"left":0.1022274,"top":0.84636873,"width":0.03723404,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for knowledge base","depth":20,"bounds":{"left":0.15309176,"top":0.8435754,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for knowledge base","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Customers","depth":19,"bounds":{"left":0.09158909,"top":0.8659218,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customers","depth":22,"bounds":{"left":0.1022274,"top":0.8719074,"width":0.024268618,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for customers","depth":20,"bounds":{"left":0.15309176,"top":0.8691141,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for customers","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Channels","depth":19,"bounds":{"left":0.09158909,"top":0.8914605,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Channels","depth":22,"bounds":{"left":0.1022274,"top":0.89744616,"width":0.020944148,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Email logs","depth":19,"bounds":{"left":0.09158909,"top":0.9169992,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Email logs","depth":22,"bounds":{"left":0.1022274,"top":0.92298484,"width":0.022606382,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for customer notification logs","depth":20,"bounds":{"left":0.15309176,"top":0.9201915,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for customer notification logs","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Developer escalations","depth":19,"bounds":{"left":0.09158909,"top":0.9425379,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Developer escalations","depth":22,"bounds":{"left":0.1022274,"top":0.9485235,"width":0.04920213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for developer escalations","depth":20,"bounds":{"left":0.15309176,"top":0.94573027,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for developer escalations","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Slack integration","depth":19,"bounds":{"left":0.09158909,"top":0.9680766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Slack integration","depth":22,"bounds":{"left":0.1022274,"top":0.97406226,"width":0.03723404,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Slack integration","depth":20,"bounds":{"left":0.15309176,"top":0.97126895,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Slack integration","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reporting Center","depth":19,"bounds":{"left":0.09158909,"top":0.9936153,"width":0.06349734,"height":0.0063846707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporting Center","depth":22,"bounds":{"left":0.1022274,"top":0.99960095,"width":0.037898935,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Reporting Center","depth":20,"bounds":{"left":0.15309176,"top":0.99680763,"width":0.0039893617,"height":0.0031923652},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Reporting Center","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add shortcut","depth":19,"bounds":{"left":0.09158909,"top":1.0,"width":0.06349734,"height":-0.019154072},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add shortcut","depth":22,"bounds":{"left":0.1022274,"top":1.0,"width":0.028922873,"height":-0.02513969},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for developer escalations","depth":20,"bounds":{"left":0.15309176,"top":1.0,"width":0.0039893617,"height":-0.022346377},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for developer escalations","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Archived work items","depth":19,"bounds":{"left":0.09158909,"top":1.0,"width":0.06349734,"height":-0.044692755},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archived work items","depth":22,"bounds":{"left":0.1022274,"top":1.0,"width":0.045545213,"height":-0.050678372},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for archived work items","depth":20,"bounds":{"left":0.15309176,"top":1.0,"width":0.0039893617,"height":-0.04788506},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for archived work items","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":1.0,"width":0.0674867,"height":-0.07023144},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":1.0,"width":0.028756648,"height":-0.076217055},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":1.0,"width":0.071476065,"height":-0.09577012},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.15309176,"top":1.0,"width":0.0039893617,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.2109375,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Back","depth":13,"bounds":{"left":0.26462767,"top":0.10933759,"width":0.024767287,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Back","depth":15,"bounds":{"left":0.27460107,"top":0.11173184,"width":0.010804521,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.2933843,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"SRD-6848","depth":15,"bounds":{"left":0.30136302,"top":0.10933759,"width":0.019780586,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6848","depth":17,"bounds":{"left":0.30136302,"top":0.11292897,"width":0.019780586,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.31981382,"top":0.11213089,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Sidekick SMS issue- edit summary, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Sidekick SMS issue","depth":12,"bounds":{"left":0.26861703,"top":0.1396648,"width":0.3778258,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":13,"bounds":{"left":0.26861703,"top":0.13926576,"width":0.072972074,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link work item","depth":12,"bounds":{"left":0.26861703,"top":0.17158818,"width":0.047539894,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Link work item","depth":14,"bounds":{"left":0.27992022,"top":0.17757383,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Link web pages and more","depth":12,"bounds":{"left":0.31582448,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Link web pages and more","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add form","depth":13,"bounds":{"left":0.32912233,"top":0.17158818,"width":0.03673537,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add form","depth":15,"bounds":{"left":0.3410904,"top":0.17757383,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add design","depth":12,"bounds":{"left":0.36851728,"top":0.17158818,"width":0.038397606,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add design","depth":14,"bounds":{"left":0.3778258,"top":0.17757383,"width":0.025099734,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":13,"bounds":{"left":0.40957448,"top":0.17158818,"width":0.028922873,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":15,"bounds":{"left":0.41356382,"top":0.17757383,"width":0.014960106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add app","depth":12,"bounds":{"left":0.44115692,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stoyan Tomov","depth":12,"bounds":{"left":0.2862367,"top":0.22944932,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raised this request","depth":12,"bounds":{"left":0.31948137,"top":0.22944932,"width":0.04055851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"via","depth":12,"bounds":{"left":0.36136967,"top":0.22944932,"width":0.006482713,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jira","depth":12,"bounds":{"left":0.36918217,"top":0.22944932,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Hide details","depth":11,"bounds":{"left":0.6080452,"top":0.22346368,"width":0.034075797,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hide details","depth":13,"bounds":{"left":0.61203456,"top":0.22944932,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View request in portal","depth":11,"bounds":{"left":0.2862367,"top":0.2490024,"width":0.04105718,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View request in portal","depth":12,"bounds":{"left":0.2862367,"top":0.24940144,"width":0.04105718,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":11,"bounds":{"left":0.27426863,"top":0.27773345,"width":0.02543218,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":12,"bounds":{"left":0.27426863,"top":0.27813247,"width":0.02543218,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"• Unsaved changes","depth":12,"bounds":{"left":0.30501994,"top":0.2793296,"width":0.03756649,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Description, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey team,","depth":13,"bounds":{"left":0.27426863,"top":0.30007982,"width":0.022273935,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent to one of his prospects.","depth":13,"bounds":{"left":0.27426863,"top":0.32881084,"width":0.3570479,"height":0.03312051},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn’t find any trace of his attempted reply to that prospect (+64275138300).","depth":13,"bounds":{"left":0.27426863,"top":0.37669593,"width":0.35821143,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To send the text message, he replied to the email he got when the prospect texted him first:","depth":13,"bounds":{"left":0.27426863,"top":0.40542698,"width":0.20113032,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open image-20260513-072619.png","depth":13,"bounds":{"left":0.27426863,"top":0.44373503,"width":0.07712766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"And this is the email he got after replying to the email:","depth":13,"bounds":{"left":0.27426863,"top":0.830407,"width":0.11801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open image-20260513-072433.png","depth":13,"bounds":{"left":0.27426863,"top":0.8687151,"width":0.078125,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reportedly, the text message he tried sending was only two words long.","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mario and I performed a couple of tests, and despite receiving each reply via email, we both got the same emails as Scott, stating that the messages were not sent. Below are the failure messages and the result of our testing:","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open image-20260513-072900.png","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open image-20260513-072913.png","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open image-20260513-072944.png","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I couldn’t help but notice that, unlike with Mario’s reply, my reply via email included my email signature by default, and this can significantly increase the size of the text message, but this shouldn’t be an issue if the SMS gets segmented when a certain threshold is reached, making it a so-called long SMS.","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Can someone please check why we are always receiving these failure emails, even though the messages were sent, and of course, why Scott’s text message was not sent at all?","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Centre","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Data Centre","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"US","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Start an SMS conversation with another Jiminny user and reply to each other via email.","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Customer type","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"With or without success the sender always receives a failure email","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"The text messages to be sent via email without failures","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Severity level","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Severity level","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"S2","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Impact","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Impact","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Impact, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Root cause","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Root cause","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Root cause, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Attachments","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Attachments","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for attachments","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for attachments","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open image-20260513-072913.png","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"image-20260513-072","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"913.png","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3514735416476223434
|
-4354007027943582556
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
Close tab
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Jiminny
Jiminny
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Sentry error
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
[JY-20813] Twilio number is not released when Voice role is removed from user - Jira
[JY-20813] Twilio number is not released when Voice role is removed from user - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Summary
Summary
More actions for summary
More actions for summary
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star All open tickets
11
Unassigned tickets
Unassigned tickets
Star Unassigned tickets
1
Support team Queue
Support team Queue
Star Support team Queue
6
Raised by me
Raised by me
Star Raised by me
0
Assigned to me
Assigned to me
Star Assigned to me
1
Service requests
Service requests
Star Service requests
6
Platform team
Platform team
Star Platform team
1
Processing team
Processing team
Star Processing team
5
Site reliability team
Site reliability team
Star Site reliability team
0
New features requests
New features requests
Star New features requests
0
InfoSec issues
InfoSec issues
Star InfoSec issues
0
Ready for Customer
Ready for Customer
Star Ready for Customer
2
Resolved tickets
Resolved tickets
Star Resolved tickets
999+
View all queues
View all queues
Service requests
Service requests
Create
Create
More for service requests
More for service requests
Incidents
Incidents
Create
Create
More for incidents
More for incidents
Reports
Reports
More actions for reports
More actions for reports
Operations
Operations
More actions for operations
More actions for operations
Knowledge Base
Knowledge Base
More actions for knowledge base
More actions for knowledge base
Customers
Customers
More actions for customers
More actions for customers
Channels
Channels
Email logs
Email logs
More actions for customer notification logs
More actions for customer notification logs
Developer escalations
Developer escalations
More actions for developer escalations
More actions for developer escalations
Slack integration
Slack integration
More actions for Slack integration
More actions for Slack integration
Reporting Center
Reporting Center
More actions for Reporting Center
More actions for Reporting Center
Add shortcut
Add shortcut
More actions for developer escalations
More actions for developer escalations
Archived work items
Archived work items
More actions for archived work items
More actions for archived work items
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Back
Back
Bug - Change work type
SRD-6848
SRD-6848
Copy link
Sidekick SMS issue- edit summary, edit
Sidekick SMS issue
Sidekick SMS issue
Link work item
Link work item
Link web pages and more
Link web pages and more
Add form
Add form
Add design
Add design
Create
Create
Add app
Stoyan Tomov
raised this request
via
Jira
Hide details
Hide details
View request in portal
View request in portal
Description
Description
• Unsaved changes
Edit Description, edit
Hey team,
Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent to one of his prospects.
I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn’t find any trace of his attempted reply to that prospect ([PHONE]).
To send the text message, he replied to the email he got when the prospect texted him first:
Open image-20260513-072619.png
And this is the email he got after replying to the email:
Open image-20260513-072433.png
Reportedly, the text message he tried sending was only two words long.
Mario and I performed a couple of tests, and despite receiving each reply via email, we both got the same emails as Scott, stating that the messages were not sent. Below are the failure messages and the result of our testing:
Open image-20260513-072900.png
Open image-20260513-072913.png
Open image-20260513-072944.png
I couldn’t help but notice that, unlike with Mario’s reply, my reply via email included my email signature by default, and this can significantly increase the size of the text message, but this shouldn’t be an issue if the SMS gets segmented when a certain threshold is reached, making it a so-called long SMS.
Can someone please check why we are always receiving these failure emails, even though the messages were sent, and of course, why Scott’s text message was not sent at all?
Data Centre
More information about
Edit Data Centre
US
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
Start an SMS conversation with another Jiminny user and reply to each other via email.
Customer type
More information about
Edit Customer type
Enterprise
Actual outcome
More information about
Edit Actual outcome
With or without success the sender always receives a failure email
Expected outcome
More information about
Edit Expected outcome
The text messages to be sent via email without failures
Severity level
More information about
Edit Severity level
S2
Impact
Impact
More information about
Edit Impact, edit
None
Root cause
Root cause
More information about
Edit Root cause, edit
None
Attachments
Attachments
5
More actions for attachments
More actions for attachments
Open image-20260513-072913.png
image-20260513-072
913.png...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71174
|
NULL
|
0
|
2026-05-22T11:28:41.074514+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449321074_m1.jpg...
|
Firefox
|
[SRD-6848] Sidekick SMS issue - Jira — Work
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37/SRD-6848...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449321074_m1.jpg...
|
SlackFileEditViewGoHistoryWindowHelpAPP (83•••EDDO SlackFileEditViewGoHistoryWindowHelpAPP (83•••EDDOCKER0 81DEV (-zsh)О 882APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdeletemode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreatemode 100644tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co-b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%HomeDMsActivityFilesLaterMore+→Jiminny ...CHSIICCTIS# general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of_jimi...° Direct messages. Stoyan TomovGalya Dimitrova "*Nikolay YankovP. Aneliya Angelova. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToast, 0lahl100% <478•Fri 22 May 14:28:40Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan TomovFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory used...
|
NULL
|
-5856056127473617795
|
NULL
|
click
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpAPP (83•••EDDO SlackFileEditViewGoHistoryWindowHelpAPP (83•••EDDOCKER0 81DEV (-zsh)О 882APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdeletemode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreatemode 100644tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co-b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%HomeDMsActivityFilesLaterMore+→Jiminny ...CHSIICCTIS# general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of_jimi...° Direct messages. Stoyan TomovGalya Dimitrova "*Nikolay YankovP. Aneliya Angelova. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToast, 0lahl100% <478•Fri 22 May 14:28:40Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкаMessage Stoyan TomovFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory used...
|
71173
|
NULL
|
NULL
|
NULL
|
|
71175
|
NULL
|
0
|
2026-05-22T11:28:40.957089+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449320957_m2.jpg...
|
Firefox
|
[SRD-6848] Sidekick SMS issue - Jira — Work
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37/SRD-6848...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449320957_m2.jpg...
|
••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-20912 ••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabProtlles00O JIMINNY@ For you(• Recent|# Starred•$ AppsQ Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email loas⅘> Developer escalationsafs Slack integrationQ Search‹ S0 l O Б100% L2 ∞* FlzzMay 14.26.40Ask Rovo ® Ê Q< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
-7549348620975430494
|
NULL
|
click
|
ocr
|
NULL
|
••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-20912 ••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabProtlles00O JIMINNY@ For you(• Recent|# Starred•$ AppsQ Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email loas⅘> Developer escalationsafs Slack integrationQ Search‹ S0 l O Б100% L2 ∞* FlzzMay 14.26.40Ask Rovo ® Ê Q< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Iil call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
71172
|
NULL
|
NULL
|
NULL
|
|
71173
|
NULL
|
0
|
2026-05-22T11:28:29.646709+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449309646_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449309646_m1.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.057638887,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.007777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.58819443,"top":0.14666666,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"bounds":{"left":0.58819443,"top":0.17777778,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.58819443,"top":0.20888889,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.58819443,"top":0.24,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.24,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.24,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.58819443,"top":0.2711111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.58819443,"top":0.30222222,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.58819443,"top":0.33333334,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.05138889,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":11,"bounds":{"left":0.59305555,"top":0.36444443,"width":0.045833334,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.45777777,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.07847222,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.060416665,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.7488889,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.58819443,"top":0.78,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8111111,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.58819443,"top":0.8844444,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.58819443,"top":0.91555554,"width":0.024305556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.9,"top":0.12777779,"width":0.04236111,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.94166666,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.7972222,"top":0.17666666,"width":0.104166664,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.09861111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.03888889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.15,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.22291666,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.065972224,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.1388889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.17291667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.10069445,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.18777777,"width":0.065972224,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.19,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.2326389,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":90,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.23194444,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.27,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.27222222,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"bounds":{"left":0.7465278,"top":0.29666665,"width":0.15555556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.8229167,"top":0.33888888,"width":0.05277778,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.38222224,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.38444445,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.40888888,"width":0.03888889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21597221,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":50,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21527778,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4961335034327536384
|
-3802775210325572530
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
SlackFileEditViewGoHistoryWindowHelpDOCKER0 81DEV (-zsh)O $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdeletemode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreatemode 100644tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co-b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%APP ()•••ED→HomeDMsActivityFilesLaterMore+Jiminny ...CHSIICCTIS#general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of_jimi...° Direct messages. Stoyan TomovGalya Dimitrova "*Nikolay YankovP. Aneliya Angelova. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToast, 0lahl100% <478•Fri 22 May 14:28:29Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore ~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкааз няма+AaFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedShift + Return to add a new line...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71172
|
NULL
|
0
|
2026-05-22T11:28:28.561785+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449308561_m2.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449308561_m2.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз няма
аз няма
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.64361703,"top":1.0,"width":0.034242023,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.6788564,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.70113033,"top":1.0,"width":0.020279255,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.72107714,"top":1.0,"width":0.010970744,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:49 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"или когато имаш време","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:51 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6848 in Jira Cloud","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:27 PM","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":29,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6848","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:28:19 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:28","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"само ако се прати sms вече не трябва да пристига email със грешка","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"аз няма","depth":24,"on_screen":true,"value":"аз няма","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"аз няма","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shift + Return to add a new line","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shift + Return","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"to add a new line","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Processing uploaded file… complete! Message ready to be sent.","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"on_screen":false,"role_description":"text"}]...
|
-3230286366688884764
|
-1425084089808550818
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз няма
аз няма
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel
••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabPronlles00O JIMINNY@ For you(• Recent|# Starred•$ AppsQ Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email loas⅘> Developer escalationsafs Slack integrationQ Search‹ S0 l O Б100% L2 ∞* FlzzMay 14.20:20C Ask Rovo ® Ê Q< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Ill call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporter@ Lukas KovalikStoyan TomovRequest TypeKnowledge base# Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71171
|
NULL
|
0
|
2026-05-22T11:28:28.460196+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449308460_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449308460_m1.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.057638887,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.007777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.58819443,"top":0.14666666,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"bounds":{"left":0.58819443,"top":0.17777778,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.58819443,"top":0.20888889,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.58819443,"top":0.24,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.24,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.24,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.58819443,"top":0.2711111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.58819443,"top":0.30222222,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.58819443,"top":0.33333334,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.05138889,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":11,"bounds":{"left":0.59305555,"top":0.36444443,"width":0.045833334,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.45777777,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.07847222,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.060416665,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.7488889,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.58819443,"top":0.78,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8111111,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.58819443,"top":0.8844444,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.58819443,"top":0.91555554,"width":0.024305556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.9,"top":0.12777779,"width":0.04236111,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.94166666,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.7972222,"top":0.17666666,"width":0.104166664,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.09861111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.03888889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.15,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.22291666,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.065972224,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.1388889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.17291667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.10069445,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.18777777,"width":0.065972224,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.19,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.2326389,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":90,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.23194444,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.27,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.27222222,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"bounds":{"left":0.7465278,"top":0.29666665,"width":0.15555556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.8229167,"top":0.33888888,"width":0.05277778,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.38222224,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.38444445,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.40888888,"width":0.03888889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21597221,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":50,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21527778,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:49 PM","depth":26,"bounds":{"left":0.72430557,"top":0.50333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.50333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"или когато имаш време","depth":26,"bounds":{"left":0.7465278,"top":0.5,"width":0.11388889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:51 PM","depth":26,"bounds":{"left":0.72430557,"top":0.5366667,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.5366667,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":26,"bounds":{"left":0.7465278,"top":0.53333336,"width":0.21597221,"height":0.02},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":27,"bounds":{"left":0.7465278,"top":0.53333336,"width":0.21597221,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":25,"bounds":{"left":0.7465278,"top":0.5655556,"width":0.039583333,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.5655556,"width":0.004166667,"height":0.017777778}},{"char_start":1,"char_count":9,"bounds":{"left":0.75069445,"top":0.5655556,"width":0.035416666,"height":0.017777778}}],"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":25,"bounds":{"left":0.7888889,"top":0.5655556,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":27,"bounds":{"left":0.7326389,"top":0.5911111,"width":0.013888889,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize","depth":27,"bounds":{"left":0.7465278,"top":0.5888889,"width":0.2361111,"height":0.20555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":28,"bounds":{"left":0.7888889,"top":0.6077778,"width":0.088194445,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6848 in Jira Cloud","depth":29,"bounds":{"left":0.7888889,"top":0.63,"width":0.11180556,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":29,"bounds":{"left":0.7888889,"top":0.63,"width":0.06527778,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":28,"bounds":{"left":0.7888889,"top":0.6622222,"width":0.025,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":28,"bounds":{"left":0.7916667,"top":0.6888889,"width":0.050694443,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":28,"bounds":{"left":0.86180556,"top":0.6622222,"width":0.035416666,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":29,"bounds":{"left":0.8833333,"top":0.69,"width":0.05486111,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":29,"bounds":{"left":0.94027776,"top":0.69,"width":0.02013889,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.94027776,"top":0.69,"width":0.0027777778,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.94305557,"top":0.69,"width":0.017361112,"height":0.017777778}}],"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:27 PM","depth":29,"bounds":{"left":0.75555557,"top":0.7311111,"width":0.09166667,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":29,"bounds":{"left":0.84930557,"top":0.7355555,"width":0.030555556,"height":0.008888889},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":29,"bounds":{"left":0.75555557,"top":0.75333333,"width":0.06458333,"height":0.031111112},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":29,"bounds":{"left":0.8229167,"top":0.75333333,"width":0.07361111,"height":0.031111112},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":29,"bounds":{"left":0.8819444,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6848","depth":28,"bounds":{"left":0.90416664,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":28,"bounds":{"left":0.92638886,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":28,"bounds":{"left":0.94861114,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6978078761215061422
|
-3586811636068481954
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
SlackFileEditViewGoHistoryWindowHelpDOCKER0 81DEV (-zsh)O $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdeletemode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreatemode 100644tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co-b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%APP ()•••ED→HomeDMsActivityFilesLaterMore+Jiminny ...CHSIICCTIS#general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of_jimi...° Direct messages. Stoyan TomovGalya Dimitrova "*Nikolay YankovP. Aneliya Angelova. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToast, 0lahl100% <478•Fri 22 May 14:28:28Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore ~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешкааз нямаFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedShift + Return to add a new line...
|
71169
|
NULL
|
NULL
|
NULL
|
|
71169
|
NULL
|
0
|
2026-05-22T11:28:24.956856+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449304956_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449304956_m1.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз
аз
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.057638887,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.007777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.58819443,"top":0.14666666,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"bounds":{"left":0.58819443,"top":0.17777778,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.58819443,"top":0.20888889,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.58819443,"top":0.24,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.24,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.24,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.58819443,"top":0.2711111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.58819443,"top":0.30222222,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.58819443,"top":0.33333334,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.05138889,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.36444443,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":11,"bounds":{"left":0.59305555,"top":0.36444443,"width":0.045833334,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.45777777,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.45777777,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.07847222,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.060416665,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.7488889,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.58819443,"top":0.78,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8111111,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8111111,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.58819443,"top":0.8844444,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.58819443,"top":0.91555554,"width":0.024305556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.9,"top":0.12777779,"width":0.04236111,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.94166666,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.7972222,"top":0.17666666,"width":0.104166664,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.09861111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.03888889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.15,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.22291666,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.065972224,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.16111112,"width":0.0375,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.1388889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"bounds":{"left":0.71944445,"top":0.16111112,"width":0.021527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.17291667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.10069445,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"bounds":{"left":0.7465278,"top":0.18777777,"width":0.065972224,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8125,"top":0.19,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.8173611,"top":0.19333333,"width":0.0375,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.2326389,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":90,"bounds":{"left":0.7465278,"top":0.21444444,"width":0.23194444,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.16888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.27,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.27222222,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"bounds":{"left":0.81666666,"top":0.27555555,"width":0.036805555,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"bounds":{"left":0.7465278,"top":0.29666665,"width":0.15555556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.25111112,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"bounds":{"left":0.8229167,"top":0.33888888,"width":0.05277778,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"bounds":{"left":0.7465278,"top":0.38222224,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.8111111,"top":0.38444445,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"bounds":{"left":0.81666666,"top":0.38777778,"width":0.03125,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"bounds":{"left":0.7465278,"top":0.40888888,"width":0.03888889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.36333334,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.44555557,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21597221,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":50,"bounds":{"left":0.7465278,"top":0.4422222,"width":0.21527778,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.4077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:49 PM","depth":26,"bounds":{"left":0.72430557,"top":0.50333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.50333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"или когато имаш време","depth":26,"bounds":{"left":0.7465278,"top":0.5,"width":0.11388889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.46555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:51 PM","depth":26,"bounds":{"left":0.72430557,"top":0.5366667,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"bounds":{"left":0.72430557,"top":0.5366667,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":26,"bounds":{"left":0.7465278,"top":0.53333336,"width":0.21597221,"height":0.02},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":27,"bounds":{"left":0.7465278,"top":0.53333336,"width":0.21597221,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":25,"bounds":{"left":0.7465278,"top":0.5655556,"width":0.039583333,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.5655556,"width":0.004166667,"height":0.017777778}},{"char_start":1,"char_count":9,"bounds":{"left":0.75069445,"top":0.5655556,"width":0.035416666,"height":0.017777778}}],"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":25,"bounds":{"left":0.7888889,"top":0.5655556,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":27,"bounds":{"left":0.7326389,"top":0.5911111,"width":0.013888889,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize","depth":27,"bounds":{"left":0.7465278,"top":0.5888889,"width":0.2361111,"height":0.20555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":28,"bounds":{"left":0.7888889,"top":0.6077778,"width":0.088194445,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6848 in Jira Cloud","depth":29,"bounds":{"left":0.7888889,"top":0.63,"width":0.11180556,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":29,"bounds":{"left":0.7888889,"top":0.63,"width":0.06527778,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":28,"bounds":{"left":0.7888889,"top":0.6622222,"width":0.025,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":28,"bounds":{"left":0.7916667,"top":0.6888889,"width":0.050694443,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":28,"bounds":{"left":0.86180556,"top":0.6622222,"width":0.035416666,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":29,"bounds":{"left":0.8833333,"top":0.69,"width":0.05486111,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":29,"bounds":{"left":0.94027776,"top":0.69,"width":0.02013889,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.94027776,"top":0.69,"width":0.0027777778,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.94305557,"top":0.69,"width":0.017361112,"height":0.017777778}}],"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:27 PM","depth":29,"bounds":{"left":0.75555557,"top":0.7311111,"width":0.09166667,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":29,"bounds":{"left":0.84930557,"top":0.7355555,"width":0.030555556,"height":0.008888889},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":29,"bounds":{"left":0.75555557,"top":0.75333333,"width":0.06458333,"height":0.031111112},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":29,"bounds":{"left":0.8229167,"top":0.75333333,"width":0.07361111,"height":0.031111112},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":29,"bounds":{"left":0.8819444,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6848","depth":28,"bounds":{"left":0.90416664,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":28,"bounds":{"left":0.92638886,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":28,"bounds":{"left":0.94861114,"top":0.6077778,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.49888888,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:28:19 PM","depth":26,"bounds":{"left":0.72430557,"top":0.81333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:28","depth":27,"bounds":{"left":0.72430557,"top":0.81333333,"width":0.016666668,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"само ако се прати sms вече не трябва да пристига email със грешка","depth":26,"bounds":{"left":0.7465278,"top":0.81,"width":0.19444445,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.81,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":64,"bounds":{"left":0.7465278,"top":0.81,"width":0.19444445,"height":0.044444446}}],"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"bounds":{"left":0.8048611,"top":0.77555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"bounds":{"left":0.82708335,"top":0.77555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"bounds":{"left":0.84930557,"top":0.77555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"bounds":{"left":0.8715278,"top":0.77555555,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"аз","depth":24,"bounds":{"left":0.71666664,"top":0.88,"width":0.26527777,"height":0.04222222},"on_screen":true,"value":"аз","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"аз","depth":26,"bounds":{"left":0.725,"top":0.89111114,"width":0.013194445,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shift + Return to add a new line","depth":21,"bounds":{"left":0.87569445,"top":0.9722222,"width":0.10138889,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shift + Return","depth":22,"bounds":{"left":0.87569445,"top":0.97444445,"width":0.045138888,"height":0.013333334},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"to add a new line","depth":22,"bounds":{"left":0.92083335,"top":0.97444445,"width":0.05625,"height":0.013333334},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Processing uploaded file… complete! Message ready to be sent.","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"on_screen":false,"role_description":"text"}]...
|
3041768254516433344
|
-1280968626854788002
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз
аз
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel
SlackFileEditViewGoHistoryWindowHelpDOCKER0 81DEV (-zsh)О $82APP (-zsh)tests/Unit/Services/Activity/RingCentral/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/ServiceTest.phptests/Unit/Services/Activity/TwilioVideo/TwilioVideoMetadataHandlerTest.phptests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceTest.phptests/Unit/Services/Mail/0ffice/EmailApiClientTest.phptests/Unit/Services/Mail/TextRelayServiceTest.phptests/Unit/Services/RecallAI/RecallAIServiceTest.php79 files changed, 4254 insertions(+), 2020 deletions(-)create mode 100644 .github/claude-reviewer/no-ticket-warning.txtcreate mode 100644.github/claude-reviewer/scripts/fetch-jira-context.mjsdelete mode 100644 app/Component/ES/Processor/BatchStatusInterface.phpcreatemode 100644 app/Component/ES/Processor/RedisEntityExtractor.phpdelete mode100644 app/Component/ES/Processor/Traits/WorkerIdTrait.phpcreate mode 100644 app/Component/ES/QueuePriorityEnum.phpcreate mode 100644 front-end/src/components/DealInsights/Modals/__tests__/AskAnythingModacreate mode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Asdeletemode100644 front-end/src/components/shared/AskAnything/__tests__/__snapshots__/Ascreatemode 100644tests/Unit/Component/ES/Processor/RedisEntityExtractorTest.phpdelete mode 100644 tests/Unit/Component/ES/Processor/Traits/WorkerIdTraitTest.phpcreate mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.phpcreate mode 100644 tests/Unit/Notifications/Activities/SmsReceivedTest.phpcreate mode 100644 tests/Unit/Services/Mail/TextRelayServiceTest.phplukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co-b JY-20963-fix-imporSwitched to a new branch 'JY-20963-fix-import-on-deleted-entity'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.phWhat's next:Try Docker Debug forseamless, persistent debugging tools in any container or image →Learn moreat [URL_WITH_CREDENTIALS] (JY-20963-fix-import-on-deleted-entdocker exec -it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.phPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.PHPruntime: 8.3.30Running analysis on 7 cores with 10 files perprocess.Parallel runner is an experimental feature and may be unstable,useitat yourownrisk.Loaded config default from".php-cs-fixer.dist.php"5691/5691100%APP ()•••ED→HomeDMsActivityFilesLaterMore+Jiminny ...CHSIICCTIS#general# happy_birthday#jiminny-bg# platform-tickets# product_launches#random# releases# sofia-office# support# thank-yous# the_people_of_jimi...° Direct messages. Stoyan TomovGalya Dimitrova "*Nikolay YankovP. Aneliya Angelova. Stoyan Tanevdo James Graham8. Stefka Stoyanova4o Vasil Vasilev&: Todor StamatovLukas Kovalik y... OAppsJira CloudToast, 0lahl100% <478•Fri 22 May 14:28:24Describe what you are looking forStoyan Tomov6 0MessagesAdd canvasO FilesMore ~+Stoyan Tom.Monday, May 18th ~просто че обикновени юзъри получават грешкакато отидат на Team Insights да видят чартоветеLukas Kovalik 10:54 AMако се наложи ще го преместимToday ~Lukas Kovalik 2:27 PMздрастиимаш ли минутка, трябва ми малко помощ седин тикетили когато имаш времеhttps://jiminny.atlassian.net/browse/SRD-6848Jira Cloud -Sidekick SMS issueBug SRD-6848 in Jira CloudStatusIn ProgressAssigneeLukas Kovalik (you)As of today at 2:27 PMOpen in Jirait Summarizeсамо ако се прати sms вече не трябва дапристига email със грешка+AaFixed 0 of 5691 files in 96.077 seconds, 67.00 MBmemory usedShift + Return to add a new line...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
71170
|
NULL
|
0
|
2026-05-22T11:28:24.856067+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449304856_m2.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449304856_m2.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз
аз
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.64361703,"top":1.0,"width":0.034242023,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.6788564,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.70113033,"top":1.0,"width":0.020279255,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.72107714,"top":1.0,"width":0.010970744,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:49 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"или когато имаш време","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:51 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6848 in Jira Cloud","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:27 PM","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":29,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6848","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:28:19 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:28","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"само ако се прати sms вече не трябва да пристига email със грешка","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"аз","depth":24,"on_screen":true,"value":"аз","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"аз","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shift + Return to add a new line","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shift + Return","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"to add a new line","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Processing uploaded file… complete! Message ready to be sent.","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"on_screen":false,"role_description":"text"}]...
|
3041768254516433344
|
-1280968626854788002
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:28:19 PM
2:28
само ако се прати sms вече не трябва да пристига email със грешка
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
аз
аз
Shift + Return to add a new line
Shift + Return
to add a new line
Processing uploaded file… complete! Message ready to be sent.
Channel
••0!Platform Sprint 4 Q2 - Platform Te-7 (JY-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabPronlles00O JIMINNY@ For you(• Recent|# Starred•$ AppsQ Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email loas⅘> Developer escalationsafs Slack integrationQ Search‹ S0 l O Б100% L2 ∞* FlzzMay 14.26:24C Ask Rovo ® Ê Q< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Ill call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporterRequest TypeKnowledge base@ Lukas KovalikStoyan TomovReport a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
71168
|
NULL
|
NULL
|
NULL
|
|
71168
|
NULL
|
0
|
2026-05-22T11:28:19.754345+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449299754_m2.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Sl Stoyan Tomov (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779449299754_m2.jpg...
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:39 AM
10:51
понеже касае само Team Insights
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Processing uploaded file… complete! Message ready to be sent.
Channel...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":19,"bounds":{"left":0.64361703,"top":1.0,"width":0.034242023,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.6788564,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.70113033,"top":1.0,"width":0.020279255,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.72107714,"top":1.0,"width":0.010970744,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"May 18th at 10:51:39 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"понеже касае само Team Insights","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:51:44 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:51","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"и как се показва там","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:52:41 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:52","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"идея си нямам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:02 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ами прати при нас, и ще видим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:53:42 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:53","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"по принцип AI call scoring май беше processing но пак TI е при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:01 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"еми и аз така си го тълкувам","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:15 AM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"реално проблема не е със самата функционалност на AI Call Scoring-a","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:30 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"прати тогава при нас","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:35 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 18th at 10:54:36 AM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:54 AM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ако се наложи ще го преместим","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":24,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:27:15 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27 PM","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:29 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"имаш ли минутка, трябва ми малко помощ с един тикет","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:49 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"или когато имаш време","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:27:51 PM","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:27","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6848","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sidekick SMS issue","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6848 in Jira Cloud","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:27 PM","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":29,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":29,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6848","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":27,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":27,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":27,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":24,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Processing uploaded file… complete! Message ready to be sent.","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"on_screen":false,"role_description":"text"}]...
|
1636624640859797754
|
-3586811636068481970
|
typing_pause
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
happy_birthday
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Galya Dimitrova
Nikolay Yankov
Aneliya Angelova
Stoyan Tanev
James Graham
Stefka Stoyanova
Vasil Vasilev
Todor Stamatov
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
May 18th at 10:51:39 AM
10:51
понеже касае само Team Insights
May 18th at 10:51:44 AM
10:51
и как се показва там
Lukas Kovalik
May 18th at 10:52:36 AM
10:52 AM
здрасти
May 18th at 10:52:41 AM
10:52
идея си нямам
May 18th at 10:53:02 AM
10:53
ами прати при нас, и ще видим
May 18th at 10:53:42 AM
10:53
по принцип AI call scoring май беше processing но пак TI е при нас
Stoyan Tomov
May 18th at 10:54:01 AM
10:54 AM
еми и аз така си го тълкувам
May 18th at 10:54:15 AM
10:54
реално проблема не е със самата функционалност на AI Call Scoring-a
Lukas Kovalik
May 18th at 10:54:30 AM
10:54 AM
прати тогава при нас
Stoyan Tomov
May 18th at 10:54:35 AM
10:54 AM
просто че обикновени юзъри получават грешка като отидат на Team Insights да видят чартовете
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
May 18th at 10:54:36 AM
10:54 AM
ако се наложи ще го преместим
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Lukas Kovalik
Today at 2:27:15 PM
2:27 PM
здрасти
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:29 PM
2:27
имаш ли минутка, трябва ми малко помощ с един тикет
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:49 PM
2:27
или когато имаш време
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 2:27:51 PM
2:27
https://jiminny.atlassian.net/browse/SRD-6848
https://jiminny.atlassian.net/browse/SRD-6848
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6848 Sidekick SMS issue Bug SRD-6848 in Jira Cloud Preview in Slack Status In Progress Assignee Lukas Kovalik(you) As of today at 2:27 PM Refresh Open in Jira ✨ Summarize
Sidekick SMS issue
Bug SRD-6848 in Jira Cloud
Preview in Slack
Status
In Progress
Assignee
Lukas Kovalik
(you)
As of today at 2:27 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6848
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Processing uploaded file… complete! Message ready to be sent.
Channel
••0!Platform Sprint 4 Q2 - Platform Te-7 fJy-209121 Fallback mechanism fo(SRD-6848] Sidekick SMS issu X• JY-20676 delete AJ reports relateJY-20963 fix deleted object imporPipelines - jiminny/aps)SevenShores|Hubspot\Exceptions8 JiminnyJY-20879) Enable users to use thiSentry error)* JY.20962 fix deleted obiect imnon# (JY-20813] Twilio number is not rel+ New TabPronlles00O JIMINNY@ For you(• Recent|# Starred•$ AppsQ Spaces+.*.Jiminny (New)( Service-Desk@ SummaryQueues+ **v leam Priority5 All open tickets 11Unassigned t...1•, Support tea...E Raised by meEj Assigned to ..•, Service requ...6b Plattorm team& Processing t...a Site reliability...oE New features... 0j InfoSec issues 0@ Ready for Cu.. 2#, Resolved ti... 999+= View all queuesE) Service requestsA Incidentsilll Reports@ Operations• Knowledae Base0 CuctomoreQ Channels• Email loas⅘> Developer escalationsafs Slack integrationQ Search‹ S0 l O Б100% C/ &• Fri 22 May 14:28:19C Ask Rovo ® Ê Q< BackSE SRD-6848Sidekick SMS issueLink work itemEAddform & Add designCreate v..Stoyan Tomov raised this request via JiraHide detailsDescription • Unsaved changesHey team,Scott de Zoeten from Reward Gateway-Edenred reached out to complain that he got an automated email stating that his SMS from the 10th of May was not sent toone of his orosoects.I tried investigating (via CloudWatch logs, Twilio messaging logs, Sentry, etc), but I couldn't find any trace of his attempted reply to that prospect ([PHONE]).To send the text message, he replied to the email he got when the prospect texted him first:Text from 027 513 8300Ill call you back.To send a message back, just reply to this email.And this is the email he got after replying to the email:+ CreateIn Progressy~ DetailsAssigneeReporterRequest TypeKnowledge base@ Lukas KovalikStoyan Tomovã Report a bugE View related articlesPriority levelP2 Medium)Dev TeamPlatform teamOrganizationReward Gateway-EdenredCanny LinksOpen Canny Links> More fields Labels. Time tracking, Tvpe of InfoSec incident. Components(InfoSec), Client. Affected user...> Automation 4 Rule executions> featureOS Open featureos~ IntercomShowing 1 out of 1 linked conversations& Scott de Zoeten> Sentry al Linked IssuesCreated 13 May 2026 at 08:42Updated 2 days agoConfigureHello,...
|
NULL
|
NULL
|
NULL
|
NULL
|