|
8628
|
167
|
24
|
2026-04-14T06:56:59.488916+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149819488_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpSearch with Google or enter addressImport bookmarks...Sprint BoardT SRD QueueGithuh~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activity t8 Jiminny8 Ask Jiminny test report - 8 Apr 202New Tab+ New Tabselecteu uataset name.3. Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringphases.are there soem issueswith this PRshow thinkingYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es , the code loopsthrough raw_samples and awaits asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather()(ideally wrapped in anohore to avoidi• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageFirefoxSearch with Google or enter addressPlatform Sprint1 Q2 - Platfor...Inbox (1,539) - [EMAIL] - Jiminny MailInbox (1,539)-Meet - Daily -JY-20543 addJiminnyWikipediaYouTubeDaily - Platform • 9m left100% CD8•Tue 14 Apr 9:56:59Ö:22°CNew York CityReddit...
|
NULL
|
2136664922855359530
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpSearch with Google or enter addressImport bookmarks...Sprint BoardT SRD QueueGithuh~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activity t8 Jiminny8 Ask Jiminny test report - 8 Apr 202New Tab+ New Tabselecteu uataset name.3. Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringphases.are there soem issueswith this PRshow thinkingYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es , the code loopsthrough raw_samples and awaits asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather()(ideally wrapped in anohore to avoidi• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageFirefoxSearch with Google or enter addressPlatform Sprint1 Q2 - Platfor...Inbox (1,539) - [EMAIL] - Jiminny MailInbox (1,539)-Meet - Daily -JY-20543 addJiminnyWikipediaYouTubeDaily - Platform • 9m left100% CD8•Tue 14 Apr 9:56:59Ö:22°CNew York CityReddit...
|
NULL
|
|
8630
|
167
|
26
|
2026-04-14T06:57:03.737978+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149823737_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:Inbox 1,540) - lukas.kovallk@+ New labProfilesToolsWindowHelp1dll.eooele.com nalluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5407389.449215100,15%C Ask GmailH0• & TwilioAand hAll Hhddl1b. 3D.4b.2ce..b. 3• * Atlassian• # Atlassian• # Salesforce• * Datadog• * Veselin... sonarqub. 3• # Jira>0 hbl© | Daily - Platform • 8m leftA100% C•8• Tue 14 Apr 9:57:03O JIMINNY1-50 01 6.2631[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered] D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....PE Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...Ljiminny/intrastructurej Jt-20623 Add sos queue tor panorama reports (PK #(28) - You can view, comment on, or merge this pull request online at: nttps.//gitnub.com/jiml..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AMI8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr9Apr 9Apr 8Apr 8Apr 8Apr oApr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
-6835028519054527329
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:Inbox 1,540) - lukas.kovallk@+ New labProfilesToolsWindowHelp1dll.eooele.com nalluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5407389.449215100,15%C Ask GmailH0• & TwilioAand hAll Hhddl1b. 3D.4b.2ce..b. 3• * Atlassian• # Atlassian• # Salesforce• * Datadog• * Veselin... sonarqub. 3• # Jira>0 hbl© | Daily - Platform • 8m leftA100% C•8• Tue 14 Apr 9:57:03O JIMINNY1-50 01 6.2631[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered] D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....PE Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...Ljiminny/intrastructurej Jt-20623 Add sos queue tor panorama reports (PK #(28) - You can view, comment on, or merge this pull request online at: nttps.//gitnub.com/jiml..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AMI8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr9Apr 9Apr 8Apr 8Apr 8Apr oApr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
|
8632
|
167
|
28
|
2026-04-14T06:57:21.905574+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149841905_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.eooele.com nalluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarred1,540onoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejs9.449215IvOlesSharedSentryUtilities100,15%Q Ask Gmail_ * Veselin .. sonarqub. 5• # steliyan., sonarqub. 3• & Datadog• # Google 2• # Datadog•# Datadog• # The Jiminny Team_ * Nikolay .. sonarqub. 4• # Datadog• * steliya.. sonarqu. 6• & steliyan., sonarqub. 21• * The Jiminny Team• * ilian-j... sonarqu. 7• & steliya.. claude[. 34• * noreply@salesforce..• # Google 2._ * The Jiminny Team• * Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]• & Twilio_ * stellyan. .. Nikolay 16• * Atlassian• # Atlassian• # Salesforce• # Datadog* Veselin .. sonarqub. 3Enable desktop notifications for Jiminny Mail.OK No thankshhl| Daily - Platform • 8m leftA100% C8 • Tue 14 Apr 9:57:21*O JIMINNY1-50 of 25,263[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered] D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....Por Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi...Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AM8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr 9Apr 9Apr 9Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
-8929639708441075266
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.eooele.com nalluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarred1,540onoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejs9.449215IvOlesSharedSentryUtilities100,15%Q Ask Gmail_ * Veselin .. sonarqub. 5• # steliyan., sonarqub. 3• & Datadog• # Google 2• # Datadog•# Datadog• # The Jiminny Team_ * Nikolay .. sonarqub. 4• # Datadog• * steliya.. sonarqu. 6• & steliyan., sonarqub. 21• * The Jiminny Team• * ilian-j... sonarqu. 7• & steliya.. claude[. 34• * noreply@salesforce..• # Google 2._ * The Jiminny Team• * Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]• & Twilio_ * stellyan. .. Nikolay 16• * Atlassian• # Atlassian• # Salesforce• # Datadog* Veselin .. sonarqub. 3Enable desktop notifications for Jiminny Mail.OK No thankshhl| Daily - Platform • 8m leftA100% C8 • Tue 14 Apr 9:57:21*O JIMINNY1-50 of 25,263[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered] D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....Por Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi...Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AM8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr 9Apr 9Apr 9Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
|
8635
|
166
|
14
|
2026-04-14T06:57:24.671631+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149844671_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)SRD-677XF7 (SRD-67C Jy 19798(7 Service-oir Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-18909• Siminm0 ProjectsE3 SSHEl DatadogPlatform Team200$ Jy-19240 / [ JY-18900READY FOR DEV 1oohesnetixwirtexceed Fontawesomepackage limits(MAINTENANCISReady for Dev8-20564 1 П ****=Priority% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium% JY-20626 Integration testing= MediumLinked work itemsis cloned byA JY-20458 CRUD reports with Ask Jiminnyis tested byJY-20649 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an.JY-20660 Non-creator cannot delete generated Ask Jiminny report from A…JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible onty to creator and shar...JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..AssigneeStatus3 Steliyan...i2 Stellyan .-.INDEYVINDEV vAnellya A...READY FOR DEV <& Unassign...READY FOR DEVSDEPLOYEDDONEDONE MDONEDONE MDONEDONEWUnEActions9:57 AM Daily - PlatformlaalDaily - Platform - 8 m left100% <478• Tue 14 Apr 9:57:246ChatCE: DeperDependolD TasksInsights & CoachinD DevD ux.© 2Xz Improve Story~ Details32 Stellyan GeorgievAsentoeReporter2 Galya DimitrovaUeyele encne@ Open with VS Code|3 branches32 commits1 pull request1 build failing5 days agcRelessesProduction2 See all deploymentsComponentsPlatformSub-ProductAoorcons8•• Far DepeGroup: QueriesDEPLOY &leature fiag reieaseDeployed0 -20585 15 * ****=AI Review - Q1CTNMEUANANORCORDeployed_19982 1 0 •***=No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed9 -20384 05 ^ ****=|Missed deletion of stale408099(Pipedrive] DI > status notlabeled, date data missingREDUCE CHURNDeployed0 -20614 05 П ****=:D Al BookmarksStefka StoyanovaNikolay Yankovan GeorgievNikolay Ivanovovalik12:00...
|
NULL
|
-1896545725656580030
|
NULL
|
click
|
ocr
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)SRD-677XF7 (SRD-67C Jy 19798(7 Service-oir Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-18909• Siminm0 ProjectsE3 SSHEl DatadogPlatform Team200$ Jy-19240 / [ JY-18900READY FOR DEV 1oohesnetixwirtexceed Fontawesomepackage limits(MAINTENANCISReady for Dev8-20564 1 П ****=Priority% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium% JY-20626 Integration testing= MediumLinked work itemsis cloned byA JY-20458 CRUD reports with Ask Jiminnyis tested byJY-20649 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an.JY-20660 Non-creator cannot delete generated Ask Jiminny report from A…JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible onty to creator and shar...JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..AssigneeStatus3 Steliyan...i2 Stellyan .-.INDEYVINDEV vAnellya A...READY FOR DEV <& Unassign...READY FOR DEVSDEPLOYEDDONEDONE MDONEDONE MDONEDONEWUnEActions9:57 AM Daily - PlatformlaalDaily - Platform - 8 m left100% <478• Tue 14 Apr 9:57:246ChatCE: DeperDependolD TasksInsights & CoachinD DevD ux.© 2Xz Improve Story~ Details32 Stellyan GeorgievAsentoeReporter2 Galya DimitrovaUeyele encne@ Open with VS Code|3 branches32 commits1 pull request1 build failing5 days agcRelessesProduction2 See all deploymentsComponentsPlatformSub-ProductAoorcons8•• Far DepeGroup: QueriesDEPLOY &leature fiag reieaseDeployed0 -20585 15 * ****=AI Review - Q1CTNMEUANANORCORDeployed_19982 1 0 •***=No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed9 -20384 05 ^ ****=|Missed deletion of stale408099(Pipedrive] DI > status notlabeled, date data missingREDUCE CHURNDeployed0 -20614 05 П ****=:D Al BookmarksStefka StoyanovaNikolay Yankovan GeorgievNikolay Ivanovovalik12:00...
|
NULL
|
|
8636
|
167
|
30
|
2026-04-14T06:57:25.178253+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149845178_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFilePlatform Sprint 1 Q2 - Platform Tea@ Jy FirefoxFilePlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labHistoryBookmarksProfilesToolsWindowHelp1lidll.cooele.com nailuo tinoox~ Google Gemini...socc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses.=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarred1,540onoozeeSentDraftsCategoriesÔPurchasesv MoreLabelsApp emailsGithubappextensionvuejs9.449215IvOlesSharedSentryUtilities100,15%Q Ask Gmail_ * Veselin .. sonarqub. 5• # steliyan., sonarqub. 3• & Datadog• # Google 2• # Datadog•# Datadog• # The Jiminny Team_ * Nikolay .. sonarqub. 4• # Datadog• * steliya.. sonarqu. 6• & steliyan., sonarqub. 21• * The Jiminny Team• * ilian-j... sonarqu. 7• & steliya.. claude[. 34• * noreply@salesforce..• # Google 2._ * The Jiminny Team• * Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]• & Twilio_ * stellyan. .. Nikolay 16• * Atlassian• # Atlassian• # Salesforce• # Datadog* Veselin .. sonarqub. 3Enable desktop notifications for Jiminny Mail.OK No thanksI Daily - Platform • 8m leftTue 14 Apr 9:57:24O JIMINNY1-50 of 25,263[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered) D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....Por Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...Ljiminny/intrastructurej Jt-20623 Add sos queue tor panorama reports (PK #(28) - You can view, comment on, or merge this pull request online at: nttps.//gitnub.com/jiml..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AMI8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr 9Apr 9Apr 9Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
8101190868968370219
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFilePlatform Sprint 1 Q2 - Platform Tea@ Jy FirefoxFilePlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labHistoryBookmarksProfilesToolsWindowHelp1lidll.cooele.com nailuo tinoox~ Google Gemini...socc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses.=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarred1,540onoozeeSentDraftsCategoriesÔPurchasesv MoreLabelsApp emailsGithubappextensionvuejs9.449215IvOlesSharedSentryUtilities100,15%Q Ask Gmail_ * Veselin .. sonarqub. 5• # steliyan., sonarqub. 3• & Datadog• # Google 2• # Datadog•# Datadog• # The Jiminny Team_ * Nikolay .. sonarqub. 4• # Datadog• * steliya.. sonarqu. 6• & steliyan., sonarqub. 21• * The Jiminny Team• * ilian-j... sonarqu. 7• & steliya.. claude[. 34• * noreply@salesforce..• # Google 2._ * The Jiminny Team• * Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]• & Twilio_ * stellyan. .. Nikolay 16• * Atlassian• # Atlassian• # Salesforce• # Datadog* Veselin .. sonarqub. 3Enable desktop notifications for Jiminny Mail.OK No thanksI Daily - Platform • 8m leftTue 14 Apr 9:57:24O JIMINNY1-50 of 25,263[jiminny/infrastructure] JY-20627 Increas cpu resources to default and processing-4 workers (PR #729) - Increase max task count on processing-4 to 40 Increase max ta...[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: https:/github.com/jiminny/proph…..Your Weekly Digest from Datadog - The Weekly Datadog Digest for Jiminny, Inc. Here's what happened in Datadog since April 06. Metric Alerts 8 Total Events 8 Alerts Recover...Security alert - New sign-in to your account [EMAIL] We noticed a new sign-in to your Google Account. If this was you, you don't need to do anything. If not, .Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 10. Metric Alerts 5 Total Events 5 Alerts Recovered [Recovered] E...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 09. Metric Alerts 4 Total Events 4 Alerts Recovered [Recovered) D...Your Ask Jiminny test report report is ready - Hi there, Your latest Ask Jiminny Report has been generated and is now available. Report details: Name: Ask Jiminny test report Peri....Por Ask Jiminny tes...[jiminny/prophet] Jy 19798 evaluation for ai activity types (PR #468) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu...Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...[jiminny/prophet] JY-19982: Allow multiple LLM evals with one command run (PR #464) - eg python src/eval/eval-ask-anything-chat.py \ --steps run validate evaluate expo...YOur API oken s about to expire - Auassian ou Ap noken sabonco exore a ukas Kovalk YOUAPROKen Wun aoelfest aolexolesae4026-04-070000004UCOAVAre you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ...ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered] D...Ljiminny/intrastructurej Jt-20623 Add sos queue tor panorama reports (PK #(28) - You can view, comment on, or merge this pull request online at: nttps.//gitnub.com/jiml..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...9.33 AMI8:55 AM1:37AMApr 11Apr 11Apr 10Apr 10Apr 9Apr9Apr 9Apr9Apr 9Apr 9Apr 9Apr 9Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr 7...
|
NULL
|
|
8638
|
166
|
16
|
2026-04-14T06:57:37.300197+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149857300_m1.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ai-reports
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
New Tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-5107577173204566284
|
1545677505700740271
|
click
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
New Tab...
|
NULL
|
|
8640
|
166
|
17
|
2026-04-14T06:57:38.421835+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149858421_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)PlactormSRD-677C Jy 19796(7 Service-oie Font. AmrCostI ChActionshttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=Jy-18909• SminmProjects# AWSE SSHEl DatadogPlatform TeamQ Search board800$ Jy-19240 / A JY-18900READY FOR DEV 1oohenetxwirtexceed Fontawesomepackage limitsMAINTENANCSReady for Dev8-20564 1 П ****=PriorityStor..% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium|% JY-20626 Integration testing= MediumLinked work itemsis cloned byJY-20458 CRUD reports with Ask. Jiminnyis tested byJY-20649 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an..JY-20660 Non-creator cannot delete generated Ask Jiminny report from A.JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible onty to creator and shar..JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..* Claude3 Circieci•"*_AssigneeStatus32 Steliyan ...32 Stellyan .-.INOEYVINDEV vAnellya A...& Unassign...READY FOR DEVREADY FOR DEVSDEPLOYEDVDONEDONE MDONEDONE MDONEDONEWUnE9:57 AM Daily - Platform> 0.Daily - Platform • 8 m leftС Ct: DepeActionsDependolD Tasks2 Insights & Coachin• DevDux.© 2In Dev vXz Improve StoryDetailsAssignee3 Stellyan GeorgievReporter2 Galya DimitrovaUeyele enecne@ Open with VS Code|3 branches32 commits1 pull request1 build failing5 days agcUrEhRelessesProductionSee all deploymentsComponentsPlatformSub-ProductAootcons8•• Far DepelGroup: Queriesfix connume ouring toleature fiag releaseDeployed0E -20585 15 * ****=AI Review - Q1CTNIHEWANANORCONDeployed-199821 @ ••=•=No such column "Type' onentty 'Event"PLATTORM STABILITYDeployed2038405 +600=Missed deletion of staleadsese(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNDeployed0 -20614 05 П ****=D Al BookmarksStefka Stoyanovaiyan GeorgievKovalik12:138 • Tue 14 Apr 9:57:37ChatNikolay YankovNikolay Ivanov...
|
NULL
|
-2193002351411712431
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)PlactormSRD-677C Jy 19796(7 Service-oie Font. AmrCostI ChActionshttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=Jy-18909• SminmProjects# AWSE SSHEl DatadogPlatform TeamQ Search board800$ Jy-19240 / A JY-18900READY FOR DEV 1oohenetxwirtexceed Fontawesomepackage limitsMAINTENANCSReady for Dev8-20564 1 П ****=PriorityStor..% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium|% JY-20626 Integration testing= MediumLinked work itemsis cloned byJY-20458 CRUD reports with Ask. Jiminnyis tested byJY-20649 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an..JY-20660 Non-creator cannot delete generated Ask Jiminny report from A.JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible onty to creator and shar..JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..* Claude3 Circieci•"*_AssigneeStatus32 Steliyan ...32 Stellyan .-.INOEYVINDEV vAnellya A...& Unassign...READY FOR DEVREADY FOR DEVSDEPLOYEDVDONEDONE MDONEDONE MDONEDONEWUnE9:57 AM Daily - Platform> 0.Daily - Platform • 8 m leftС Ct: DepeActionsDependolD Tasks2 Insights & Coachin• DevDux.© 2In Dev vXz Improve StoryDetailsAssignee3 Stellyan GeorgievReporter2 Galya DimitrovaUeyele enecne@ Open with VS Code|3 branches32 commits1 pull request1 build failing5 days agcUrEhRelessesProductionSee all deploymentsComponentsPlatformSub-ProductAootcons8•• Far DepelGroup: Queriesfix connume ouring toleature fiag releaseDeployed0E -20585 15 * ****=AI Review - Q1CTNIHEWANANORCONDeployed-199821 @ ••=•=No such column "Type' onentty 'Event"PLATTORM STABILITYDeployed2038405 +600=Missed deletion of staleadsese(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNDeployed0 -20614 05 П ****=D Al BookmarksStefka Stoyanovaiyan GeorgievKovalik12:138 • Tue 14 Apr 9:57:37ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8641
|
167
|
32
|
2026-04-14T06:57:38.946715+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149858946_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843~ Google Gemini2 of 3C. 40 lbl | Daily - Platform • 8mleft A 100% C/2 &• Tue 14 Apr 9:57:38- | + Automatic ZoomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminny@ Ask jirminy test report - 8 Api *Inbox (1,540) - lukas.kovalik@umir+ New labsoccce cdcselnde.3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoesesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageBased on the analysis of recent customer interactions, Jiminny is currently being utilized as astrategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of thekey themes and trends observed across our accounts.Driving Adoption and CoachingClreorsmanecie masing y moving beyond basic all recording to leverage Jiminy for structured• Manager Accountability: Many teams are shifting coaching responsibility to managers byusing automated nudges to highlight specific calls for review.• Peer-to-Peer Learning: Organizations like Insuritas and PipeDrive are creating "best of"playlists to share successful objection handling and sales techniques, fostering a culture ofreflection.• Self-Coaching: Several clients, including Funding Circle and Edozo, are implementing self-coaching workflows where reps identify their own calls for review based on specific criterialike urgency or discovery quality.CRM Integration and Data AccuracySeamless integration with CRM platforms remains a primary value driver for our users:• Salesforce & HubSpot: Clients such as Productsup, Unbiased, and PostHog prioritize deepCRM integration to ensure Jiminny serves as a single source of truth.• Technical Troubleshooting: We are actively addressing integration challenges, such asSalesforce mapping errors and Notetaker configuration issues, to ensure data flows correctlybetween systems.• Roadmap Requests: There is significant interest in upcoming features, including native Zohointegration and automated field mapping for Salesforce.Strategic Al UtilizationThe "Ask Jiminny" feature and Al-driven insights are becoming central to how teams managetheir pipeline:• Deal Visibility: Users at Specright and Cision are using "Ask Jiminny" at the opportunity levelto generate summaries, identify risks, and determine next steps without needing to listen toevery call....
|
NULL
|
-8561897118559285014
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843~ Google Gemini2 of 3C. 40 lbl | Daily - Platform • 8mleft A 100% C/2 &• Tue 14 Apr 9:57:38- | + Automatic ZoomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminny@ Ask jirminy test report - 8 Api *Inbox (1,540) - lukas.kovalik@umir+ New labsoccce cdcselnde.3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoesesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageBased on the analysis of recent customer interactions, Jiminny is currently being utilized as astrategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of thekey themes and trends observed across our accounts.Driving Adoption and CoachingClreorsmanecie masing y moving beyond basic all recording to leverage Jiminy for structured• Manager Accountability: Many teams are shifting coaching responsibility to managers byusing automated nudges to highlight specific calls for review.• Peer-to-Peer Learning: Organizations like Insuritas and PipeDrive are creating "best of"playlists to share successful objection handling and sales techniques, fostering a culture ofreflection.• Self-Coaching: Several clients, including Funding Circle and Edozo, are implementing self-coaching workflows where reps identify their own calls for review based on specific criterialike urgency or discovery quality.CRM Integration and Data AccuracySeamless integration with CRM platforms remains a primary value driver for our users:• Salesforce & HubSpot: Clients such as Productsup, Unbiased, and PostHog prioritize deepCRM integration to ensure Jiminny serves as a single source of truth.• Technical Troubleshooting: We are actively addressing integration challenges, such asSalesforce mapping errors and Notetaker configuration issues, to ensure data flows correctlybetween systems.• Roadmap Requests: There is significant interest in upcoming features, including native Zohointegration and automated field mapping for Salesforce.Strategic Al UtilizationThe "Ask Jiminny" feature and Al-driven insights are becoming central to how teams managetheir pipeline:• Deal Visibility: Users at Specright and Cision are using "Ask Jiminny" at the opportunity levelto generate summaries, identify risks, and determine next steps without needing to listen toevery call....
|
NULL
|
|
8644
|
166
|
19
|
2026-04-14T06:57:47.519689+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149867519_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SInbox (2)SRD-677XC Jy 19798(7 Service-oi Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-18909• Sminm0 Projects# AWSE3 SSHEl DutadogPlatform TeamQ Search board800$ Jy-19240 / A JY-18900READY FOR DEV 1ooeeheTxWirtexceed Fontawesomepackage limitsMAINTENANCISReady for Dev©-20564 1 П ****=PriorityStor..% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium|% JY-20626 Integration testing= MediumLinked work itemsis cloned byJY-20458 CRUD reports with Ask. JiminnyIs tested byJY-20649 Generate Ask Jiminny Report and display it in AI Reports• JY-20656 Expired Ask Jiminny report template is automatically disabled an…..© JY-20660 Non-creator cannot delete generated Ask Jiminny report from A...JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible only to creator and shar...JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..•**_AssigneeStatus3 Steliyan ...i2 Stellyan -INDEYVINDEV vAnellya A...& Unassign...READY FOR DEVREADY FOR DEVSDEPLOYEDVDONEDONEDONEDONEDONEMDONEWUnEActions9:57 AM Daily - Platform> 0.Daily - Platform • 8 m left8•ue 14 Apr 9:57CE: DepeDependol• Far DepeD Tasks7 Insights & Coachin• Del0ux.D Al Bookmarks© 2XZ Improve Story~ DetailsAssignee32 Stellyan GeorgievAsuntoneReporter2 Galya DimitrovaUerClo eiene@ Open with VS Code|3 branches32 commits1 pull request1 build failingRelessesProduction7 See all deploymentsComponentsPlatformSub-ProductAooton5 days agcUrEhGroup: QueriesDEPLOY &fix connome ouring teleature fiag releaseDeployed0E -20585 15 + ****=AI Review - Q1CTNIHEMANTANORCODeployed19982 1No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 11 ****=Missed deletion of stale0 m40048009(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik12:238 • Tue 14 Apr 9:57:47ChatNikolay YankovNikolay Ivanov...
|
NULL
|
3602653603668989296
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SInbox (2)SRD-677XC Jy 19798(7 Service-oi Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-18909• Sminm0 Projects# AWSE3 SSHEl DutadogPlatform TeamQ Search board800$ Jy-19240 / A JY-18900READY FOR DEV 1ooeeheTxWirtexceed Fontawesomepackage limitsMAINTENANCISReady for Dev©-20564 1 П ****=PriorityStor..% JY-20574 [AI) Ensure PDF formatting is good= Medium= Medium% JY-20586 (QA) Manual Testing= Medium|% JY-20626 Integration testing= MediumLinked work itemsis cloned byJY-20458 CRUD reports with Ask. JiminnyIs tested byJY-20649 Generate Ask Jiminny Report and display it in AI Reports• JY-20656 Expired Ask Jiminny report template is automatically disabled an…..© JY-20660 Non-creator cannot delete generated Ask Jiminny report from A...JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n...JY-20655 Generated Ask Jiminny Report emall is sent to recipients0 JY-20654 Generated Ask Jiminny Reoort is visible only to creator and shar...JY-20650 Generated Ask Jiminny Report PDF includes branding, report se..•**_AssigneeStatus3 Steliyan ...i2 Stellyan -INDEYVINDEV vAnellya A...& Unassign...READY FOR DEVREADY FOR DEVSDEPLOYEDVDONEDONEDONEDONEDONEMDONEWUnEActions9:57 AM Daily - Platform> 0.Daily - Platform • 8 m left8•ue 14 Apr 9:57CE: DepeDependol• Far DepeD Tasks7 Insights & Coachin• Del0ux.D Al Bookmarks© 2XZ Improve Story~ DetailsAssignee32 Stellyan GeorgievAsuntoneReporter2 Galya DimitrovaUerClo eiene@ Open with VS Code|3 branches32 commits1 pull request1 build failingRelessesProduction7 See all deploymentsComponentsPlatformSub-ProductAooton5 days agcUrEhGroup: QueriesDEPLOY &fix connome ouring teleature fiag releaseDeployed0E -20585 15 + ****=AI Review - Q1CTNIHEMANTANORCODeployed19982 1No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 11 ****=Missed deletion of stale0 m40048009(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik12:238 • Tue 14 Apr 9:57:47ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8645
|
167
|
34
|
2026-04-14T06:57:48.006418+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149868006_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843~ Google Gemini2 of 3C 40 lbl | Daily - Platform • 8 m leftA 7 10%C2 &• Tue 14 Apr 9:57:47- | + Automatic ZoomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr XInbox (1,540) - lukas.kovalik@umir+ New labsoccce cdcselnde.3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pagestrateictoltor salesenacilemtent coachineeand pipeline vistity. Belntv asyutilizis ofthekey themes and trends observed across our accounts.Driving Adoption and Coachingclienrane ie marine mtving beyond basic al recording to leverage jiminy for structured• Manager Accountability: Many teams are shifting coaching responsibility to managers byusing automated nudges to highlight specific calls for review.• Peer-to-Peer Learning: Organizations like Insuritas and PipeDrive are creating "best of'"playlists to share successful objection handling and sales techniques, fostering a culture ofreflection.• Self-Coaching: Several clients, including Funding Circle and Edozo, are implementing self-coaching workflows where reps identify their own calls for review based on specific criterialike urgency or discovery quality.CRM Integration and Data AccuracySeamless integration with CRM platforms remains a primary value driver for our users:• Salesforce & HubSpot: Clients such as Productsup, Unbiased, and PostHog prioritize deepCRM integration to ensure Jiminny serves as a single source of truth.• Technical Troubleshooting: We are actively addressing integration challenges, such asSalesforce mapping errors and Notetaker configuration issues, to ensure data flows correctlybetween systems.• Roadmap Requests: There is significant interest in upcoming features, including native Zohointegration and automated field mapping for Salesforce.Strategic Al UtilizationThe "Ask Jiminny" feature and Al-driven insights are becoming central to how teams managetheir pipeline:• Deal Visibility: Users at Specright and Cision are using "Ask Jiminny" at the opportunity levelto generate summaries, identify risks, and determine next steps without needing to listen toevery call....
|
NULL
|
117005594372585405
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843~ Google Gemini2 of 3C 40 lbl | Daily - Platform • 8 m leftA 7 10%C2 &• Tue 14 Apr 9:57:47- | + Automatic ZoomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr XInbox (1,540) - lukas.kovalik@umir+ New labsoccce cdcselnde.3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pagestrateictoltor salesenacilemtent coachineeand pipeline vistity. Belntv asyutilizis ofthekey themes and trends observed across our accounts.Driving Adoption and Coachingclienrane ie marine mtving beyond basic al recording to leverage jiminy for structured• Manager Accountability: Many teams are shifting coaching responsibility to managers byusing automated nudges to highlight specific calls for review.• Peer-to-Peer Learning: Organizations like Insuritas and PipeDrive are creating "best of'"playlists to share successful objection handling and sales techniques, fostering a culture ofreflection.• Self-Coaching: Several clients, including Funding Circle and Edozo, are implementing self-coaching workflows where reps identify their own calls for review based on specific criterialike urgency or discovery quality.CRM Integration and Data AccuracySeamless integration with CRM platforms remains a primary value driver for our users:• Salesforce & HubSpot: Clients such as Productsup, Unbiased, and PostHog prioritize deepCRM integration to ensure Jiminny serves as a single source of truth.• Technical Troubleshooting: We are actively addressing integration challenges, such asSalesforce mapping errors and Notetaker configuration issues, to ensure data flows correctlybetween systems.• Roadmap Requests: There is significant interest in upcoming features, including native Zohointegration and automated field mapping for Salesforce.Strategic Al UtilizationThe "Ask Jiminny" feature and Al-driven insights are becoming central to how teams managetheir pipeline:• Deal Visibility: Users at Specright and Cision are using "Ask Jiminny" at the opportunity levelto generate summaries, identify risks, and determine next steps without needing to listen toevery call....
|
NULL
|
|
8648
|
167
|
36
|
2026-04-14T06:58:21.595008+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149901595_m2.jpg...
|
Firefox
|
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf — Work...
|
1
|
app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d0 app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string
just
to check its length. Since
min_size
defaults to
0
, the
if min_size
short-circuit saves it for now, but if anyone sets a minimum size, this will become an unnecessary CPU bottleneck on large datasets.
Potential Path Traversal Risk (Lines 110, 113, 251):...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"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.015625,"top":0.14930555,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.17430556,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.11484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.22638889,"width":0.08710937,"height":0.022222223},"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.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.2171875,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.23125,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.228125,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.0984375,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.1953125,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.2109375,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.09335937,"top":0.12847222,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.09335937,"top":0.13055556,"width":0.14101562,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This Python script defines the","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Collection (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"collect_test_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Supports fetching raw samples from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Elasticsearch (ES)","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or loading them from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local JSON files","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implements a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"replayability check","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": It probes the live API endpoint to ensure the activity exists before including it in the dataset.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filters data based on request body size, language, and the presence of an original response.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ground Truth Management:","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Saves inputs and \"gold standard\" responses to a local directory structure (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"eval_output/ai_activity_type/...","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Features an optional mode to populate ground truth using a high-order LLM (e.g.,","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gpt-5_2","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") if the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POPULATE_GROUND_TRUTH_LLM","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"flag is set.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Evaluation Logic (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"evaluate_against_ground_truth","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Compares the model's predicted","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_activity_type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against either the original ES response or the LLM-generated ground truth.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigns a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"quality_score","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a match and","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a mismatch or request failure.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Key Configuration Constants","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key Configuration Constants","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy table","depth":24,"bounds":{"left":0.22070312,"top":0.0,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Execution Workflow","depth":23,"bounds":{"left":0.103125,"top":0.0,"width":0.13320312,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Execution Workflow","depth":24,"bounds":{"left":0.103125,"top":0.0,"width":0.060546875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Parsing:","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.024609376,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script uses","depth":26,"bounds":{"left":0.14179687,"top":0.009027778,"width":0.04609375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"create_parser","depth":27,"bounds":{"left":0.19023438,"top":0.010416667,"width":0.042578124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle CLI arguments like","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.119140625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--data-set","depth":27,"bounds":{"left":0.1171875,"top":0.028472222,"width":0.107421875,"height":0.03125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.12929687,"top":0.045138888,"width":0.003125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--populate-ground-truth-llm","depth":27,"bounds":{"left":0.13476562,"top":0.046527777,"width":0.08867188,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.1171875,"top":0.045138888,"width":0.11171875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--compare-to-ground-truth","depth":27,"bounds":{"left":0.13203125,"top":0.06458333,"width":0.08203125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.21640626,"top":0.063194446,"width":0.0015625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Initialization:","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.039453126,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sets up directory paths for inputs and ground truths based on the selected dataset name.","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.11875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Run:","depth":26,"bounds":{"left":0.1171875,"top":0.14652778,"width":0.013671875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executes the evaluation via","depth":26,"bounds":{"left":0.13085938,"top":0.14652778,"width":0.080078125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.run(run_evaluation(...))","depth":27,"bounds":{"left":0.11953125,"top":0.16597222,"width":0.10507812,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", which orchestrates the collection, endpoint calling, and result scoring phases.","depth":26,"bounds":{"left":0.1171875,"top":0.16458334,"width":0.11289062,"height":0.06875},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.1203125,"top":0.28194445,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.1375,"top":0.28194445,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there soem issues with this PR","depth":21,"bounds":{"left":0.1609375,"top":0.29027778,"width":0.072265625,"height":0.03888889},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.09335937,"top":0.2923611,"width":0.0234375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there soem issues with this PR","depth":23,"bounds":{"left":0.1609375,"top":0.29305556,"width":0.062109374,"height":0.034027778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.22382812,"top":0.35694444,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"bounds":{"left":0.22382812,"top":0.35208333,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":26,"bounds":{"left":0.11953125,"top":0.35902777,"width":0.036328126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.11679687,"top":0.3951389,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.11679687,"top":0.39652777,"width":0.048046876,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.","depth":24,"bounds":{"left":0.10390625,"top":0.40347221,"width":0.13242188,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the most notable issues, categorized by impact:","depth":24,"bounds":{"left":0.10390625,"top":0.46875,"width":0.11640625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Performance & Async Anti-Patterns","depth":23,"bounds":{"left":0.10390625,"top":0.5222222,"width":0.13242188,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Performance & Async Anti-Patterns","depth":24,"bounds":{"left":0.10390625,"top":0.5236111,"width":0.10859375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sequential Requests Defeating Async (Lines 86-106):","depth":26,"bounds":{"left":0.11757813,"top":0.5465278,"width":0.11601563,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inside","depth":26,"bounds":{"left":0.16289063,"top":0.56458336,"width":0.019921875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"_collect_from_es","depth":27,"bounds":{"left":0.11992188,"top":0.58402777,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the code loops through","depth":26,"bounds":{"left":0.11757813,"top":0.58263886,"width":0.10429688,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw_samples","depth":27,"bounds":{"left":0.14414063,"top":0.6020833,"width":0.0359375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.18242188,"top":0.6006944,"width":0.0140625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"await","depth":27,"bounds":{"left":0.19882813,"top":0.6020833,"width":0.01640625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s a","depth":26,"bounds":{"left":0.21757813,"top":0.6006944,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"session.post","depth":27,"bounds":{"left":0.11992188,"top":0.6201389,"width":0.039453126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using","depth":26,"bounds":{"left":0.11757813,"top":0.61875,"width":0.11640625,"height":0.08680555},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiohttp","depth":27,"bounds":{"left":0.18046875,"top":0.6923611,"width":0.023046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for asynchronous concurrency.","depth":26,"bounds":{"left":0.11757813,"top":0.6909722,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Collect these coroutines into a list and use","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.gather()","depth":29,"bounds":{"left":0.16601562,"top":0.75208336,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(ideally wrapped in an","depth":28,"bounds":{"left":0.1296875,"top":0.75069445,"width":0.09257813,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.Semaphore","depth":29,"bounds":{"left":0.13203125,"top":0.7881944,"width":0.055859376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to avoid overwhelming the endpoint) to run the replayability probes concurrently.","depth":28,"bounds":{"left":0.1296875,"top":0.78680557,"width":0.10546875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):","depth":26,"bounds":{"left":0.11757813,"top":0.84652776,"width":0.10976563,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Standard synchronous file operations (","depth":26,"bounds":{"left":0.11757813,"top":0.8645833,"width":0.107421875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"with open(...)","depth":27,"bounds":{"left":0.12226562,"top":0.90208334,"width":0.045703124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.1703125,"top":0.90069443,"width":0.003515625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json.dump","depth":27,"bounds":{"left":0.17617187,"top":0.90208334,"width":0.029296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.2078125,"top":0.90069443,"width":0.003125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json.load","depth":27,"bounds":{"left":0.11992188,"top":0.9201389,"width":0.0296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") are used inside","depth":26,"bounds":{"left":0.15195313,"top":0.91875,"width":0.048046876,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"async def","depth":27,"bounds":{"left":0.20234375,"top":0.9201389,"width":0.0296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"functions. In Python, this blocks the entire event loop while the disk is reading/writing.","depth":26,"bounds":{"left":0.11757813,"top":0.91875,"width":0.11875,"height":0.06875},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.1296875,"top":0.9965278,"width":0.009765625,"height":0.003472209},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Use an asynchronous file I/O library like","depth":28,"bounds":{"left":0.1296875,"top":0.9965278,"width":0.09335937,"height":0.003472209},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiofiles","depth":29,"bounds":{"left":0.1625,"top":1.0,"width":0.0265625,"height":-0.015972257},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", or run the blocking I/O operations in a separate thread using","depth":28,"bounds":{"left":0.1296875,"top":1.0,"width":0.10585938,"height":-0.014583349},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.to_thread()","depth":29,"bounds":{"left":0.16914062,"top":1.0,"width":0.0625,"height":-0.052083373},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"bounds":{"left":0.23398438,"top":1.0,"width":0.0015625,"height":-0.050694466},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Architecture & State Management","depth":23,"bounds":{"left":0.10390625,"top":1.0,"width":0.13242188,"height":-0.08611107},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Architecture & State Management","depth":24,"bounds":{"left":0.10390625,"top":1.0,"width":0.103515625,"height":-0.087499976},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mutating Class-Level Variables (Lines 323-328):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script parses CLI arguments and directly mutates the class attributes (e.g.,","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator.DATA_SET = args.data_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pass these arguments into the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"__init__","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constructor of the instance (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"self.data_set = args.data_set","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") rather than modifying the class definition globally.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Code Quality & Edge Cases","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Code Quality & Edge Cases","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Broad Exception Catching (Line 107):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Using a bare","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"except Exception:","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"during the replayability probe is dangerous. It will catch","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiohttp.ClientError","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(which is intended), but it will also silently swallow","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TimeoutError","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or even memory errors, making debugging incredibly difficult if the endpoint goes down.","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scope the exception to specific expected errors, like","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"except (aiohttp.ClientError, asyncio.TimeoutError):","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inefficient Size Calculation (Line 95):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"len(json.dumps(request_body)) < min_size","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"requires serializing the entire dictionary to a string","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"just","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check its length. Since","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"min_size","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"defaults to","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if min_size","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"short-circuit saves it for now, but if anyone sets a minimum size, this will become an unnecessary CPU bottleneck on large datasets.","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Potential Path Traversal Risk (Lines 110, 113, 251):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
7070922051797381983
|
6426478565827391895
|
idle
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string
just
to check its length. Since
min_size
defaults to
0
, the
if min_size
short-circuit saves it for now, but if anyone sets a minimum size, this will become an unnecessary CPU bottleneck on large datasets.
Potential Path Traversal Risk (Lines 110, 113, 251):...
|
NULL
|
|
8649
|
166
|
21
|
2026-04-14T06:58:25.770777+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149905770_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SInbox (2)SRD-677XC Jy 19798(7 Service-oi Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=Jy-18909• Siminm0 ProjectsEI AWSE3 SSHEl DatadogPlatform TeamQ Search board800$ Jy-19240 / [ JY-18900READY FOR DEV 1Subtasks|ooeeheTxWirtexceed Fontawesomepackage limitsMAINTENANCISReady for Dev©-20564 1 П ****=PrioritySto.....8 JY-20574 [AI) Ensure PDF formatting is good= Medium% JY-20582 (BE+AI+Infra] Create new queue= Medium% JY-20586 [QA] Manual Testing= Medium% JY-20626 Integration testing= MediumLinked work itemsis cioned byA JY-20458 CRUD reports with Ask. JiminnyJY-20849 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an..O Jy-20060 non-creator cannos ocieue generated ask Jiminny reportwrom A.JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n.….JY-20655 Generated Ask Jiminny Report email is sent to recipientsJY-20854 Generated Ask Jiminny Report is visible only to creator and shar...• JY-20650 Generated Ask Jiminny Report PDF includes branding, report se.•**-77% DoneAiwneeSteliyan...it Steliyan ...IN DEVIN DEV SAnellya A...READY FOR DEVS8 Unassign...KAUTPOKOYDEPLOYEDDONEM.DONEDONE MDONEDONE MDONEActions9:58 AM | Daily - Platform> 0.Daily - Platform • 7 m left8•CE: DepeDependol• Far DepeD Tasks7 Insights & Coachin• Del0ux.© 2XZ Improve Story~ DetailsAssignee32 Stellyan GeorgievAsentoeReporter2 Galya DimitrovaDevelopmentO Open with VS Code3 branches32 commits1 pull request1 build failingRelessesProduction7 See all deploymentsComponentsPlatformSub-ProductAooton5 days agcUrEhGroup: QueriesDEPLOY &fix connume ouring tcleature fiag reieaseDeployed0E -20585 15 + ****=AI Review - Q1CTNIHEMANTANORCODeployed_19082|1 • •***=No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 11 ****=Missed deletion of stale0 -400034.9000(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNNDeployed0 -20614 05 П ****=:D Al BookmarksStefka StoyanovaSteliyan GeorgievKovalik13:018 • Tue 14 Apr 9:58:25ChatNikolay YankovNikolay Ivanov...
|
NULL
|
-8869008819253757706
|
NULL
|
click
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SInbox (2)SRD-677XC Jy 19798(7 Service-oi Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=Jy-18909• Siminm0 ProjectsEI AWSE3 SSHEl DatadogPlatform TeamQ Search board800$ Jy-19240 / [ JY-18900READY FOR DEV 1Subtasks|ooeeheTxWirtexceed Fontawesomepackage limitsMAINTENANCISReady for Dev©-20564 1 П ****=PrioritySto.....8 JY-20574 [AI) Ensure PDF formatting is good= Medium% JY-20582 (BE+AI+Infra] Create new queue= Medium% JY-20586 [QA] Manual Testing= Medium% JY-20626 Integration testing= MediumLinked work itemsis cioned byA JY-20458 CRUD reports with Ask. JiminnyJY-20849 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an..O Jy-20060 non-creator cannos ocieue generated ask Jiminny reportwrom A.JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n.….JY-20655 Generated Ask Jiminny Report email is sent to recipientsJY-20854 Generated Ask Jiminny Report is visible only to creator and shar...• JY-20650 Generated Ask Jiminny Report PDF includes branding, report se.•**-77% DoneAiwneeSteliyan...it Steliyan ...IN DEVIN DEV SAnellya A...READY FOR DEVS8 Unassign...KAUTPOKOYDEPLOYEDDONEM.DONEDONE MDONEDONE MDONEActions9:58 AM | Daily - Platform> 0.Daily - Platform • 7 m left8•CE: DepeDependol• Far DepeD Tasks7 Insights & Coachin• Del0ux.© 2XZ Improve Story~ DetailsAssignee32 Stellyan GeorgievAsentoeReporter2 Galya DimitrovaDevelopmentO Open with VS Code3 branches32 commits1 pull request1 build failingRelessesProduction7 See all deploymentsComponentsPlatformSub-ProductAooton5 days agcUrEhGroup: QueriesDEPLOY &fix connume ouring tcleature fiag reieaseDeployed0E -20585 15 + ****=AI Review - Q1CTNIHEMANTANORCODeployed_19082|1 • •***=No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 11 ****=Missed deletion of stale0 -400034.9000(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNNDeployed0 -20614 05 П ****=:D Al BookmarksStefka StoyanovaSteliyan GeorgievKovalik13:018 • Tue 14 Apr 9:58:25ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8651
|
167
|
38
|
2026-04-14T06:58:27.484149+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149907484_m2.jpg...
|
Firefox
|
Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminn Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
1
|
mail.google.com/mail/u/0/#inbox
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"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.015625,"top":0.14930555,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.11484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.20277777,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.22638889,"width":0.08710937,"height":0.022222223},"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.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.2171875,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.23125,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.228125,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.0984375,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.1953125,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.2109375,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.09335937,"top":0.12847222,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.09335937,"top":0.13055556,"width":0.14101562,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This Python script defines the","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Collection (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"collect_test_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Supports fetching raw samples from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Elasticsearch (ES)","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or loading them from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local JSON files","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implements a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"replayability check","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": It probes the live API endpoint to ensure the activity exists before including it in the dataset.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filters data based on request body size, language, and the presence of an original response.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ground Truth Management:","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Saves inputs and \"gold standard\" responses to a local directory structure (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"eval_output/ai_activity_type/...","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Features an optional mode to populate ground truth using a high-order LLM (e.g.,","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gpt-5_2","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") if the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POPULATE_GROUND_TRUTH_LLM","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"flag is set.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Evaluation Logic (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"evaluate_against_ground_truth","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Compares the model's predicted","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_activity_type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against either the original ES response or the LLM-generated ground truth.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigns a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"quality_score","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a match and","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a mismatch or request failure.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Key Configuration Constants","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key Configuration Constants","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy table","depth":24,"bounds":{"left":0.22070312,"top":0.0,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Execution Workflow","depth":23,"bounds":{"left":0.103125,"top":0.0,"width":0.13320312,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Execution Workflow","depth":24,"bounds":{"left":0.103125,"top":0.0,"width":0.060546875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Parsing:","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.024609376,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script uses","depth":26,"bounds":{"left":0.14179687,"top":0.009027778,"width":0.04609375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"create_parser","depth":27,"bounds":{"left":0.19023438,"top":0.010416667,"width":0.042578124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle CLI arguments like","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.119140625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--data-set","depth":27,"bounds":{"left":0.1171875,"top":0.028472222,"width":0.107421875,"height":0.03125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.12929687,"top":0.045138888,"width":0.003125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--populate-ground-truth-llm","depth":27,"bounds":{"left":0.13476562,"top":0.046527777,"width":0.08867188,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.1171875,"top":0.045138888,"width":0.11171875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--compare-to-ground-truth","depth":27,"bounds":{"left":0.13203125,"top":0.06458333,"width":0.08203125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.21640626,"top":0.063194446,"width":0.0015625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Initialization:","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.039453126,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sets up directory paths for inputs and ground truths based on the selected dataset name.","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.11875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Run:","depth":26,"bounds":{"left":0.1171875,"top":0.14652778,"width":0.013671875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executes the evaluation via","depth":26,"bounds":{"left":0.13085938,"top":0.14652778,"width":0.080078125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.run(run_evaluation(...))","depth":27,"bounds":{"left":0.11953125,"top":0.16597222,"width":0.10507812,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", which orchestrates the collection, endpoint calling, and result scoring phases.","depth":26,"bounds":{"left":0.1171875,"top":0.16458334,"width":0.11289062,"height":0.06875},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.1203125,"top":0.28194445,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.1375,"top":0.28194445,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there soem issues with this PR","depth":21,"bounds":{"left":0.1609375,"top":0.29027778,"width":0.072265625,"height":0.03888889},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.09335937,"top":0.2923611,"width":0.0234375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there soem issues with this PR","depth":23,"bounds":{"left":0.1609375,"top":0.29305556,"width":0.062109374,"height":0.034027778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.22382812,"top":0.35694444,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"bounds":{"left":0.22382812,"top":0.35208333,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":26,"bounds":{"left":0.11953125,"top":0.35902777,"width":0.036328126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.11679687,"top":0.3951389,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.11679687,"top":0.39652777,"width":0.048046876,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.","depth":24,"bounds":{"left":0.10390625,"top":0.40347221,"width":0.13242188,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the most notable issues, categorized by impact:","depth":24,"bounds":{"left":0.10390625,"top":0.46875,"width":0.11640625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Performance & Async Anti-Patterns","depth":23,"bounds":{"left":0.10390625,"top":0.5222222,"width":0.13242188,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Performance & Async Anti-Patterns","depth":24,"bounds":{"left":0.10390625,"top":0.5236111,"width":0.10859375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sequential Requests Defeating Async (Lines 86-106):","depth":26,"bounds":{"left":0.11757813,"top":0.5465278,"width":0.11601563,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inside","depth":26,"bounds":{"left":0.16289063,"top":0.56458336,"width":0.019921875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"_collect_from_es","depth":27,"bounds":{"left":0.11992188,"top":0.58402777,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the code loops through","depth":26,"bounds":{"left":0.11757813,"top":0.58263886,"width":0.10429688,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw_samples","depth":27,"bounds":{"left":0.14414063,"top":0.6020833,"width":0.0359375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.18242188,"top":0.6006944,"width":0.0140625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"await","depth":27,"bounds":{"left":0.19882813,"top":0.6020833,"width":0.01640625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s a","depth":26,"bounds":{"left":0.21757813,"top":0.6006944,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"session.post","depth":27,"bounds":{"left":0.11992188,"top":0.6201389,"width":0.039453126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using","depth":26,"bounds":{"left":0.11757813,"top":0.61875,"width":0.11640625,"height":0.08680555},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiohttp","depth":27,"bounds":{"left":0.18046875,"top":0.6923611,"width":0.023046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for asynchronous concurrency.","depth":26,"bounds":{"left":0.11757813,"top":0.6909722,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Collect these coroutines into a list and use","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.gather()","depth":29,"bounds":{"left":0.16601562,"top":0.75208336,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8537606261635373144
|
6138248189672468887
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()...
|
NULL
|
|
8654
|
167
|
40
|
2026-04-14T06:58:35.282034+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149915282_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.cooeie.com alluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5409.449215100,15%Q Ask Gmail• # steliyan., sonarqub. 3 |• # Datadog• & Google 2.• & Datadog• # Datadog# # The Jiminny Team# Nikolay .. sonarqub. 4• * Datadog• * steliya... sonarqu. 6* stellyan., sonargud. 4• & The Jiminny Team• 4 ilian-j... sonarqu. 7• # steliya.…. claude[. 34• * noreply@salesforce..• # Google 2• * The Jiminny Team• # Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]U * IWillo• * steliyan. .. Nikolay 16• # Atlassian• # Atlassian• # Salesforce• # Datadog• * Veselin .. sonarqub. 3JiraEnable desktop notifications for Jiminny Mail.UxNo uhank50 lhl| Daily - Platform • 7 m leftA100% C8 • Tue 14 Apr 9:58:34*O JIMINNY1-50 01 6.2631[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu…..Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...Ljiminny/propnetf Jt-19%o2. Allow muntiple Lum evais with one commana run (PK #404) - eg pytnon srerevalleval-ask-anything-chat.py "-steps run valldate evaluate expo..Your API Token is about to expire - Atlassian Your API token is about to expire Hi Lukas Kovalik, Your API token with label rest api expires at 2026-04-09T00:00:00Z UTC. To av..• Are you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ....ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered) D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...[jiminny/infrastructure] JY-20309 Enable ECS execute command (PR #727) - You can view, comment on, or merge this pull request online at: https://github.com/jiminny/infr..Apr 11Apr 11Apr 10Apr 9Apr 9Apr9Apr 9Apr 9Apr9Apr9Apr9Apr 8Apr 8AOroApr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr7Apr 7...
|
NULL
|
-7779119355980680705
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.cooeie.com alluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5409.449215100,15%Q Ask Gmail• # steliyan., sonarqub. 3 |• # Datadog• & Google 2.• & Datadog• # Datadog# # The Jiminny Team# Nikolay .. sonarqub. 4• * Datadog• * steliya... sonarqu. 6* stellyan., sonargud. 4• & The Jiminny Team• 4 ilian-j... sonarqu. 7• # steliya.…. claude[. 34• * noreply@salesforce..• # Google 2• * The Jiminny Team• # Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]U * IWillo• * steliyan. .. Nikolay 16• # Atlassian• # Atlassian• # Salesforce• # Datadog• * Veselin .. sonarqub. 3JiraEnable desktop notifications for Jiminny Mail.UxNo uhank50 lhl| Daily - Platform • 7 m leftA100% C8 • Tue 14 Apr 9:58:34*O JIMINNY1-50 01 6.2631[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu…..Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...Ljiminny/propnetf Jt-19%o2. Allow muntiple Lum evais with one commana run (PK #404) - eg pytnon srerevalleval-ask-anything-chat.py "-steps run valldate evaluate expo..Your API Token is about to expire - Atlassian Your API token is about to expire Hi Lukas Kovalik, Your API token with label rest api expires at 2026-04-09T00:00:00Z UTC. To av..• Are you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ....ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered) D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...[jiminny/infrastructure] JY-20309 Enable ECS execute command (PR #727) - You can view, comment on, or merge this pull request online at: https://github.com/jiminny/infr..Apr 11Apr 11Apr 10Apr 9Apr 9Apr9Apr 9Apr 9Apr9Apr9Apr9Apr 8Apr 8AOroApr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr7Apr 7...
|
NULL
|
|
8656
|
166
|
23
|
2026-04-14T06:58:38.883462+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149918883_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelp$0.(ah|Daily - Platform - 7 m leftmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Q 8•• Fa Depe xInbox (2)PlactormSRD-677C7 (5RD-67C Jy 19796(7 Service-o xfont AwtX• COMTICH• Actions :С Ct: DepeQ Actions :Dependolhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37Sminn8) ProjectiE SSHEl Dacadog © * Claude5 CircieclA Sentry|8) TasksInsights & Coachin.• DevDux.Platform TeamQ Search board2000018Турe чLabel vQuick filtersComplete sprintREADY FOR DEV 1INDEV 4COOE REVIEW 3BLOCKEDPart? Automated reoorts)exceed FontawesomeMASNTENANESReady for Dev8-20564 11*as*AJREPORTSIn DevAIBEFE4-16900 115n****= 3Delays in CRM Sync|CUATFORM STABTUITYIn DevQJy-20553toeweworkfiow for automatedDependabot fixesEMPROVEMENT OF OUR EFFICEINCYIn Dev₴л-205512+000sru and staoiize MobieOS using new mobile use...MAINTENANCEIn DevQAД JY-204313****=0PO ACCEPTANCEEvaluation foe AI ActivityTypesAUTO-DETECTED ACTIVITY TYPECode Review93-19798 15 + •••=+ CreateAJ Reports TrackingCode ReviewД л-20543 1 *** = ©for SSO for 'persistent'name_id_formatREDUCE CHURNCode ReviewД 31-206320,5 ..0=8) AI Bookmarks)Group: QueriesDEPLOY &Hix oownome ouring taleature fiag releaseBUPPORT TICKETSDeployed0 -20585 15 ****=AI Review - Q1OeployedP -19982|1 • •=*=no sucn coumn "lype onentity 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 П •***=Missed deletion of staleCEOUCE CHURD0 -20670 /80 01 ...*=(Pipedrive) DI > status not|labeled, date data missingREOUCE CHURNDeployed0 -20614 05 П ****=Stefka StoyanovaSteliyan GeorgievKovalik9:58 AM | Daily - Platform13:148 • Tue 14 Apr 9:58:38ChatNikolay YankovNikolay Ivanov...
|
NULL
|
7573639158322813260
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelp$0.(ah|Daily - Platform - 7 m leftmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Q 8•• Fa Depe xInbox (2)PlactormSRD-677C7 (5RD-67C Jy 19796(7 Service-o xfont AwtX• COMTICH• Actions :С Ct: DepeQ Actions :Dependolhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37Sminn8) ProjectiE SSHEl Dacadog © * Claude5 CircieclA Sentry|8) TasksInsights & Coachin.• DevDux.Platform TeamQ Search board2000018Турe чLabel vQuick filtersComplete sprintREADY FOR DEV 1INDEV 4COOE REVIEW 3BLOCKEDPart? Automated reoorts)exceed FontawesomeMASNTENANESReady for Dev8-20564 11*as*AJREPORTSIn DevAIBEFE4-16900 115n****= 3Delays in CRM Sync|CUATFORM STABTUITYIn DevQJy-20553toeweworkfiow for automatedDependabot fixesEMPROVEMENT OF OUR EFFICEINCYIn Dev₴л-205512+000sru and staoiize MobieOS using new mobile use...MAINTENANCEIn DevQAД JY-204313****=0PO ACCEPTANCEEvaluation foe AI ActivityTypesAUTO-DETECTED ACTIVITY TYPECode Review93-19798 15 + •••=+ CreateAJ Reports TrackingCode ReviewД л-20543 1 *** = ©for SSO for 'persistent'name_id_formatREDUCE CHURNCode ReviewД 31-206320,5 ..0=8) AI Bookmarks)Group: QueriesDEPLOY &Hix oownome ouring taleature fiag releaseBUPPORT TICKETSDeployed0 -20585 15 ****=AI Review - Q1OeployedP -19982|1 • •=*=no sucn coumn "lype onentity 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 П •***=Missed deletion of staleCEOUCE CHURD0 -20670 /80 01 ...*=(Pipedrive) DI > status not|labeled, date data missingREOUCE CHURNDeployed0 -20614 05 П ****=Stefka StoyanovaSteliyan GeorgievKovalik9:58 AM | Daily - Platform13:148 • Tue 14 Apr 9:58:38ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8658
|
167
|
42
|
2026-04-14T06:58:40.159071+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149920159_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro v=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 7 m left100% C# 8• Tue 14 Apr 9:58:39O JIMINNY1,540C Ask GmailYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)+7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePor Ask Jiminny test report- 9 Apr 2026.pdf22 KBReply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks0 Share in chat...
|
NULL
|
-5638964217770528654
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro v=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 7 m left100% C# 8• Tue 14 Apr 9:58:39O JIMINNY1,540C Ask GmailYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)+7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePor Ask Jiminny test report- 9 Apr 2026.pdf22 KBReply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks0 Share in chat...
|
NULL
|
|
8660
|
166
|
25
|
2026-04-14T06:58:44.297672+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149924297_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SRD-677C Jy 1979607 Service-oir Font. Amr• COMTICH[URL_WITH_CREDENTIALS] Dev v# Improve Story~ DetailsAssignee #Nikolay NikolovAsunteteReporter8 Stetka StoyanovaQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull request |below. Learn moreDismissDevelopmentQ Open with VS CodeCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY 8leature fiag releaseDeployed0 -20565 15 * ****=AI Review - Q1CTWIHENANANORCOUHDeployed19982 1 @ ..••=wo sucn coumh "lype onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 11 ****=Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20014 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:198 • Tue 14 Apr 9:58:43Chat6Nikolay YankovNikolay Ivanov...
|
NULL
|
-8162506983783773073
|
NULL
|
click
|
ocr
|
NULL
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SRD-677C Jy 1979607 Service-oir Font. Amr• COMTICH[URL_WITH_CREDENTIALS] Dev v# Improve Story~ DetailsAssignee #Nikolay NikolovAsunteteReporter8 Stetka StoyanovaQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull request |below. Learn moreDismissDevelopmentQ Open with VS CodeCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY 8leature fiag releaseDeployed0 -20565 15 * ****=AI Review - Q1CTWIHENANANORCOUHDeployed19982 1 @ ..••=wo sucn coumh "lype onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 11 ****=Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20014 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:198 • Tue 14 Apr 9:58:43Chat6Nikolay YankovNikolay Ivanov...
|
NULL
|
|
8661
|
167
|
44
|
2026-04-14T06:58:44.297653+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149924297_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow HelpPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re+ New labmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI?projector=1&messagePartld=0.1/~ Google Gemini...Ask Jiminny test report - 9 Apr 2026.pdfk Gmail• • шsocc ce Cdlasecie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesYour Ask Jiminrne Jiminny leams< 40 ll • | Daily - Platform • 7m left100% C# 8• Tue 14 Apr 9:58:43E Open with Google Does| -)@и• G Ф:Draftsualegonle)Purchasesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageGithubappextensionAsk Jiminny Test Report8 Apr 2026senurOne attachment • SJIMINNYPoF) Ask Jiminny test+ReplyBased on the analysis of recent custo merinteractions.limiony is taufrently being utilized as aetrtocie tool for eoloe anoblomant coschino and sinolino vicibilit,, Dolouie seunthocie of thol...
|
NULL
|
7520538542733119426
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow HelpPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re+ New labmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI?projector=1&messagePartld=0.1/~ Google Gemini...Ask Jiminny test report - 9 Apr 2026.pdfk Gmail• • шsocc ce Cdlasecie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesYour Ask Jiminrne Jiminny leams< 40 ll • | Daily - Platform • 7m left100% C# 8• Tue 14 Apr 9:58:43E Open with Google Does| -)@и• G Ф:Draftsualegonle)Purchasesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageGithubappextensionAsk Jiminny Test Report8 Apr 2026senurOne attachment • SJIMINNYPoF) Ask Jiminny test+ReplyBased on the analysis of recent custo merinteractions.limiony is taufrently being utilized as aetrtocie tool for eoloe anoblomant coschino and sinolino vicibilit,, Dolouie seunthocie of thol...
|
NULL
|
|
8664
|
166
|
27
|
2026-04-14T06:58:53.958034+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149933958_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)PlactormSRD-677(7 (5RD-67)C Jy 1979607 Service-oir Font. Amr• COMTICHhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-20553• Sminn0 Projects# AWS|E SSHEl Dutadog* Claude3 CircieciPlatform TeamQ Search board800$ JY-20285 / A JY-20553READY FOR DEV 1Linked work itemsAdd linked work itemooesnoTixWiwexceed Fontawesomepackage limitsMAINTENANCISReady for Dev8-20564 1~ ActivitywotanoiStatus update...Pro tip: press (M to commNikolay Nikolov &Nhwewoalo4onConsider this has helped for the drop from 19 to 6 H: () https://github.com/jminny/app/pull/11796Connect.youcolay ikoloy9 Aprl 2026 at 16:28oonioruOeyE (Draft) Debug crm-sync long jobsPossible worker outage starting at 22:00 UTC on 2026-03-24:• Actions :A, Sentryl9:58 AM | Daily - Platform(ah|Daily - Platform • 7 m left8•С Ct: Depe• Actions sDependol• Far DepeD Tasks7 Insights & Coachin• DevDux.D Al BookmarksIn Dev vXZ Improve Story~ DetailsNikolay NikolovAsuntoeReporter8 Stetka Stoyanovauuick star dcvciopmentLink this work item to your codeoy inciuding xeys wiith Creaungla branch, commit, or pull request |below. Learn moreDismissDevelopment• Oocn with VS CodelCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY &"uoehnonoeleature fiag releaseDeployed0 -20585 15 + ****=AI Review - Q1CTNTHEWANTANOURCOVIDeployed19982 1 @ ...•=No such column "Type' onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 ^ ****=|Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:298 • Tue 14 Apr 9:58:53ChatNikolay YankovNikolay Ivanov...
|
NULL
|
-326921371687853529
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)PlactormSRD-677(7 (5RD-67)C Jy 1979607 Service-oir Font. Amr• COMTICHhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-20553• Sminn0 Projects# AWS|E SSHEl Dutadog* Claude3 CircieciPlatform TeamQ Search board800$ JY-20285 / A JY-20553READY FOR DEV 1Linked work itemsAdd linked work itemooesnoTixWiwexceed Fontawesomepackage limitsMAINTENANCISReady for Dev8-20564 1~ ActivitywotanoiStatus update...Pro tip: press (M to commNikolay Nikolov &Nhwewoalo4onConsider this has helped for the drop from 19 to 6 H: () https://github.com/jminny/app/pull/11796Connect.youcolay ikoloy9 Aprl 2026 at 16:28oonioruOeyE (Draft) Debug crm-sync long jobsPossible worker outage starting at 22:00 UTC on 2026-03-24:• Actions :A, Sentryl9:58 AM | Daily - Platform(ah|Daily - Platform • 7 m left8•С Ct: Depe• Actions sDependol• Far DepeD Tasks7 Insights & Coachin• DevDux.D Al BookmarksIn Dev vXZ Improve Story~ DetailsNikolay NikolovAsuntoeReporter8 Stetka Stoyanovauuick star dcvciopmentLink this work item to your codeoy inciuding xeys wiith Creaungla branch, commit, or pull request |below. Learn moreDismissDevelopment• Oocn with VS CodelCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY &"uoehnonoeleature fiag releaseDeployed0 -20585 15 + ****=AI Review - Q1CTNTHEWANTANOURCOVIDeployed19982 1 @ ...•=No such column "Type' onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 ^ ****=|Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:298 • Tue 14 Apr 9:58:53ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8666
|
166
|
29
|
2026-04-14T06:59:02.997685+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149942997_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Daily - Platform • 6 m left8•)))nbox (2)SRD-677C Jy 19796(7 Service-o xie Font Ame• COMTICHhttps://fjiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-20551Simiri0 ProjectsB AWSE3 SSHElDatadog * Claude3 CircieciPlatform TeamQ Search board800$ JY-12253 / E JY-20551READY FOR DEV 1Experiment with AI workflow for automated Dependabot fixesexceed Fontawesomepackage limitsMAINTENANESReady for Dev8-205641 П ****:~ Descriptionproposed chandesTry to bulld a workflow that automatically detects open Dependabot issues, fixes them with Al agent and opens a PR with |SubtasksLinked work itemsActivityCommentsHistoryWork logNUU & COITETISTnSuggest a reply…..Status update...Thanks….Pro tip: press M to commertcohny Yanko9 April 2026 at 14.17• Actions :С Ct: Depe• Actions sDependolD TasksInsights & Coachin.• Del0ux.©2|In Dev v#x Improve Technical Story~ DetailsAssignee& Nikolay YanikowKeoohNikolay YankovQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull requestbelow. Learn moreDismissDevelopment@ Open with VS Code1 Create branch+ Create commitComponentsPlatformSub-Product• Far DepeD Al Bookmarks9:59 AM Daily - PlatformGroup: QueriesPuooanonoeeleature fiag releaseDeployed0 -20565 15 + ****=AI Review - Q1CTNTHEVATAORCEVDeployed__19982 |1 ••**=No sucn coumh "lype onentty 'Event"PLATTORM STABTLTTYDeployed8 -20384 05 1 ****=Missed deletion of stale0m400R3 409000(Pipedrive) DI > status notlabeled, date data missingREDUCT CHURNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievLovalik13:388 • Tue 14 Apr 9:59:02ChatNikolay YankovNikolay Ivanov...
|
NULL
|
-8582562440983614743
|
NULL
|
visual_change
|
ocr
|
NULL
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Daily - Platform • 6 m left8•)))nbox (2)SRD-677C Jy 19796(7 Service-o xie Font Ame• COMTICHhttps://fjiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-20551Simiri0 ProjectsB AWSE3 SSHElDatadog * Claude3 CircieciPlatform TeamQ Search board800$ JY-12253 / E JY-20551READY FOR DEV 1Experiment with AI workflow for automated Dependabot fixesexceed Fontawesomepackage limitsMAINTENANESReady for Dev8-205641 П ****:~ Descriptionproposed chandesTry to bulld a workflow that automatically detects open Dependabot issues, fixes them with Al agent and opens a PR with |SubtasksLinked work itemsActivityCommentsHistoryWork logNUU & COITETISTnSuggest a reply…..Status update...Thanks….Pro tip: press M to commertcohny Yanko9 April 2026 at 14.17• Actions :С Ct: Depe• Actions sDependolD TasksInsights & Coachin.• Del0ux.©2|In Dev v#x Improve Technical Story~ DetailsAssignee& Nikolay YanikowKeoohNikolay YankovQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull requestbelow. Learn moreDismissDevelopment@ Open with VS Code1 Create branch+ Create commitComponentsPlatformSub-Product• Far DepeD Al Bookmarks9:59 AM Daily - PlatformGroup: QueriesPuooanonoeeleature fiag releaseDeployed0 -20565 15 + ****=AI Review - Q1CTNTHEVATAORCEVDeployed__19982 |1 ••**=No sucn coumh "lype onentty 'Event"PLATTORM STABTLTTYDeployed8 -20384 05 1 ****=Missed deletion of stale0m400R3 409000(Pipedrive) DI > status notlabeled, date data missingREDUCT CHURNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievLovalik13:388 • Tue 14 Apr 9:59:02ChatNikolay YankovNikolay Ivanov...
|
NULL
|
|
8668
|
167
|
46
|
2026-04-14T06:59:12.976303+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149952976_m2.jpg...
|
Firefox
|
Your Ask Jiminny test report report is ready - luk Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
1
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvc mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTl...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
jiminny.atlassian.net
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Close tab
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.09804688,"top":0.08958333,"width":0.09648438,"height":0.019444445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.atlassian.net","depth":4,"bounds":{"left":0.09804688,"top":0.10902778,"width":0.04140625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.08888889,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"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.015625,"top":0.14930555,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.1765625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.20277777,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.22638889,"width":0.08710937,"height":0.022222223},"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.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.2171875,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.23125,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.228125,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.0984375,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.1953125,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.2109375,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.09335937,"top":0.12847222,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.09335937,"top":0.13055556,"width":0.14101562,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This Python script defines the","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Collection (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"collect_test_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Supports fetching raw samples from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Elasticsearch (ES)","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or loading them from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local JSON files","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implements a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"replayability check","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": It probes the live API endpoint to ensure the activity exists before including it in the dataset.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filters data based on request body size, language, and the presence of an original response.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ground Truth Management:","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Saves inputs and \"gold standard\" responses to a local directory structure (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"eval_output/ai_activity_type/...","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Features an optional mode to populate ground truth using a high-order LLM (e.g.,","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gpt-5_2","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") if the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POPULATE_GROUND_TRUTH_LLM","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"flag is set.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Evaluation Logic (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"evaluate_against_ground_truth","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Compares the model's predicted","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_activity_type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against either the original ES response or the LLM-generated ground truth.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigns a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"quality_score","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a match and","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a mismatch or request failure.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Key Configuration Constants","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key Configuration Constants","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy table","depth":24,"bounds":{"left":0.22070312,"top":0.0,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Execution Workflow","depth":23,"bounds":{"left":0.103125,"top":0.0,"width":0.13320312,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Execution Workflow","depth":24,"bounds":{"left":0.103125,"top":0.0,"width":0.060546875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Parsing:","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.024609376,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script uses","depth":26,"bounds":{"left":0.14179687,"top":0.009027778,"width":0.04609375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"create_parser","depth":27,"bounds":{"left":0.19023438,"top":0.010416667,"width":0.042578124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle CLI arguments like","depth":26,"bounds":{"left":0.1171875,"top":0.009027778,"width":0.119140625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--data-set","depth":27,"bounds":{"left":0.1171875,"top":0.028472222,"width":0.107421875,"height":0.03125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.12929687,"top":0.045138888,"width":0.003125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--populate-ground-truth-llm","depth":27,"bounds":{"left":0.13476562,"top":0.046527777,"width":0.08867188,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.1171875,"top":0.045138888,"width":0.11171875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--compare-to-ground-truth","depth":27,"bounds":{"left":0.13203125,"top":0.06458333,"width":0.08203125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.21640626,"top":0.063194446,"width":0.0015625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Initialization:","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.039453126,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sets up directory paths for inputs and ground truths based on the selected dataset name.","depth":26,"bounds":{"left":0.1171875,"top":0.08680555,"width":0.11875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Run:","depth":26,"bounds":{"left":0.1171875,"top":0.14652778,"width":0.013671875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executes the evaluation via","depth":26,"bounds":{"left":0.13085938,"top":0.14652778,"width":0.080078125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.run(run_evaluation(...))","depth":27,"bounds":{"left":0.11953125,"top":0.16597222,"width":0.10507812,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", which orchestrates the collection, endpoint calling, and result scoring phases.","depth":26,"bounds":{"left":0.1171875,"top":0.16458334,"width":0.11289062,"height":0.06875},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.1203125,"top":0.28194445,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.1375,"top":0.28194445,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there soem issues with this PR","depth":21,"bounds":{"left":0.1609375,"top":0.29027778,"width":0.072265625,"height":0.03888889},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.09335937,"top":0.2923611,"width":0.0234375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there soem issues with this PR","depth":23,"bounds":{"left":0.1609375,"top":0.29305556,"width":0.062109374,"height":0.034027778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.22382812,"top":0.35694444,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"bounds":{"left":0.22382812,"top":0.35208333,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":26,"bounds":{"left":0.11953125,"top":0.35902777,"width":0.036328126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.11679687,"top":0.3951389,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.11679687,"top":0.39652777,"width":0.048046876,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.","depth":24,"bounds":{"left":0.10390625,"top":0.40347221,"width":0.13242188,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the most notable issues, categorized by impact:","depth":24,"bounds":{"left":0.10390625,"top":0.46875,"width":0.11640625,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Performance & Async Anti-Patterns","depth":23,"bounds":{"left":0.10390625,"top":0.5222222,"width":0.13242188,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Performance & Async Anti-Patterns","depth":24,"bounds":{"left":0.10390625,"top":0.5236111,"width":0.10859375,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sequential Requests Defeating Async (Lines 86-106):","depth":26,"bounds":{"left":0.11757813,"top":0.5465278,"width":0.11601563,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inside","depth":26,"bounds":{"left":0.16289063,"top":0.56458336,"width":0.019921875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"_collect_from_es","depth":27,"bounds":{"left":0.11992188,"top":0.58402777,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the code loops through","depth":26,"bounds":{"left":0.11757813,"top":0.58263886,"width":0.10429688,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw_samples","depth":27,"bounds":{"left":0.14414063,"top":0.6020833,"width":0.0359375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.18242188,"top":0.6006944,"width":0.0140625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"await","depth":27,"bounds":{"left":0.19882813,"top":0.6020833,"width":0.01640625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s a","depth":26,"bounds":{"left":0.21757813,"top":0.6006944,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"session.post","depth":27,"bounds":{"left":0.11992188,"top":0.6201389,"width":0.039453126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using","depth":26,"bounds":{"left":0.11757813,"top":0.61875,"width":0.11640625,"height":0.08680555},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiohttp","depth":27,"bounds":{"left":0.18046875,"top":0.6923611,"width":0.023046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for asynchronous concurrency.","depth":26,"bounds":{"left":0.11757813,"top":0.6909722,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.009765625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Collect these coroutines into a list and use","depth":28,"bounds":{"left":0.1296875,"top":0.7326389,"width":0.09921875,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.gather()","depth":29,"bounds":{"left":0.16601562,"top":0.75208336,"width":0.05234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(ideally wrapped in an","depth":28,"bounds":{"left":0.1296875,"top":0.75069445,"width":0.09257813,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.Semaphore","depth":29,"bounds":{"left":0.13203125,"top":0.7881944,"width":0.055859376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to avoid overwhelming the endpoint) to run the replayability probes concurrently.","depth":28,"bounds":{"left":0.1296875,"top":0.78680557,"width":0.10546875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):","depth":26,"bounds":{"left":0.11757813,"top":0.84652776,"width":0.10976563,"height":0.03263889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Standard synchronous file operations (","depth":26,"bounds":{"left":0.11757813,"top":0.8645833,"width":0.107421875,"height":0.050694443},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"with open(...)","depth":27,"bounds":{"left":0.12226562,"top":0.90208334,"width":0.045703124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.1703125,"top":0.90069443,"width":0.003515625,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json.dump","depth":27,"bounds":{"left":0.17617187,"top":0.90208334,"width":0.029296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.2078125,"top":0.90069443,"width":0.003125,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json.load","depth":27,"bounds":{"left":0.11992188,"top":0.9201389,"width":0.0296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") are used inside","depth":26,"bounds":{"left":0.15195313,"top":0.91875,"width":0.048046876,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"async def","depth":27,"bounds":{"left":0.20234375,"top":0.9201389,"width":0.0296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"functions. In Python, this blocks the entire event loop while the disk is reading/writing.","depth":26,"bounds":{"left":0.11757813,"top":0.91875,"width":0.11875,"height":0.06875},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.1296875,"top":0.9965278,"width":0.009765625,"height":0.003472209},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Use an asynchronous file I/O library like","depth":28,"bounds":{"left":0.1296875,"top":0.9965278,"width":0.09335937,"height":0.003472209},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiofiles","depth":29,"bounds":{"left":0.1625,"top":1.0,"width":0.0265625,"height":-0.015972257},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", or run the blocking I/O operations in a separate thread using","depth":28,"bounds":{"left":0.1296875,"top":1.0,"width":0.10585938,"height":-0.014583349},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"asyncio.to_thread()","depth":29,"bounds":{"left":0.16914062,"top":1.0,"width":0.0625,"height":-0.052083373},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"bounds":{"left":0.23398438,"top":1.0,"width":0.0015625,"height":-0.050694466},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Architecture & State Management","depth":23,"bounds":{"left":0.10390625,"top":1.0,"width":0.13242188,"height":-0.08611107},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Architecture & State Management","depth":24,"bounds":{"left":0.10390625,"top":1.0,"width":0.103515625,"height":-0.087499976},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mutating Class-Level Variables (Lines 323-328):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script parses CLI arguments and directly mutates the class attributes (e.g.,","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator.DATA_SET = args.data_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pass these arguments into the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"__init__","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constructor of the instance (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"self.data_set = args.data_set","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") rather than modifying the class definition globally.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Code Quality & Edge Cases","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Code Quality & Edge Cases","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Broad Exception Catching (Line 107):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Using a bare","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"except Exception:","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"during the replayability probe is dangerous. It will catch","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"aiohttp.ClientError","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(which is intended), but it will also silently swallow","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TimeoutError","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or even memory errors, making debugging incredibly difficult if the endpoint goes down.","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scope the exception to specific expected errors, like","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"except (aiohttp.ClientError, asyncio.TimeoutError):","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inefficient Size Calculation (Line 95):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"len(json.dumps(request_body)) < min_size","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"requires serializing the entire dictionary to a string","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
584939840227356054
|
6138248189675614487
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
jiminny.atlassian.net
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Close tab
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string...
|
NULL
|
|
8669
|
166
|
31
|
2026-04-14T06:59:15.715581+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149955715_m1.jpg...
|
Firefox
|
Your Ask Jiminny test report report is ready - luk Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
1
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvc mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTl...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"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,"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,"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,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\\nExpected: {gt_label}\\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This Python script defines the","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AiActivityTypeEvaluator","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Collection (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"collect_test_set","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Supports fetching raw samples from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Elasticsearch (ES)","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or loading them from","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local JSON files","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implements a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"replayability check","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": It probes the live API endpoint to ensure the activity exists before including it in the dataset.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filters data based on request body size, language, and the presence of an original response.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ground Truth Management:","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Saves inputs and \"gold standard\" responses to a local directory structure (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"eval_output/ai_activity_type/...","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Features an optional mode to populate ground truth using a high-order LLM (e.g.,","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gpt-5_2","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") if the","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POPULATE_GROUND_TRUTH_LLM","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"flag is set.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Evaluation Logic (","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"evaluate_against_ground_truth","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Compares the model's predicted","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_activity_type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against either the original ES response or the LLM-generated ground truth.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigns a","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"quality_score","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a match and","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.0","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a mismatch or request failure.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Key Configuration Constants","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key Configuration Constants","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Constant","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ENDPOINT_PATH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COMPARE_TO_GROUND_TRUTH","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SKIP_UNREPLAYABLE_ON_COLLECT","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REPLAYABILITY_CHECK_TIMEOUT_SECONDS","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Purpose","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The specific API route being tested:","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"call/ai-activity-type","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if the baseline is the original data (","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"es","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or an","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"llm","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", discards records where the API returns \"Cannot find activity.\"","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limits the probe request to 20 seconds.","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy table","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Execution Workflow","depth":23,"bounds":{"left":0.008333334,"top":0.0,"width":0.11840278,"height":0.013333334},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Execution Workflow","depth":24,"bounds":{"left":0.008333334,"top":0.0,"width":0.053819444,"height":0.011666667}}]...
|
-706451971627840756
|
4985326685068824967
|
click
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow...
|
NULL
|
|
8671
|
167
|
48
|
2026-04-14T06:59:16.643511+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149956643_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpmail.google.com/mail/u/O/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTIbookmhlePlatform Sprint 1 Q2 - Platform TeaQ Gearch bookmarks@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Your Ask Jiminny test report rev booknarks 100l0a1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks+ New lab=MailChatMeetM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsHoe emalisGithubappextensionvuejsJIRANotes• Utilities[< 40 ll • | Daily - Platform • 6m left100% C# 8• Tue 14 Apr 9:59:16UMNNY 61,540Q Ask GmailYour Ask Jiminny test report report is ready Inbox xThe Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01AM (4 days ago)++7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail ®# Add to DrivePor Ask Jiminny test r...1 Reply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks203• Share in chat-...
|
NULL
|
542848553138266497
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpmail.google.com/mail/u/O/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTIbookmhlePlatform Sprint 1 Q2 - Platform TeaQ Gearch bookmarks@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Your Ask Jiminny test report rev booknarks 100l0a1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks+ New lab=MailChatMeetM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsHoe emalisGithubappextensionvuejsJIRANotes• Utilities[< 40 ll • | Daily - Platform • 6m left100% C# 8• Tue 14 Apr 9:59:16UMNNY 61,540Q Ask GmailYour Ask Jiminny test report report is ready Inbox xThe Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01AM (4 days ago)++7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail ®# Add to DrivePor Ask Jiminny test r...1 Reply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks203• Share in chat-...
|
NULL
|
|
8674
|
167
|
50
|
2026-04-14T06:59:19.674016+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149959674_m2.jpg...
|
Firefox
|
Jira — Work
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Jira
Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
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]
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
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star
-
Unassigned tickets
Unassigned tickets
Star
-
Support team Queue
Support team Queue
Star
-
Raised by me
Raised by me
Star
-
Assigned to me
Assigned to me
Star
-
Service requests
Service requests
Star
-
Platform team
Platform team
Star
-
Processing team
Processing team
Star
-
Site reliability team
Site reliability team
Star
-
New features requests
New features requests
Star
-
InfoSec issues
InfoSec issues
Star
-
Ready for Customer
Ready for Customer
Star
-
Resolved tickets
Resolved tickets
Star
-
View all queues
View all queues...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"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.015625,"top":0.14930555,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jira","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jira","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.007421875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.20277777,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.22638889,"width":0.08710937,"height":0.022222223},"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.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"bounds":{"left":0.09804688,"top":0.060416665,"width":0.03125,"height":0.013194445},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"bounds":{"left":0.09804688,"top":0.060416665,"width":0.03125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"bounds":{"left":0.20976563,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"bounds":{"left":0.096875,"top":0.08680555,"width":0.12617187,"height":0.022222223},"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.2421875,"top":0.068055555,"width":0.019921875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.2421875,"top":0.08472222,"width":0.019921875,"height":0.0125},"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.2421875,"top":0.08472222,"width":0.019921875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.2421875,"top":0.10138889,"width":0.019921875,"height":0.0125},"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.2421875,"top":0.10138889,"width":0.019921875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.2421875,"top":0.11805555,"width":0.034375,"height":0.0125},"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.2421875,"top":0.11805555,"width":0.034375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.234375,"top":0.050694443,"width":0.0125,"height":0.022222223},"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.240625,"top":0.05486111,"width":0.046484374,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.2484375,"top":0.050694443,"width":0.0125,"height":0.022222223},"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.2546875,"top":0.05486111,"width":0.051953126,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.2640625,"top":0.050694443,"width":0.034765624,"height":0.022222223},"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.45625,"top":0.05486111,"width":0.28515625,"height":0.013888889},"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.7511719,"top":0.050694443,"width":0.03515625,"height":0.022222223},"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.7644531,"top":0.055555556,"width":0.0171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.8953125,"top":0.050694443,"width":0.0421875,"height":0.022222223},"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.9085938,"top":0.055555556,"width":0.02421875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.9390625,"top":0.050694443,"width":0.0125,"height":0.022222223},"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.9453125,"top":0.05486111,"width":0.032421876,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.953125,"top":0.050694443,"width":0.0125,"height":0.022222223},"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.959375,"top":0.05486111,"width":0.01171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9671875,"top":0.050694443,"width":0.0125,"height":0.022222223},"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.9734375,"top":0.05486111,"width":0.020703126,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.9820312,"top":0.050694443,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.234375,"top":0.08680555,"width":0.078125,"height":0.022222223},"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.246875,"top":0.09166667,"width":0.01953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Recent","depth":12,"bounds":{"left":0.234375,"top":0.10902778,"width":0.078125,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.246875,"top":0.11388889,"width":0.018359374,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Starred","depth":12,"bounds":{"left":0.234375,"top":0.13125,"width":0.078125,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.246875,"top":0.13611111,"width":0.019140625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.234375,"top":0.15347221,"width":0.078125,"height":0.022222223},"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.246875,"top":0.15833333,"width":0.013671875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.31015626,"top":0.15625,"width":0.0046875,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.234375,"top":0.17569445,"width":0.078125,"height":0.022222223},"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.246875,"top":0.18055555,"width":0.01953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.290625,"top":0.17847222,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.3015625,"top":0.17847222,"width":0.009375,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.24140625,"top":0.20416667,"width":0.016015625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.2390625,"top":0.22013889,"width":0.0734375,"height":0.022222223},"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.2515625,"top":0.225,"width":0.0375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.240625,"top":0.22291666,"width":0.009375,"height":0.016666668},"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.3125,"top":0.22291666,"width":0.009375,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.32109374,"top":0.22291666,"width":0.0046875,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.2390625,"top":0.24236111,"width":0.0734375,"height":0.022222223},"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.2515625,"top":0.24722221,"width":0.035546876,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.3015625,"top":0.24513888,"width":0.009375,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Queues","depth":21,"bounds":{"left":0.24375,"top":0.26458332,"width":0.06875,"height":0.022222223},"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.25625,"top":0.26944444,"width":0.0203125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.290625,"top":0.2673611,"width":0.009375,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for queues","depth":22,"bounds":{"left":0.3015625,"top":0.2673611,"width":0.009375,"height":0.016666668},"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Team Priority","depth":23,"bounds":{"left":0.2484375,"top":0.28680557,"width":0.0640625,"height":0.022222223},"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.2609375,"top":0.29166666,"width":0.034765624,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All open tickets","depth":25,"bounds":{"left":0.253125,"top":0.3090278,"width":0.059375,"height":0.022222223},"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.265625,"top":0.31388888,"width":0.03203125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.31180555,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.31527779,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unassigned tickets","depth":25,"bounds":{"left":0.253125,"top":0.33125,"width":0.059375,"height":0.022222223},"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.265625,"top":0.3361111,"width":0.034375,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.33402777,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.3375,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Support team Queue","depth":25,"bounds":{"left":0.253125,"top":0.35347223,"width":0.059375,"height":0.022222223},"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.265625,"top":0.35833332,"width":0.03046875,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.35625,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.35972223,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Raised by me","depth":25,"bounds":{"left":0.253125,"top":0.37569445,"width":0.059375,"height":0.022222223},"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.265625,"top":0.38055557,"width":0.031640626,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.3784722,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.38194445,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Assigned to me","depth":25,"bounds":{"left":0.253125,"top":0.39791667,"width":0.059375,"height":0.022222223},"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.265625,"top":0.4027778,"width":0.030859375,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.40069443,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.40416667,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service requests","depth":25,"bounds":{"left":0.253125,"top":0.4201389,"width":0.059375,"height":0.022222223},"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.265625,"top":0.425,"width":0.033203125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.42291668,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.4263889,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform team","depth":25,"bounds":{"left":0.253125,"top":0.44236112,"width":0.059375,"height":0.022222223},"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.265625,"top":0.44722223,"width":0.031640626,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.4451389,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.4486111,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing team","depth":25,"bounds":{"left":0.253125,"top":0.46458334,"width":0.059375,"height":0.022222223},"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.265625,"top":0.46944445,"width":0.032421876,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.46736112,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.47083333,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Site reliability team","depth":25,"bounds":{"left":0.253125,"top":0.48680556,"width":0.059375,"height":0.022222223},"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.265625,"top":0.49166667,"width":0.03203125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.48958334,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.49305555,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"New features requests","depth":25,"bounds":{"left":0.253125,"top":0.5090278,"width":0.059375,"height":0.022222223},"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.265625,"top":0.5138889,"width":0.03203125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.51180553,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.5152778,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"InfoSec issues","depth":25,"bounds":{"left":0.253125,"top":0.53125,"width":0.059375,"height":0.022222223},"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.265625,"top":0.5361111,"width":0.0328125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.53402776,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.5375,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ready for Customer","depth":25,"bounds":{"left":0.253125,"top":0.5534722,"width":0.059375,"height":0.022222223},"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.265625,"top":0.55833334,"width":0.033984374,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.55625,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.55972224,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Resolved tickets","depth":25,"bounds":{"left":0.253125,"top":0.57569444,"width":0.059375,"height":0.022222223},"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.265625,"top":0.58055556,"width":0.031640626,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star","depth":26,"bounds":{"left":0.3015625,"top":0.5784722,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-","depth":28,"bounds":{"left":0.30507812,"top":0.58194447,"width":0.00234375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View all queues","depth":23,"bounds":{"left":0.2484375,"top":0.59791666,"width":0.0640625,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View all queues","depth":26,"bounds":{"left":0.2609375,"top":0.6027778,"width":0.037890624,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6607006849037338122
|
275644698370929852
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Jira
Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
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]
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
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star
-
Unassigned tickets
Unassigned tickets
Star
-
Support team Queue
Support team Queue
Star
-
Raised by me
Raised by me
Star
-
Assigned to me
Assigned to me
Star
-
Service requests
Service requests
Star
-
Platform team
Platform team
Star
-
Processing team
Processing team
Star
-
Site reliability team
Site reliability team
Star
-
New features requests
New features requests
Star
-
InfoSec issues
InfoSec issues
Star
-
Ready for Customer
Ready for Customer
Star
-
Resolved tickets
Resolved tickets
Star
-
View all queues
View all queues...
|
NULL
|
|
8675
|
166
|
33
|
2026-04-14T06:59:21.245798+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149961245_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme...Mandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorO Refactor secfix scripts for improved parsing and handling of coveredl...it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu wpenosootweewe00OSe PWROOFTRONTaraos• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -H wOrmowSelect branch |Tagshutspot-webhooks-bckpfa-planet-migrationsfa-fontamesome-download-issuesfeature(JY-19120-chorus-retryfeature(JY-16492-office-add-inSeatureT-10400© 4m 236Daily - Platform • 6 m leftO Far Depeue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova13:5688 • Tue 14 Apr 9:59:21ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
-8928779894947133075
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme...Mandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorO Refactor secfix scripts for improved parsing and handling of coveredl...it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu wpenosootweewe00OSe PWROOFTRONTaraos• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -H wOrmowSelect branch |Tagshutspot-webhooks-bckpfa-planet-migrationsfa-fontamesome-download-issuesfeature(JY-19120-chorus-retryfeature(JY-16492-office-add-inSeatureT-10400© 4m 236Daily - Platform • 6 m leftO Far Depeue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova13:5688 • Tue 14 Apr 9:59:21ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
|
8678
|
167
|
52
|
2026-04-14T06:59:28.771388+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149968771_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProtilesToolsWi FirefoxFileEoitViewHistoryBookmarksProtilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 340 hil l Daily - Platform • 6m leftA * 100%C# &• Tue 14 Apr 9:59:28Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnya Ask Jiminny test report - 8 Apr XNService-Desk - Queues - Platform+ New labbookmhleSearch bookmarksv Booknarks100l0aiSprint BoardSRD QueueASk Jiminny test report- o Apr 2026 - ASK- | + Automatic Zoom ~Other BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
-7458616570507097592
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProtilesToolsWi FirefoxFileEoitViewHistoryBookmarksProtilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 340 hil l Daily - Platform • 6m leftA * 100%C# &• Tue 14 Apr 9:59:28Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnya Ask Jiminny test report - 8 Apr XNService-Desk - Queues - Platform+ New labbookmhleSearch bookmarksv Booknarks100l0aiSprint BoardSRD QueueASk Jiminny test report- o Apr 2026 - ASK- | + Automatic Zoom ~Other BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
|
8679
|
166
|
35
|
2026-04-14T06:59:36.351777+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149976351_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)иbок (2)C SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, Anv• COstI CHE SSHEl Dutadogjminay / app&‹> Code11 Pull requestsActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows33 workflow runsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRelease EnvironmentStart-Stop EnvironmentRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankov[include) Start/Stop testing environme…Refactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankorMarsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m left8•C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35sE Apr 9, 10-16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)ue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova14:118 • Tue 14 Apr 9:59:36ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
4147430899678859583
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)иbок (2)C SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, Anv• COstI CHE SSHEl Dutadogjminay / app&‹> Code11 Pull requestsActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows33 workflow runsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRelease EnvironmentStart-Stop EnvironmentRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankov[include) Start/Stop testing environme…Refactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankorMarsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m left8•C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35sE Apr 9, 10-16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)ue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova14:118 • Tue 14 Apr 9:59:36ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
|
8681
|
166
|
37
|
2026-04-14T06:59:42.355506+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149982355_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)nboк (21SRD-677T7 (SRO-67C зy 19796( Service-cJz Font Awe• COstI CHE3 SSHEl Dutados3 Circiecjminay / app&‹> Code11 Pull requests 24ActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows$1NNotion[include) Database Migrations[include) Start/Stop testing environme...Refactor Slack notification handling in secfix scripts and workflowPu Dpenosootiwee# 2681d34 pushed by nikolay-yankovMandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pilkolay-yankovFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by nikolay-yankoy• Fix Dependabot issuesQ Actions :C Ct: DepeD Tиsks27 insights & CoachinD DevQ Type to searchQ Fiter workdiow runs•ux.autonate-dependabot-issue-auto300-0epc00000530Cautonate-dependabot-issue..autonate-dependabot-issue..E8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|68 Aor 9, 9:48 PM GMT+3(0) 150E8 Apr 9, 7:30 PM GMT+3Ô 4m 238Apr 9,7116 PM GMTe9:59 AM Daily - PlatformDaily - Platform • 6 m leftO Far DepeStefka StoyanovaSteliyan GeorgievAneliya Angelova14:178 • Tue 14 Apr 9:59:42• ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
-8529167732228103597
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)nboк (21SRD-677T7 (SRO-67C зy 19796( Service-cJz Font Awe• COstI CHE3 SSHEl Dutados3 Circiecjminay / app&‹> Code11 Pull requests 24ActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows$1NNotion[include) Database Migrations[include) Start/Stop testing environme...Refactor Slack notification handling in secfix scripts and workflowPu Dpenosootiwee# 2681d34 pushed by nikolay-yankovMandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pilkolay-yankovFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by nikolay-yankoy• Fix Dependabot issuesQ Actions :C Ct: DepeD Tиsks27 insights & CoachinD DevQ Type to searchQ Fiter workdiow runs•ux.autonate-dependabot-issue-auto300-0epc00000530Cautonate-dependabot-issue..autonate-dependabot-issue..E8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|68 Aor 9, 9:48 PM GMT+3(0) 150E8 Apr 9, 7:30 PM GMT+3Ô 4m 238Apr 9,7116 PM GMTe9:59 AM Daily - PlatformDaily - Platform • 6 m leftO Far DepeStefka StoyanovaSteliyan GeorgievAneliya Angelova14:178 • Tue 14 Apr 9:59:42• ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
|
8683
|
166
|
39
|
2026-04-14T06:59:52.651443+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149992651_m1.jpg...
|
Dia
|
Work: Meet - Daily - Pla…
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined...
|
[{"role":"AXHeading","text" [{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.045833334,"top":0.11,"width":0.125,"height":0.022222223},"role_description":"heading"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":14,"bounds":{"left":0.045833334,"top":0.11111111,"width":0.125,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"People","depth":15,"bounds":{"left":0.8826389,"top":0.09888889,"width":0.04097222,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":18,"bounds":{"left":0.91041666,"top":0.11,"width":0.0048611113,"height":0.016666668},"role_description":"text"},{"role":"AXPopUpButton","text":"Take notes with Gemini","depth":15,"bounds":{"left":0.9291667,"top":0.09888889,"width":0.025,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":19,"bounds":{"left":0.93194443,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXStaticText","text":"Gemini","depth":19,"bounds":{"left":0.9625,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Gemini","depth":18,"bounds":{"left":0.9604167,"top":0.1,"width":0.023611112,"height":0.037777778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":14,"bounds":{"left":0.62083334,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in new window","depth":15,"bounds":{"left":0.65416664,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Enter Full Screen","depth":15,"bounds":{"left":0.6875,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"bounds":{"left":0.7430556,"top":0.36666667,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.87222224,"top":0.36666667,"width":0.077083334,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"bounds":{"left":0.7430556,"top":0.6188889,"width":0.09097222,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"bounds":{"left":0.87222224,"top":0.6188889,"width":0.075,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"bounds":{"left":0.7430556,"top":0.8711111,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.87222224,"top":0.8711111,"width":0.06944445,"height":0.022222223},"role_description":"text"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9618056,"top":0.86777776,"width":0.018055556,"height":0.028888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9:59","depth":10,"bounds":{"left":0.020833334,"top":0.93777776,"width":0.022222223,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"AM","depth":10,"bounds":{"left":0.045833334,"top":0.93777776,"width":0.018055556,"height":0.022222223},"role_description":"text"},{"role":"AXHeading","text":"Daily - Platform","depth":10,"bounds":{"left":0.08125,"top":0.90444446,"width":0.08194444,"height":0.08888889},"role_description":"heading"},{"role":"AXStaticText","text":"Daily - Platform","depth":13,"bounds":{"left":0.08125,"top":0.93777776,"width":0.08194444,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Audio settings","depth":14,"bounds":{"left":0.30416667,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":14,"bounds":{"left":0.33194444,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Video settings","depth":14,"bounds":{"left":0.37083334,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":14,"bounds":{"left":0.3986111,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov is presenting","depth":12,"bounds":{"left":0.4375,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"bounds":{"left":0.48194444,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":11,"bounds":{"left":0.5263889,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":11,"bounds":{"left":0.5708333,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":14,"bounds":{"left":0.61527777,"top":0.9222222,"width":0.025,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":11,"bounds":{"left":0.6458333,"top":0.9222222,"width":0.05,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting details","depth":12,"bounds":{"left":0.8875,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"bounds":{"left":0.92083335,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"bounds":{"left":0.95416665,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova joined","depth":4,"bounds":{"left":0.004166667,"top":0.08111111,"width":0.00069444446,"height":0.0011111111},"role_description":"text"}]...
|
6456261976390749238
|
5823429591821252920
|
app_switch
|
accessibility
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined...
|
NULL
|
|
8684
|
167
|
53
|
2026-04-14T06:59:52.651412+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149992651_m2.jpg...
|
Dia
|
Work: Meet - Daily - Pla…
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform...
|
[{"role":"AXHeading","text" [{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.2589844,"top":1.0,"width":0.0703125,"height":-0.068750024},"role_description":"heading"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":14,"bounds":{"left":0.2589844,"top":1.0,"width":0.0703125,"height":-0.06944442},"role_description":"text"},{"role":"AXPopUpButton","text":"People","depth":15,"bounds":{"left":0.7296875,"top":1.0,"width":0.023046875,"height":-0.061805606},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":18,"bounds":{"left":0.7453125,"top":1.0,"width":0.002734375,"height":-0.068750024},"role_description":"text"},{"role":"AXPopUpButton","text":"Take notes with Gemini","depth":15,"bounds":{"left":0.7558594,"top":1.0,"width":0.0140625,"height":-0.061805606},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":19,"bounds":{"left":0.75742185,"top":1.0,"width":0.0125,"height":-0.068750024},"role_description":"text"},{"role":"AXStaticText","text":"Gemini","depth":19,"bounds":{"left":0.7746094,"top":1.0,"width":0.0125,"height":-0.068750024},"role_description":"text"},{"role":"AXButton","text":"Gemini","depth":18,"bounds":{"left":0.7734375,"top":1.0,"width":0.01328125,"height":-0.0625},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in new window","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Enter Full Screen","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9:59","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"AM","depth":10,"role_description":"text"},{"role":"AXHeading","text":"Daily - Platform","depth":10,"role_description":"heading"},{"role":"AXStaticText","text":"Daily - Platform","depth":13,"role_description":"text"},{"role":"AXPopUpButton","text":"Audio settings","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":14,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Video settings","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov is presenting","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting details","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova joined","depth":4,"bounds":{"left":0.23554687,"top":1.0,"width":0.000390625,"height":-0.050694466},"role_description":"text"},{"role":"AXTextArea","text":"meet.google.com / Daily - Platform","depth":5,"bounds":{"left":0.2957031,"top":1.0,"width":0.12148438,"height":-0.02569449},"automation_id":"navigationBarAssistantBarTextField","value":"meet.google.com / Daily - Platform","role_description":"text entry area","is_focused":false}]...
|
4614422700956627149
|
5823429591821249304
|
app_switch
|
accessibility
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform...
|
NULL
|
|
8687
|
166
|
41
|
2026-04-14T06:59:57.516101+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776149997516_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme._.Marsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankor• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)Daily - Platform - 6 m left100% [8• Tue 14 Apr 9:59:57ChatO Far DepeEA oootnrtStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova14:32Lukas Kovalik...
|
NULL
|
3734174758061693885
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme._.Marsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankor• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)Daily - Platform - 6 m left100% [8• Tue 14 Apr 9:59:57ChatO Far DepeEA oootnrtStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova14:32Lukas Kovalik...
|
NULL
|
|
8689
|
167
|
55
|
2026-04-14T07:00:05.324061+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150005324_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Docker DesktopEditView40 lil• | Daily - Platform • Docker DesktopEditView40 lil• | Daily - Platform • 5m leftA100% C.∞• Tue 14 Apr 10:00:04app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3+ Automatic coomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platf- New laobookmaeQ Search bookmarksv booknarks100l0atSprint BoardSRD Queuecithuav E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks• • •ii dockerdesktop PERSONALQ SearchSign inStarting the Docker Engine...Docker Engine is the underlying technology that runs containersdly Engine startingRAM 0.00 GB CPU 0.00% Disk: -- GB used (limit -- GB)>_ ® Update availableJIMINNY-...
|
NULL
|
-4762470170813870733
|
NULL
|
visual_change
|
ocr
|
NULL
|
Docker DesktopEditView40 lil• | Daily - Platform • Docker DesktopEditView40 lil• | Daily - Platform • 5m leftA100% C.∞• Tue 14 Apr 10:00:04app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3+ Automatic coomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platf- New laobookmaeQ Search bookmarksv booknarks100l0atSprint BoardSRD Queuecithuav E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks• • •ii dockerdesktop PERSONALQ SearchSign inStarting the Docker Engine...Docker Engine is the underlying technology that runs containersdly Engine startingRAM 0.00 GB CPU 0.00% Disk: -- GB used (limit -- GB)>_ ® Update availableJIMINNY-...
|
NULL
|
|
8691
|
169
|
0
|
2026-04-14T07:00:11.333246+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150011333_m2.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"clipboard)\n2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames\n2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted\n2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)\n2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)\n2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)\n2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)\n2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)\n2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)\n2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)\n2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)\n2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)\n2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests\n2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)\n2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames\n2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted\n2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)\n2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames\n2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted\n2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)\n2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames\n2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted\n2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)\n2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted\n2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)\n2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)\n2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:19:54.331647Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:19:54.331585+00:00 (14d retention)\n2026-04-12T14:25:49.460879Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:47:08.896043Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:51:40.566736Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:51:40.566667+00:00 (14d retention)\n2026-04-12T15:04:41.463531Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T15:09:53.670591Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T15:09:53.687234Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T15:09:53.694692Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T15:09:54.069049Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T15:09:54.972151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=click)\n2026-04-12T15:10:00.918510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4593439385064446773, trigger=visual_change)\n2026-04-12T15:10:03.918707Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T15:11:30.984863Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:11:30.984842+00:00 (14d retention)\n2026-04-12T15:16:30.982686Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:16:30.982661+00:00 (14d retention)\n2026-04-12T15:21:30.980571Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:21:30.980551+00:00 (14d retention)\n2026-04-12T15:22:42.975270Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-12T15:22:45.011395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 3.1MB → 1.1MB (2.8x), 33 JPEGs deleted\n2026-04-12T15:26:30.978141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:26:30.978120+00:00 (14d retention)\n2026-04-12T15:27:45.265922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-12T15:27:49.938865Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 83 frames, 6.3MB → 0.1MB (58.2x), 83 JPEGs deleted\n2026-04-12T15:31:30.953991Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:31:30.953971+00:00 (14d retention)\n2026-04-12T15:32:50.166006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:32:55.707883Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 7.5MB → 0.1MB (70.1x), 99 JPEGs deleted\n2026-04-12T15:32:56.071976Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (3.0x), 3 JPEGs deleted\n2026-04-12T15:36:30.948421Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:36:30.948401+00:00 (14d retention)\n2026-04-12T15:37:56.337459Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:38:01.842312Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.0x), 98 JPEGs deleted\n2026-04-12T15:38:02.207918Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (2.8x), 3 JPEGs deleted\n2026-04-12T15:41:30.945296Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:41:30.945274+00:00 (14d retention)\n2026-04-12T15:43:02.496758Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:43:08.031970Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (68.3x), 98 JPEGs deleted\n2026-04-12T15:43:09.583075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.5x), 26 JPEGs deleted\n2026-04-12T15:46:30.941625Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:46:30.941607+00:00 (14d retention)\n2026-04-12T15:48:09.854085Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 127 eligible frames\n2026-04-12T15:48:15.376242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.2x), 98 JPEGs deleted\n2026-04-12T15:48:16.986205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.0MB → 0.1MB (22.4x), 27 JPEGs deleted\n2026-04-12T15:51:30.931020Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:51:30.931+00:00 (14d retention)\n2026-04-12T15:53:17.140652Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:53:22.544303Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.5x), 98 JPEGs deleted\n2026-04-12T15:53:24.051282Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.4x), 26 JPEGs deleted\n2026-04-12T15:56:30.903513Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:56:30.903491+00:00 (14d retention)\n2026-04-12T15:58:24.061857Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 107 eligible frames\n2026-04-12T15:58:29.565651Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.8x), 98 JPEGs deleted\n2026-04-12T15:58:30.163222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 0.5MB → 0.1MB (6.1x), 7 JPEGs deleted\n2026-04-12T16:01:30.898705Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:01:30.898688+00:00 (14d retention)\n2026-04-12T16:03:30.176572Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-12T16:03:35.702407Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (66.5x), 98 JPEGs deleted\n2026-04-12T16:03:37.208567Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 1.9MB → 0.1MB (19.5x), 25 JPEGs deleted\n2026-04-12T16:06:30.893145Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:06:30.893123+00:00 (14d retention)\n2026-04-12T16:08:37.224128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 137 eligible frames\n2026-04-12T16:08:42.754922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (55.1x), 98 JPEGs deleted\n2026-04-12T16:08:44.902888Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 2.9MB → 0.1MB (27.8x), 37 JPEGs deleted\n2026-04-12T16:11:30.884492Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:11:30.884475+00:00 (14d retention)\n2026-04-12T16:13:44.914274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 102 eligible frames\n2026-04-12T16:13:50.332990Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (60.2x), 98 JPEGs deleted\n2026-04-12T16:13:50.582963Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.2MB → 0.1MB (1.9x), 2 JPEGs deleted\n2026-04-12T16:16:30.874710Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:16:30.874654+00:00 (14d retention)\n2026-04-12T16:18:50.598274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 92 eligible frames\n2026-04-12T16:18:55.602978Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 7.0MB → 0.1MB (56.9x), 90 JPEGs deleted\n2026-04-12T16:21:30.868887Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:21:30.868843+00:00 (14d retention)\n2026-04-12T16:23:55.619078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 39 eligible frames\n2026-04-12T16:23:57.827626Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 2.9MB → 0.1MB (28.1x), 38 JPEGs deleted\n2026-04-12T16:25:51.808414Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T16:25:55.859250Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-12T16:26:22.022550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=335681983743287612, trigger=visual_change)\n2026-04-12T16:26:30.862865Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:26:30.862859+00:00 (14d retention)\n2026-04-12T16:26:49.195853Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=visual_change)\n2026-04-12T16:26:50.724575Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=clipboard)\n2026-04-12T16:26:58.277345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:26:59.647372Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=clipboard)\n2026-04-12T16:27:58.948426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:28:57.842202Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-12T16:28:59.471378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.1MB → 0.1MB (19.7x), 27 JPEGs deleted\n2026-04-12T16:30:07.202386Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3216013508830929208, trigger=click)\n2026-04-12T16:30:55.852584Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T16:31:30.887381Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:31:30.887363+00:00 (14d retention)\n2026-04-12T16:31:49.004783Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:31:49.729537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=click)\n2026-04-12T16:31:55.091180Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:32:38.955241Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:41.068172Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=clipboard)\n2026-04-12T16:32:42.939568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:44.448998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=visual_change)\n2026-04-12T16:32:46.133335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=click)\n2026-04-12T16:32:47.467019Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:32:47.909378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=clipboard)\n2026-04-12T16:33:06.479217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:33:09.545186Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5503780454464997020, trigger=visual_change)\n2026-04-12T16:33:15.550145Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7389604070772900291, trigger=visual_change)\n2026-04-12T16:33:59.523675Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 12 eligible frames\n2026-04-12T16:34:00.275262Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 0.9MB → 0.1MB (9.2x), 11 JPEGs deleted\n2026-04-12T16:36:30.893415Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:36:30.893405+00:00 (14d retention)\n2026-04-12T16:37:02.339834Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T16:42:28.176895Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 54 eligible frames\n2026-04-12T16:42:31.234893Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 53 frames, 4.9MB → 1.5MB (3.4x), 53 JPEGs deleted\n2026-04-12T16:46:30.256919Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:46:30.256841+00:00 (14d retention)\n2026-04-12T16:58:23.782435Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T16:59:58.366015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 25 eligible frames\n2026-04-12T16:59:59.856243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 2.8MB → 0.5MB (5.8x), 24 JPEGs deleted\n2026-04-12T18:37:05.993577Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T18:39:53.607673Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T18:46:44.262699Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T15:46:44.262630+00:00 (14d retention)\n2026-04-12T18:55:18.717641Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T19:09:18.536900Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T20:13:29.785331Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T17:13:29.785272+00:00 (14d retention)\n2026-04-12T20:13:47.397970Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording\n2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)\n2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording\n2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1\n2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6\n2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording\n2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording\n2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6\n2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1\n2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)\n2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)\n2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)\n2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)\n2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)\n2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)\n2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)\n2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)\n2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)\n2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)\n2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)\n2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)\n2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)\n2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)\n2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)\n2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)\n2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)\n2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)\n2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)\n2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)\n2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)\n2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)\n2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)\n2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)\n2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)\n2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)\n2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)\n2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)\n2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)\n2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)\n2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)\n2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)\n2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)\n2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)\n2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)\n2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)\n2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)\n2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)\n2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)\n2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)\n2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)\n2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)\n2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)\n2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)\n2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)\n2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)\n2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)\n2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames\n2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted\n2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted\n2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)\n2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)\n2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames\n2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted\n2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)\n2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted\n2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)\n2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames\n2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted\n2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)\n2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)\n2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted\n2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted\n2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)\n2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames\n2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted\n2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted\n2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)\n2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames\n2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted\n2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted\n2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)\n2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted\n2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)\n2026-04-13T15:57:06.748688Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=1000 elapsed=1.158041625s\n2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames\n2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted\n2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)\n2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames\n2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted\n2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)\n2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames\n2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted\n2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)\n2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames\n2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted\n2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted\n2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)\n2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted\n2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted\n2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)\n2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted\n2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted\n2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)\n2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:30:07.345631Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.0x), 98 JPEGs deleted\n2026-04-13T16:30:09.401035Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 4.2MB → 0.2MB (17.5x), 35 JPEGs deleted\n2026-04-13T16:30:58.877763Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:30:58.877747+00:00 (14d retention)\n2026-04-13T16:35:09.543901Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 123 eligible frames\n2026-04-13T16:35:15.118342Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (29.4x), 98 JPEGs deleted\n2026-04-13T16:35:16.544264Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 2.8MB → 0.2MB (13.7x), 23 JPEGs deleted\n2026-04-13T16:35:58.877807Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:35:58.877797+00:00 (14d retention)\n2026-04-13T16:38:16.074486Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9190773859099204307, trigger=click)\n2026-04-13T16:39:15.630281Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=visual_change)\n2026-04-13T16:39:18.164527Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T16:39:39.417651Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:39:46.483591Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T16:40:16.572113Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 142 eligible frames\n2026-04-13T16:40:21.964524Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.3x), 98 JPEGs deleted\n2026-04-13T16:40:23.872191Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T16:40:24.338496Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 5.1MB → 0.3MB (19.6x), 42 JPEGs deleted\n2026-04-13T16:40:58.876854Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:40:58.876845+00:00 (14d retention)\n2026-04-13T16:41:10.838114Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=visual_change)\n2026-04-13T16:42:13.892340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5199349294477942535, trigger=click)\n2026-04-13T16:42:44.819070Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:45:24.413681Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 163 eligible frames\n2026-04-13T16:45:29.941955Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.1x), 98 JPEGs deleted\n2026-04-13T16:45:33.507323Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 7.6MB → 0.3MB (24.3x), 63 JPEGs deleted\n2026-04-13T16:45:58.885928Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:45:58.885879+00:00 (14d retention)\n2026-04-13T16:50:33.536731Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 117 eligible frames\n2026-04-13T16:50:39.528450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 12.0MB → 2.2MB (5.4x), 98 JPEGs deleted\n2026-04-13T16:50:41.016936Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.5MB → 1.6MB (2.2x), 17 JPEGs deleted\n2026-04-13T16:50:58.885615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:50:58.885607+00:00 (14d retention)\n2026-04-13T16:55:41.041166Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:55:46.654516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 17.3MB → 4.5MB (3.8x), 98 JPEGs deleted\n2026-04-13T16:55:48.802425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 7.0MB → 0.9MB (7.8x), 35 JPEGs deleted\n2026-04-13T16:55:58.885247Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:55:58.885238+00:00 (14d retention)\n2026-04-13T17:00:48.921394Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-13T17:00:54.499682Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 2.0MB (9.8x), 98 JPEGs deleted\n2026-04-13T17:00:56.069295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 5.0MB → 0.7MB (7.2x), 25 JPEGs deleted\n2026-04-13T17:00:58.884750Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:00:58.884741+00:00 (14d retention)\n2026-04-13T17:04:17.476028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:20.514684Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:23.559568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:29.620877Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:44.761227Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:21.254931Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:24.295008Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:27.336461Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:30.386176Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:42.486968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:51.582326Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:54.624396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:56.063515Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 172 eligible frames\n2026-04-13T17:05:58.849231Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:05:58.849225+00:00 (14d retention)\n2026-04-13T17:06:01.555232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.4MB (13.6x), 98 JPEGs deleted\n2026-04-13T17:06:05.597067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 72 frames, 14.3MB → 1.1MB (12.9x), 72 JPEGs deleted\n2026-04-13T17:06:09.702568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:06:58.426892Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:07:01.047902Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:07:12.921022Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:08:32.658411Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=visual_change)\n2026-04-13T17:08:33.461053Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:34.888152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:44.751908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6880399320930358557, trigger=visual_change)\n2026-04-13T17:08:47.811335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5551774685991471183, trigger=visual_change)\n2026-04-13T17:08:59.877508Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3750487923867570316, trigger=visual_change)\n2026-04-13T17:09:05.917138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5193827678277969729, trigger=visual_change)\n2026-04-13T17:09:08.963248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1573230130233012243, trigger=visual_change)\n2026-04-13T17:09:27.538887Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=visual_change)\n2026-04-13T17:10:15.148423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2198924557410214150, trigger=click)\n2026-04-13T17:10:19.711447Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8529595713999975857, trigger=visual_change)\n2026-04-13T17:10:23.842094Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:10:58.846075Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:10:58.846061+00:00 (14d retention)\n2026-04-13T17:11:05.614778Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 133 eligible frames\n2026-04-13T17:11:11.080267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.6MB (12.4x), 98 JPEGs deleted\n2026-04-13T17:11:13.049885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 6.6MB → 0.8MB (8.5x), 33 JPEGs deleted\n2026-04-13T17:14:28.187399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=click)\n2026-04-13T17:15:58.842867Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:15:58.842852+00:00 (14d retention)\n2026-04-13T17:16:00.560201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3089258739618396828, trigger=click)\n2026-04-13T17:16:05.720267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-756028078299947006, trigger=click)\n2026-04-13T17:16:13.081624Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-13T17:16:17.891451Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 82 frames, 16.3MB → 1.7MB (9.4x), 82 JPEGs deleted\n2026-04-13T17:17:45.943910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7911837907515514222, trigger=click)\n2026-04-13T17:18:44.492158Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5928663278776159308, trigger=visual_change)\n2026-04-13T17:19:18.239507Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8963743573879133782, trigger=visual_change)\n2026-04-13T17:20:52.622485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=visual_change)\n2026-04-13T17:20:52.865628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:53.794741Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:55.173220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:56.419536Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:58.841572Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:20:58.841554+00:00 (14d retention)\n2026-04-13T17:21:17.914363Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T17:21:23.033357Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 19.3MB → 6.9MB (2.8x), 87 JPEGs deleted\n2026-04-13T17:22:17.281652Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8506419545576175835, trigger=visual_change)\n2026-04-13T17:22:24.174259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8506170850142559396, trigger=click)\n2026-04-13T17:24:29.375130Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1367698138829933492, trigger=click)\n2026-04-13T17:25:30.618046Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5264066362649694131, trigger=clipboard)\n2026-04-13T17:25:58.861117Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:25:58.861102+00:00 (14d retention)\n2026-04-13T17:26:07.783284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3389874276161121002, trigger=clipboard)\n2026-04-13T17:26:23.079232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 43 eligible frames\n2026-04-13T17:26:25.533960Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 8.5MB → 1.4MB (5.9x), 42 JPEGs deleted\n2026-04-13T17:26:26.405342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4749965863260205632, trigger=click)\n2026-04-13T17:27:03.146806Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T17:30:23.856612Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:30:58.861025Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:30:58.861012+00:00 (14d retention)\n2026-04-13T17:31:25.542075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:31:29.155449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 13.1MB → 1.9MB (6.9x), 65 JPEGs deleted\n2026-04-13T17:31:53.487787Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8861777922848222919, trigger=click)\n2026-04-13T17:35:26.901256Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:29.203266Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:31.520280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=clipboard)\n2026-04-13T17:35:33.300160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T17:35:45.306897Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6087902347824858697, trigger=clipboard)\n2026-04-13T17:35:58.859672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:35:58.859656+00:00 (14d retention)\n2026-04-13T17:36:29.179810Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T17:36:32.011609Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 10.8MB → 1.7MB (6.2x), 49 JPEGs deleted\n2026-04-13T17:40:58.858490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:40:58.858471+00:00 (14d retention)\n2026-04-13T17:41:32.043222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T17:41:36.069242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 16.1MB → 1.1MB (14.5x), 71 JPEGs deleted\n2026-04-13T17:42:15.596334Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4235966675435269325, trigger=click)\n2026-04-13T17:45:58.869276Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:45:58.869266+00:00 (14d retention)\n2026-04-13T17:46:36.092867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:46:39.758714Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 15.1MB → 1.0MB (15.3x), 65 JPEGs deleted\n2026-04-13T17:49:46.579982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8606465934501073324, trigger=click)\n2026-04-13T17:50:58.869493Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:50:58.869486+00:00 (14d retention)\n2026-04-13T17:51:39.783256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 16 eligible frames\n2026-04-13T17:51:40.758071Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 3.5MB → 0.4MB (9.1x), 15 JPEGs deleted\n2026-04-13T17:52:09.695481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:52:18.104878Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:20.446688Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:22.950263Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:55:58.869201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:55:58.869180+00:00 (14d retention)\n2026-04-13T17:56:40.787956Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-13T17:56:42.144760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 5.1MB → 0.4MB (13.2x), 22 JPEGs deleted\n2026-04-13T17:57:54.358454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:57:58.419369Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:12.778123Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:16.712796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:20.448642Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:36.397921Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T17:58:39.343061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T18:00:55.845071Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-439578195712127451, trigger=click)\n2026-04-13T18:00:58.868418Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:00:58.868403+00:00 (14d retention)\n2026-04-13T18:01:42.187214Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-13T18:01:44.040254Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.2MB → 0.5MB (14.4x), 31 JPEGs deleted\n2026-04-13T18:03:22.816287Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-481145244361585685, trigger=click)\n2026-04-13T18:05:58.873688Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:05:58.873678+00:00 (14d retention)\n2026-04-13T18:06:44.077710Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-13T18:06:46.456870Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 9.6MB → 0.4MB (24.2x), 41 JPEGs deleted\n2026-04-13T18:10:58.873801Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:10:58.873743+00:00 (14d retention)\n2026-04-13T18:11:46.492855Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 38 eligible frames\n2026-04-13T18:11:48.658067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 8.6MB → 0.8MB (11.3x), 37 JPEGs deleted\n2026-04-13T18:15:58.875133Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:15:58.875119+00:00 (14d retention)\n2026-04-13T18:16:48.694011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 27 eligible frames\n2026-04-13T18:16:50.273243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 6.1MB → 0.4MB (15.6x), 26 JPEGs deleted\n2026-04-13T18:18:31.734321Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T18:23:08.990753Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:23:08.990735+00:00 (14d retention)\n2026-04-13T18:24:18.871885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:24:20.038791Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.2MB → 0.4MB (10.8x), 18 JPEGs deleted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T18:35:13.146239Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T18:35:13.149068Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T18:35:13.170962Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T18:35:13.680481Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T18:35:27.620608Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-13T18:36:17.152264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1184372696878099077, trigger=click)\n2026-04-13T18:36:28.363701Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:36:28.363689+00:00 (14d retention)\n2026-04-13T18:37:21.142467Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 10 eligible frames\n2026-04-13T18:37:21.905994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 2.1MB → 0.4MB (5.5x), 9 JPEGs deleted\n2026-04-13T18:37:36.639362Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6976444594554398738, trigger=click)\n2026-04-13T18:39:53.327516Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:41:28.358989Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:41:28.358952+00:00 (14d retention)\n2026-04-13T18:42:21.940046Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-13T18:46:28.358214Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:46:28.358197+00:00 (14d retention)\n2026-04-13T18:47:21.955151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 6 eligible frames\n2026-04-13T18:47:22.689470Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.2MB → 0.5MB (2.3x), 6 JPEGs deleted\n2026-04-13T18:48:30.117101Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8612826691778232576, trigger=click)\n2026-04-13T18:51:28.358332Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:51:28.358272+00:00 (14d retention)\n2026-04-13T18:52:22.720460Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T18:52:24.625362Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 7.5MB → 0.5MB (14.3x), 32 JPEGs deleted\n2026-04-13T18:53:26.194571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2525325065609490636, trigger=click)\n2026-04-13T18:54:48.394617Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:56:28.358108Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:56:28.358077+00:00 (14d retention)\n2026-04-13T18:57:24.630003Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:57:26.008482Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.3MB → 1.1MB (3.8x), 18 JPEGs deleted\n2026-04-13T19:01:28.309932Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:01:28.309902+00:00 (14d retention)\n2026-04-13T19:01:34.835096Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8845567138521432327, trigger=click)\n2026-04-13T19:02:26.033245Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 59 eligible frames\n2026-04-13T19:02:29.410795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 58 frames, 15.1MB → 2.4MB (6.3x), 58 JPEGs deleted\n2026-04-13T19:06:28.306223Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:06:28.306189+00:00 (14d retention)\n2026-04-13T19:07:29.443796Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T19:07:32.264873Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 9.3MB → 1.9MB (4.9x), 49 JPEGs deleted\n2026-04-13T19:09:21.780997Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2535583028595392832, trigger=click)\n2026-04-13T19:11:28.301542Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:11:28.301502+00:00 (14d retention)\n2026-04-13T19:12:32.301751Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 55 eligible frames\n2026-04-13T19:12:35.543171Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 54 frames, 8.4MB → 0.2MB (34.0x), 54 JPEGs deleted\n2026-04-13T19:15:28.279261Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3643209958340923733, trigger=click)\n2026-04-13T19:16:28.300071Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:16:28.300040+00:00 (14d retention)\n2026-04-13T19:17:35.879347Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T19:17:37.771162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 5.0MB → 0.2MB (21.2x), 32 JPEGs deleted\n2026-04-13T19:21:28.313672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:21:28.313650+00:00 (14d retention)\n2026-04-13T19:21:43.867272Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:21:53.316112Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:22:37.824162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 30 eligible frames\n2026-04-13T19:22:39.564867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.5MB → 0.2MB (19.7x), 29 JPEGs deleted\n2026-04-13T19:23:58.293564Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:05.926037Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:07.100441Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:08.189505Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:09.316024Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:10.334454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:11.039989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.279934Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.934012Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:13.905703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:14.688081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:16.790073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:17.648048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:18.648340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:20.939136Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:32.085226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1677564857471996960, trigger=click)\n2026-04-13T19:24:52.669280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5315255766850756707, trigger=click)\n2026-04-13T19:26:28.311385Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:26:28.311371+00:00 (14d retention)\n2026-04-13T19:27:39.600820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T19:27:43.607748Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 10.7MB → 2.0MB (5.3x), 71 JPEGs deleted\n2026-04-13T19:29:29.337437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6191878184103635993, trigger=click)\n2026-04-13T19:30:53.305205Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T19:31:28.308892Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:31:28.308882+00:00 (14d retention)\n2026-04-13T19:32:39.123443Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:32:43.640042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-04-13T19:32:47.533673Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 69 frames, 10.8MB → 0.5MB (22.6x), 69 JPEGs deleted\n2026-04-13T19:32:50.924091Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:36:28.306590Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:36:28.306551+00:00 (14d retention)\n2026-04-13T19:37:47.886163Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T19:37:51.291730Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:37:52.768785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.5MB → 0.5MB (28.8x), 87 JPEGs deleted\n2026-04-13T19:37:57.364851Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:38:38.577300Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4736856628251450227, trigger=click)\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-strt\nzsh: command not found: sp-strt\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start \n[1] 21900\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-13T19:39:27.177326Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-13T19:39:29.590345Z WARN sqlx::query: summary=\"-- Partial index on …\" db.statement=\"\\n\\n-- Partial index on frames.elements_ref_frame_id to eliminate the full\\n-- table scan in the retention anchor-frame subquery.\\n--\\n-- The correlated subquery in delete_time_range_batch:\\n-- SELECT DISTINCT f.id FROM frames f\\n-- WHERE f.timestamp BETWEEN ?1 AND ?2\\n-- AND EXISTS (SELECT 1 FROM frames ref\\n-- WHERE ref.elements_ref_frame_id = f.id\\n-- AND ref.timestamp NOT BETWEEN ?1 AND ?2)\\n--\\n-- falls back to a full scan of `frames` on the inner EXISTS without this\\n-- index (elements_ref_frame_id was added in 20260318000000 without one).\\n-- Measured 5m55s per 1-hour retention batch on a 33k-frame DB, making\\n-- retention unusable on any non-trivial backlog.\\n--\\n-- With the index, the inner plan becomes:\\n-- SEARCH ref USING INDEX idx_frames_elements_ref_frame_id (elements_ref_frame_id=?)\\n-- and the same query runs in ~5ms.\\n--\\n-- Partial (WHERE elements_ref_frame_id IS NOT NULL) because only frames\\n-- that reference a dedup anchor are relevant here. Storage cost is\\n-- negligible -- single-digit MB/year for typical capture volume, and it\\n-- is the smallest index on the frames table by a wide margin.\\nCREATE INDEX IF NOT EXISTS idx_frames_elements_ref_frame_id ON frames(elements_ref_frame_id)\\nWHERE\\n elements_ref_frame_id IS NOT NULL;\\n\" rows_affected=0 rows_returned=0 elapsed=1.230052917s\n2026-04-13T19:39:29.593268Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-13T19:39:29.594665Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-13T19:39:29.594680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-13T19:39:29.595089Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-13T19:39:29.595024Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-13T19:39:29.595128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-13T19:39:29.595223Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-13T19:39:29.595562Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-13T19:39:29.595770Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-13T19:39:29.596448Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-13T19:39:29.596584Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-13T19:39:29.596715Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-13T19:39:29.596827Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-13T19:39:29.596844Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-13T19:39:29.598802Z INFO screenpipe: starting UI event capture\n2026-04-13T19:39:29.598404Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-13T19:39:29.603432Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-13T19:39:29.609967Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-13T19:39:29.615106Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-13T19:39:29.630434Z INFO screenpipe_engine::ui_recorder: UI recording session started: faca997c-ce9a-477c-b5d0-e56e509585e9\n2026-04-13T19:39:29.630483Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-13T19:39:29.630562Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-12 16:39:29.630549 UTC to 2026-04-13 16:39:29.630549 UTC)\n2026-04-13T19:39:29.631025Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-13T19:39:29.637981Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-13T19:39:29.643829Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-13T19:39:29.788633Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3943 frame entries, coverage from 2026-04-12 16:39:29.630549 UTC\n2026-04-13T19:39:30.543977Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-13T19:39:30.544012Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-13T19:39:30.544060Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-13T19:39:31.016978Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-13T19:39:31.017036Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-13T19:39:31.017080Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-13T19:39:31.017114Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-13T19:39:32.207273Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-13T19:39:32.673392Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=7912, dur=47ms\n2026-04-13T19:39:32.704069Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-13T19:39:32.872035Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=7913, dur=108ms\n2026-04-13T19:39:34.636509Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-13T19:39:34.637200Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-13T19:39:44.339956Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=5000 elapsed=1.608390416s\n2026-04-13T19:40:29.616115Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames\n2026-04-13T19:40:31.310725Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 0.2MB (11.1x), 16 JPEGs deleted\n2026-04-13T19:41:39.668138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:41:40.367247Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:42:16.296737Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-96467039929937080, trigger=click)\n2026-04-13T19:42:34.936430Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5664644461248729071, trigger=visual_change)\n2026-04-13T19:44:29.627763Z INFO screenpipe_engine::server: api_usage_5min: 5 requests\n2026-04-13T19:45:04.634490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:45:04.634462+00:00 (14d retention)\n2026-04-13T19:45:31.349267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 20 eligible frames\n2026-04-13T19:45:32.543028Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 19 frames, 3.0MB → 0.3MB (9.9x), 19 JPEGs deleted\n2026-04-13T19:50:02.916584Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:02.918035Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:04.630322Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:50:04.630300+00:00 (14d retention)\n2026-04-13T19:50:32.575742Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-13T19:50:35.515577Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 46 frames, 6.6MB → 2.0MB (3.3x), 46 JPEGs deleted\n2026-04-13T19:50:36.330072Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.6MB (1.9x), 6 JPEGs deleted\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 24316\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-14T09:23:18.095876Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-14T09:23:19.016665Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-14T09:23:19.018052Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-14T09:23:19.018065Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-14T09:23:19.018310Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-14T09:23:19.018350Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-14T09:23:19.018329Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-14T09:23:19.018781Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-14T09:23:19.018887Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-14T09:23:19.018976Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-14T09:23:19.019743Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-14T09:23:19.021386Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-14T09:23:19.021709Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-14T09:23:19.021835Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-14T09:23:19.021852Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-14T09:23:19.025225Z INFO screenpipe: starting UI event capture\n2026-04-14T09:23:19.024042Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-14T09:23:19.034460Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-14T09:23:19.035048Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-14T09:23:19.041739Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-14T09:23:19.057947Z INFO screenpipe_engine::ui_recorder: UI recording session started: c7672ba6-54dd-483e-9512-949b51a2bd49\n2026-04-14T09:23:19.058064Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-14T09:23:19.058114Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-13 06:23:19.058103 UTC to 2026-04-14 06:23:19.058103 UTC)\n2026-04-14T09:23:19.062532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-14T09:23:19.066551Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-14T09:23:19.080775Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-14T09:23:19.697314Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3756 frame entries, coverage from 2026-04-13 06:23:19.058103 UTC\n2026-04-14T09:23:19.985445Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-14T09:23:19.985474Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-14T09:23:19.985515Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-14T09:23:20.492622Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-14T09:23:20.492664Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-14T09:23:20.492694Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-14T09:23:20.492726Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-14T09:23:21.313246Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-14T09:23:22.387611Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-14T09:23:22.954948Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=8037, dur=1082ms\n2026-04-14T09:23:23.488645Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=8038, dur=1012ms\n2026-04-14T09:23:24.063719Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-14T09:23:24.063951Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-14T09:24:19.745739Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 108 eligible frames\n2026-04-14T09:24:23.350916Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 6.7MB → 2.6MB (2.6x), 51 JPEGs deleted\n2026-04-14T09:24:26.531119Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 10.6MB → 3.9MB (2.7x), 55 JPEGs deleted\n2026-04-14T09:28:19.055456Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:28:54.061635Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:28:54.061630+00:00 (14d retention)\n2026-04-14T09:29:26.561625Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n2026-04-14T09:33:54.056707Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:33:54.056680+00:00 (14d retention)\n2026-04-14T09:34:26.581293Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 11 eligible frames\n2026-04-14T09:34:27.123519Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 4 frames, 0.9MB → 0.6MB (1.6x), 4 JPEGs deleted\n2026-04-14T09:34:28.092531Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 1.4MB → 0.8MB (1.8x), 7 JPEGs deleted\n2026-04-14T09:38:54.029363Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)\n2026-04-14T09:39:28.082314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible frames\n2026-04-14T09:39:29.343941Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.0MB → 0.7MB (6.0x), 18 JPEGs deleted\n2026-04-14T09:39:30.750250Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted\n2026-04-14T09:41:13.184908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6982821907865222085, trigger=click)\n2026-04-14T09:41:19.221590Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6812429097673958383, trigger=visual_change)\n2026-04-14T09:42:17.435758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6365427964931292073, trigger=click)\n2026-04-14T09:42:33.656193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4160452185621303946, trigger=click)\n2026-04-14T09:42:46.140088Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2304266842869419917, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-14T09:43:54.022784Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:43:54.022742+00:00 (14d retention)\n2026-04-14T09:44:07.036758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:16.412880Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:31.467140Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-04-14T09:44:32.220816Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.7MB → 0.2MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:33.112790Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.5MB → 0.4MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:49.822061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=visual_change)\n2026-04-14T09:44:58.085483Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=click)\n2026-04-14T09:45:11.008075Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=visual_change)\n2026-04-14T09:45:27.976077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:28.005455Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:33.771220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6619028446781713005, trigger=click)\n2026-04-14T09:46:17.937329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:20.967541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:39.124248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=visual_change)\n2026-04-14T09:46:48.114315Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:46:48.134347Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:48:19.010549Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:48:28.225785Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:28.241367Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:35.474701Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2313032521647048085, trigger=click)\n2026-04-14T09:48:44.297355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=529628650036307666, trigger=click)\n2026-04-14T09:48:54.016503Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:48:54.016484+00:00 (14d retention)\n2026-04-14T09:49:33.136435Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 87 eligible frames\n2026-04-14T09:49:35.411222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 8.9MB → 1.6MB (5.4x), 33 JPEGs deleted\n2026-04-14T09:49:39.291290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 10.8MB → 4.1MB (2.6x), 52 JPEGs deleted\n2026-04-14T09:52:10.262616Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4590837745933313988, trigger=click)\n2026-04-14T09:52:25.201982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:28.245911Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:37.345773Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:40.396144Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:54.098628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:52:54.108786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:53:13.724192Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:16.763953Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:19.793338Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:25.860403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:28.887448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:31.919424Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:44.021891Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6850664184897375859, trigger=visual_change)\n2026-04-14T09:53:53.090419Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:54.010522Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:53:54.010512+00:00 (14d retention)\n2026-04-14T09:53:56.129621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:59.154578Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:54:05.213884Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:08.251183Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:14.329171Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:39.747828Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 186 eligible frames\n2026-04-14T09:54:41.500859Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2366998612440519548, trigger=visual_change)\n2026-04-14T09:54:44.836247Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 86 frames, 14.4MB → 3.3MB (4.3x), 86 JPEGs deleted\n2026-04-14T09:54:51.018273Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.3MB → 5.7MB (2.5x), 98 JPEGs deleted\n2026-04-14T09:58:35.439655Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7018639353123991036, trigger=click)\n2026-04-14T09:58:53.989016Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:58:53.989006+00:00 (14d retention)\n2026-04-14T09:59:51.618785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 150 eligible frames\n2026-04-14T09:59:57.069345Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 80 frames, 12.2MB → 4.4MB (2.8x), 80 JPEGs deleted\n2026-04-14T10:00:04.665192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.2MB → 5.4MB (2.3x), 68 JPEGs deleted","depth":4,"value":"clipboard)\n2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames\n2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted\n2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)\n2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)\n2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)\n2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)\n2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)\n2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)\n2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)\n2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)\n2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)\n2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests\n2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)\n2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames\n2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted\n2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)\n2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames\n2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted\n2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)\n2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames\n2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted\n2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)\n2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted\n2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)\n2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)\n2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:19:54.331647Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:19:54.331585+00:00 (14d retention)\n2026-04-12T14:25:49.460879Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:47:08.896043Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:51:40.566736Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:51:40.566667+00:00 (14d retention)\n2026-04-12T15:04:41.463531Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T15:09:53.670591Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T15:09:53.687234Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T15:09:53.694692Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T15:09:54.069049Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T15:09:54.972151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=click)\n2026-04-12T15:10:00.918510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4593439385064446773, trigger=visual_change)\n2026-04-12T15:10:03.918707Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T15:11:30.984863Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:11:30.984842+00:00 (14d retention)\n2026-04-12T15:16:30.982686Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:16:30.982661+00:00 (14d retention)\n2026-04-12T15:21:30.980571Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:21:30.980551+00:00 (14d retention)\n2026-04-12T15:22:42.975270Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-12T15:22:45.011395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 3.1MB → 1.1MB (2.8x), 33 JPEGs deleted\n2026-04-12T15:26:30.978141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:26:30.978120+00:00 (14d retention)\n2026-04-12T15:27:45.265922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-12T15:27:49.938865Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 83 frames, 6.3MB → 0.1MB (58.2x), 83 JPEGs deleted\n2026-04-12T15:31:30.953991Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:31:30.953971+00:00 (14d retention)\n2026-04-12T15:32:50.166006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:32:55.707883Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 7.5MB → 0.1MB (70.1x), 99 JPEGs deleted\n2026-04-12T15:32:56.071976Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (3.0x), 3 JPEGs deleted\n2026-04-12T15:36:30.948421Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:36:30.948401+00:00 (14d retention)\n2026-04-12T15:37:56.337459Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:38:01.842312Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.0x), 98 JPEGs deleted\n2026-04-12T15:38:02.207918Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (2.8x), 3 JPEGs deleted\n2026-04-12T15:41:30.945296Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:41:30.945274+00:00 (14d retention)\n2026-04-12T15:43:02.496758Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:43:08.031970Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (68.3x), 98 JPEGs deleted\n2026-04-12T15:43:09.583075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.5x), 26 JPEGs deleted\n2026-04-12T15:46:30.941625Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:46:30.941607+00:00 (14d retention)\n2026-04-12T15:48:09.854085Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 127 eligible frames\n2026-04-12T15:48:15.376242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.2x), 98 JPEGs deleted\n2026-04-12T15:48:16.986205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.0MB → 0.1MB (22.4x), 27 JPEGs deleted\n2026-04-12T15:51:30.931020Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:51:30.931+00:00 (14d retention)\n2026-04-12T15:53:17.140652Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:53:22.544303Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.5x), 98 JPEGs deleted\n2026-04-12T15:53:24.051282Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.4x), 26 JPEGs deleted\n2026-04-12T15:56:30.903513Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:56:30.903491+00:00 (14d retention)\n2026-04-12T15:58:24.061857Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 107 eligible frames\n2026-04-12T15:58:29.565651Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.8x), 98 JPEGs deleted\n2026-04-12T15:58:30.163222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 0.5MB → 0.1MB (6.1x), 7 JPEGs deleted\n2026-04-12T16:01:30.898705Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:01:30.898688+00:00 (14d retention)\n2026-04-12T16:03:30.176572Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-12T16:03:35.702407Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (66.5x), 98 JPEGs deleted\n2026-04-12T16:03:37.208567Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 1.9MB → 0.1MB (19.5x), 25 JPEGs deleted\n2026-04-12T16:06:30.893145Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:06:30.893123+00:00 (14d retention)\n2026-04-12T16:08:37.224128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 137 eligible frames\n2026-04-12T16:08:42.754922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (55.1x), 98 JPEGs deleted\n2026-04-12T16:08:44.902888Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 2.9MB → 0.1MB (27.8x), 37 JPEGs deleted\n2026-04-12T16:11:30.884492Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:11:30.884475+00:00 (14d retention)\n2026-04-12T16:13:44.914274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 102 eligible frames\n2026-04-12T16:13:50.332990Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (60.2x), 98 JPEGs deleted\n2026-04-12T16:13:50.582963Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.2MB → 0.1MB (1.9x), 2 JPEGs deleted\n2026-04-12T16:16:30.874710Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:16:30.874654+00:00 (14d retention)\n2026-04-12T16:18:50.598274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 92 eligible frames\n2026-04-12T16:18:55.602978Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 7.0MB → 0.1MB (56.9x), 90 JPEGs deleted\n2026-04-12T16:21:30.868887Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:21:30.868843+00:00 (14d retention)\n2026-04-12T16:23:55.619078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 39 eligible frames\n2026-04-12T16:23:57.827626Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 2.9MB → 0.1MB (28.1x), 38 JPEGs deleted\n2026-04-12T16:25:51.808414Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T16:25:55.859250Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-12T16:26:22.022550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=335681983743287612, trigger=visual_change)\n2026-04-12T16:26:30.862865Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:26:30.862859+00:00 (14d retention)\n2026-04-12T16:26:49.195853Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=visual_change)\n2026-04-12T16:26:50.724575Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=clipboard)\n2026-04-12T16:26:58.277345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:26:59.647372Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=clipboard)\n2026-04-12T16:27:58.948426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:28:57.842202Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-12T16:28:59.471378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.1MB → 0.1MB (19.7x), 27 JPEGs deleted\n2026-04-12T16:30:07.202386Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3216013508830929208, trigger=click)\n2026-04-12T16:30:55.852584Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T16:31:30.887381Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:31:30.887363+00:00 (14d retention)\n2026-04-12T16:31:49.004783Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:31:49.729537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=click)\n2026-04-12T16:31:55.091180Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:32:38.955241Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:41.068172Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=clipboard)\n2026-04-12T16:32:42.939568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:44.448998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=visual_change)\n2026-04-12T16:32:46.133335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=click)\n2026-04-12T16:32:47.467019Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:32:47.909378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=clipboard)\n2026-04-12T16:33:06.479217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:33:09.545186Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5503780454464997020, trigger=visual_change)\n2026-04-12T16:33:15.550145Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7389604070772900291, trigger=visual_change)\n2026-04-12T16:33:59.523675Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 12 eligible frames\n2026-04-12T16:34:00.275262Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 0.9MB → 0.1MB (9.2x), 11 JPEGs deleted\n2026-04-12T16:36:30.893415Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:36:30.893405+00:00 (14d retention)\n2026-04-12T16:37:02.339834Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T16:42:28.176895Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 54 eligible frames\n2026-04-12T16:42:31.234893Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 53 frames, 4.9MB → 1.5MB (3.4x), 53 JPEGs deleted\n2026-04-12T16:46:30.256919Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:46:30.256841+00:00 (14d retention)\n2026-04-12T16:58:23.782435Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T16:59:58.366015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 25 eligible frames\n2026-04-12T16:59:59.856243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 2.8MB → 0.5MB (5.8x), 24 JPEGs deleted\n2026-04-12T18:37:05.993577Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T18:39:53.607673Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T18:46:44.262699Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T15:46:44.262630+00:00 (14d retention)\n2026-04-12T18:55:18.717641Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T19:09:18.536900Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T20:13:29.785331Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T17:13:29.785272+00:00 (14d retention)\n2026-04-12T20:13:47.397970Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording\n2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)\n2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording\n2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1\n2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6\n2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording\n2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording\n2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6\n2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1\n2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)\n2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)\n2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)\n2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)\n2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)\n2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)\n2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)\n2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)\n2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)\n2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)\n2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)\n2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)\n2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)\n2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)\n2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)\n2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)\n2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)\n2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)\n2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)\n2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)\n2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)\n2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)\n2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)\n2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)\n2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)\n2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)\n2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)\n2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)\n2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)\n2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)\n2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)\n2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)\n2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)\n2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)\n2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)\n2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)\n2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)\n2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)\n2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)\n2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)\n2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)\n2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)\n2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)\n2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)\n2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)\n2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)\n2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)\n2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames\n2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted\n2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted\n2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)\n2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)\n2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames\n2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted\n2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)\n2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted\n2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)\n2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames\n2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted\n2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)\n2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)\n2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted\n2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted\n2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)\n2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames\n2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted\n2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted\n2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)\n2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames\n2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted\n2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted\n2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)\n2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted\n2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)\n2026-04-13T15:57:06.748688Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=1000 elapsed=1.158041625s\n2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames\n2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted\n2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)\n2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames\n2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted\n2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)\n2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames\n2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted\n2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)\n2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames\n2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted\n2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted\n2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)\n2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted\n2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted\n2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)\n2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted\n2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted\n2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)\n2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:30:07.345631Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.0x), 98 JPEGs deleted\n2026-04-13T16:30:09.401035Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 4.2MB → 0.2MB (17.5x), 35 JPEGs deleted\n2026-04-13T16:30:58.877763Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:30:58.877747+00:00 (14d retention)\n2026-04-13T16:35:09.543901Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 123 eligible frames\n2026-04-13T16:35:15.118342Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (29.4x), 98 JPEGs deleted\n2026-04-13T16:35:16.544264Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 2.8MB → 0.2MB (13.7x), 23 JPEGs deleted\n2026-04-13T16:35:58.877807Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:35:58.877797+00:00 (14d retention)\n2026-04-13T16:38:16.074486Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9190773859099204307, trigger=click)\n2026-04-13T16:39:15.630281Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=visual_change)\n2026-04-13T16:39:18.164527Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T16:39:39.417651Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:39:46.483591Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T16:40:16.572113Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 142 eligible frames\n2026-04-13T16:40:21.964524Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.3x), 98 JPEGs deleted\n2026-04-13T16:40:23.872191Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T16:40:24.338496Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 5.1MB → 0.3MB (19.6x), 42 JPEGs deleted\n2026-04-13T16:40:58.876854Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:40:58.876845+00:00 (14d retention)\n2026-04-13T16:41:10.838114Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=visual_change)\n2026-04-13T16:42:13.892340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5199349294477942535, trigger=click)\n2026-04-13T16:42:44.819070Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:45:24.413681Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 163 eligible frames\n2026-04-13T16:45:29.941955Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.1x), 98 JPEGs deleted\n2026-04-13T16:45:33.507323Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 7.6MB → 0.3MB (24.3x), 63 JPEGs deleted\n2026-04-13T16:45:58.885928Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:45:58.885879+00:00 (14d retention)\n2026-04-13T16:50:33.536731Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 117 eligible frames\n2026-04-13T16:50:39.528450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 12.0MB → 2.2MB (5.4x), 98 JPEGs deleted\n2026-04-13T16:50:41.016936Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.5MB → 1.6MB (2.2x), 17 JPEGs deleted\n2026-04-13T16:50:58.885615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:50:58.885607+00:00 (14d retention)\n2026-04-13T16:55:41.041166Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:55:46.654516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 17.3MB → 4.5MB (3.8x), 98 JPEGs deleted\n2026-04-13T16:55:48.802425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 7.0MB → 0.9MB (7.8x), 35 JPEGs deleted\n2026-04-13T16:55:58.885247Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:55:58.885238+00:00 (14d retention)\n2026-04-13T17:00:48.921394Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-13T17:00:54.499682Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 2.0MB (9.8x), 98 JPEGs deleted\n2026-04-13T17:00:56.069295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 5.0MB → 0.7MB (7.2x), 25 JPEGs deleted\n2026-04-13T17:00:58.884750Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:00:58.884741+00:00 (14d retention)\n2026-04-13T17:04:17.476028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:20.514684Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:23.559568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:29.620877Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:44.761227Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:21.254931Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:24.295008Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:27.336461Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:30.386176Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:42.486968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:51.582326Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:54.624396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:56.063515Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 172 eligible frames\n2026-04-13T17:05:58.849231Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:05:58.849225+00:00 (14d retention)\n2026-04-13T17:06:01.555232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.4MB (13.6x), 98 JPEGs deleted\n2026-04-13T17:06:05.597067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 72 frames, 14.3MB → 1.1MB (12.9x), 72 JPEGs deleted\n2026-04-13T17:06:09.702568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:06:58.426892Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:07:01.047902Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:07:12.921022Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:08:32.658411Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=visual_change)\n2026-04-13T17:08:33.461053Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:34.888152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:44.751908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6880399320930358557, trigger=visual_change)\n2026-04-13T17:08:47.811335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5551774685991471183, trigger=visual_change)\n2026-04-13T17:08:59.877508Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3750487923867570316, trigger=visual_change)\n2026-04-13T17:09:05.917138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5193827678277969729, trigger=visual_change)\n2026-04-13T17:09:08.963248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1573230130233012243, trigger=visual_change)\n2026-04-13T17:09:27.538887Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=visual_change)\n2026-04-13T17:10:15.148423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2198924557410214150, trigger=click)\n2026-04-13T17:10:19.711447Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8529595713999975857, trigger=visual_change)\n2026-04-13T17:10:23.842094Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:10:58.846075Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:10:58.846061+00:00 (14d retention)\n2026-04-13T17:11:05.614778Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 133 eligible frames\n2026-04-13T17:11:11.080267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.6MB (12.4x), 98 JPEGs deleted\n2026-04-13T17:11:13.049885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 6.6MB → 0.8MB (8.5x), 33 JPEGs deleted\n2026-04-13T17:14:28.187399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=click)\n2026-04-13T17:15:58.842867Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:15:58.842852+00:00 (14d retention)\n2026-04-13T17:16:00.560201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3089258739618396828, trigger=click)\n2026-04-13T17:16:05.720267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-756028078299947006, trigger=click)\n2026-04-13T17:16:13.081624Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-13T17:16:17.891451Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 82 frames, 16.3MB → 1.7MB (9.4x), 82 JPEGs deleted\n2026-04-13T17:17:45.943910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7911837907515514222, trigger=click)\n2026-04-13T17:18:44.492158Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5928663278776159308, trigger=visual_change)\n2026-04-13T17:19:18.239507Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8963743573879133782, trigger=visual_change)\n2026-04-13T17:20:52.622485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=visual_change)\n2026-04-13T17:20:52.865628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:53.794741Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:55.173220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:56.419536Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:58.841572Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:20:58.841554+00:00 (14d retention)\n2026-04-13T17:21:17.914363Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T17:21:23.033357Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 19.3MB → 6.9MB (2.8x), 87 JPEGs deleted\n2026-04-13T17:22:17.281652Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8506419545576175835, trigger=visual_change)\n2026-04-13T17:22:24.174259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8506170850142559396, trigger=click)\n2026-04-13T17:24:29.375130Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1367698138829933492, trigger=click)\n2026-04-13T17:25:30.618046Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5264066362649694131, trigger=clipboard)\n2026-04-13T17:25:58.861117Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:25:58.861102+00:00 (14d retention)\n2026-04-13T17:26:07.783284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3389874276161121002, trigger=clipboard)\n2026-04-13T17:26:23.079232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 43 eligible frames\n2026-04-13T17:26:25.533960Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 8.5MB → 1.4MB (5.9x), 42 JPEGs deleted\n2026-04-13T17:26:26.405342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4749965863260205632, trigger=click)\n2026-04-13T17:27:03.146806Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T17:30:23.856612Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:30:58.861025Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:30:58.861012+00:00 (14d retention)\n2026-04-13T17:31:25.542075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:31:29.155449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 13.1MB → 1.9MB (6.9x), 65 JPEGs deleted\n2026-04-13T17:31:53.487787Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8861777922848222919, trigger=click)\n2026-04-13T17:35:26.901256Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:29.203266Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:31.520280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=clipboard)\n2026-04-13T17:35:33.300160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T17:35:45.306897Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6087902347824858697, trigger=clipboard)\n2026-04-13T17:35:58.859672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:35:58.859656+00:00 (14d retention)\n2026-04-13T17:36:29.179810Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T17:36:32.011609Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 10.8MB → 1.7MB (6.2x), 49 JPEGs deleted\n2026-04-13T17:40:58.858490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:40:58.858471+00:00 (14d retention)\n2026-04-13T17:41:32.043222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T17:41:36.069242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 16.1MB → 1.1MB (14.5x), 71 JPEGs deleted\n2026-04-13T17:42:15.596334Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4235966675435269325, trigger=click)\n2026-04-13T17:45:58.869276Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:45:58.869266+00:00 (14d retention)\n2026-04-13T17:46:36.092867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:46:39.758714Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 15.1MB → 1.0MB (15.3x), 65 JPEGs deleted\n2026-04-13T17:49:46.579982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8606465934501073324, trigger=click)\n2026-04-13T17:50:58.869493Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:50:58.869486+00:00 (14d retention)\n2026-04-13T17:51:39.783256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 16 eligible frames\n2026-04-13T17:51:40.758071Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 3.5MB → 0.4MB (9.1x), 15 JPEGs deleted\n2026-04-13T17:52:09.695481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:52:18.104878Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:20.446688Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:22.950263Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:55:58.869201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:55:58.869180+00:00 (14d retention)\n2026-04-13T17:56:40.787956Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-13T17:56:42.144760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 5.1MB → 0.4MB (13.2x), 22 JPEGs deleted\n2026-04-13T17:57:54.358454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:57:58.419369Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:12.778123Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:16.712796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:20.448642Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:36.397921Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T17:58:39.343061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T18:00:55.845071Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-439578195712127451, trigger=click)\n2026-04-13T18:00:58.868418Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:00:58.868403+00:00 (14d retention)\n2026-04-13T18:01:42.187214Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-13T18:01:44.040254Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.2MB → 0.5MB (14.4x), 31 JPEGs deleted\n2026-04-13T18:03:22.816287Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-481145244361585685, trigger=click)\n2026-04-13T18:05:58.873688Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:05:58.873678+00:00 (14d retention)\n2026-04-13T18:06:44.077710Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-13T18:06:46.456870Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 9.6MB → 0.4MB (24.2x), 41 JPEGs deleted\n2026-04-13T18:10:58.873801Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:10:58.873743+00:00 (14d retention)\n2026-04-13T18:11:46.492855Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 38 eligible frames\n2026-04-13T18:11:48.658067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 8.6MB → 0.8MB (11.3x), 37 JPEGs deleted\n2026-04-13T18:15:58.875133Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:15:58.875119+00:00 (14d retention)\n2026-04-13T18:16:48.694011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 27 eligible frames\n2026-04-13T18:16:50.273243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 6.1MB → 0.4MB (15.6x), 26 JPEGs deleted\n2026-04-13T18:18:31.734321Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T18:23:08.990753Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:23:08.990735+00:00 (14d retention)\n2026-04-13T18:24:18.871885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:24:20.038791Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.2MB → 0.4MB (10.8x), 18 JPEGs deleted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T18:35:13.146239Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T18:35:13.149068Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T18:35:13.170962Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T18:35:13.680481Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T18:35:27.620608Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-13T18:36:17.152264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1184372696878099077, trigger=click)\n2026-04-13T18:36:28.363701Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:36:28.363689+00:00 (14d retention)\n2026-04-13T18:37:21.142467Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 10 eligible frames\n2026-04-13T18:37:21.905994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 2.1MB → 0.4MB (5.5x), 9 JPEGs deleted\n2026-04-13T18:37:36.639362Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6976444594554398738, trigger=click)\n2026-04-13T18:39:53.327516Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:41:28.358989Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:41:28.358952+00:00 (14d retention)\n2026-04-13T18:42:21.940046Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-13T18:46:28.358214Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:46:28.358197+00:00 (14d retention)\n2026-04-13T18:47:21.955151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 6 eligible frames\n2026-04-13T18:47:22.689470Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.2MB → 0.5MB (2.3x), 6 JPEGs deleted\n2026-04-13T18:48:30.117101Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8612826691778232576, trigger=click)\n2026-04-13T18:51:28.358332Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:51:28.358272+00:00 (14d retention)\n2026-04-13T18:52:22.720460Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T18:52:24.625362Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 7.5MB → 0.5MB (14.3x), 32 JPEGs deleted\n2026-04-13T18:53:26.194571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2525325065609490636, trigger=click)\n2026-04-13T18:54:48.394617Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:56:28.358108Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:56:28.358077+00:00 (14d retention)\n2026-04-13T18:57:24.630003Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:57:26.008482Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.3MB → 1.1MB (3.8x), 18 JPEGs deleted\n2026-04-13T19:01:28.309932Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:01:28.309902+00:00 (14d retention)\n2026-04-13T19:01:34.835096Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8845567138521432327, trigger=click)\n2026-04-13T19:02:26.033245Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 59 eligible frames\n2026-04-13T19:02:29.410795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 58 frames, 15.1MB → 2.4MB (6.3x), 58 JPEGs deleted\n2026-04-13T19:06:28.306223Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:06:28.306189+00:00 (14d retention)\n2026-04-13T19:07:29.443796Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T19:07:32.264873Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 9.3MB → 1.9MB (4.9x), 49 JPEGs deleted\n2026-04-13T19:09:21.780997Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2535583028595392832, trigger=click)\n2026-04-13T19:11:28.301542Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:11:28.301502+00:00 (14d retention)\n2026-04-13T19:12:32.301751Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 55 eligible frames\n2026-04-13T19:12:35.543171Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 54 frames, 8.4MB → 0.2MB (34.0x), 54 JPEGs deleted\n2026-04-13T19:15:28.279261Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3643209958340923733, trigger=click)\n2026-04-13T19:16:28.300071Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:16:28.300040+00:00 (14d retention)\n2026-04-13T19:17:35.879347Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T19:17:37.771162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 5.0MB → 0.2MB (21.2x), 32 JPEGs deleted\n2026-04-13T19:21:28.313672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:21:28.313650+00:00 (14d retention)\n2026-04-13T19:21:43.867272Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:21:53.316112Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:22:37.824162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 30 eligible frames\n2026-04-13T19:22:39.564867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.5MB → 0.2MB (19.7x), 29 JPEGs deleted\n2026-04-13T19:23:58.293564Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:05.926037Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:07.100441Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:08.189505Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:09.316024Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:10.334454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:11.039989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.279934Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.934012Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:13.905703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:14.688081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:16.790073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:17.648048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:18.648340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:20.939136Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:32.085226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1677564857471996960, trigger=click)\n2026-04-13T19:24:52.669280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5315255766850756707, trigger=click)\n2026-04-13T19:26:28.311385Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:26:28.311371+00:00 (14d retention)\n2026-04-13T19:27:39.600820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T19:27:43.607748Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 10.7MB → 2.0MB (5.3x), 71 JPEGs deleted\n2026-04-13T19:29:29.337437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6191878184103635993, trigger=click)\n2026-04-13T19:30:53.305205Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T19:31:28.308892Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:31:28.308882+00:00 (14d retention)\n2026-04-13T19:32:39.123443Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:32:43.640042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-04-13T19:32:47.533673Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 69 frames, 10.8MB → 0.5MB (22.6x), 69 JPEGs deleted\n2026-04-13T19:32:50.924091Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:36:28.306590Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:36:28.306551+00:00 (14d retention)\n2026-04-13T19:37:47.886163Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T19:37:51.291730Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:37:52.768785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.5MB → 0.5MB (28.8x), 87 JPEGs deleted\n2026-04-13T19:37:57.364851Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:38:38.577300Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4736856628251450227, trigger=click)\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-strt\nzsh: command not found: sp-strt\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start \n[1] 21900\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-13T19:39:27.177326Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-13T19:39:29.590345Z WARN sqlx::query: summary=\"-- Partial index on …\" db.statement=\"\\n\\n-- Partial index on frames.elements_ref_frame_id to eliminate the full\\n-- table scan in the retention anchor-frame subquery.\\n--\\n-- The correlated subquery in delete_time_range_batch:\\n-- SELECT DISTINCT f.id FROM frames f\\n-- WHERE f.timestamp BETWEEN ?1 AND ?2\\n-- AND EXISTS (SELECT 1 FROM frames ref\\n-- WHERE ref.elements_ref_frame_id = f.id\\n-- AND ref.timestamp NOT BETWEEN ?1 AND ?2)\\n--\\n-- falls back to a full scan of `frames` on the inner EXISTS without this\\n-- index (elements_ref_frame_id was added in 20260318000000 without one).\\n-- Measured 5m55s per 1-hour retention batch on a 33k-frame DB, making\\n-- retention unusable on any non-trivial backlog.\\n--\\n-- With the index, the inner plan becomes:\\n-- SEARCH ref USING INDEX idx_frames_elements_ref_frame_id (elements_ref_frame_id=?)\\n-- and the same query runs in ~5ms.\\n--\\n-- Partial (WHERE elements_ref_frame_id IS NOT NULL) because only frames\\n-- that reference a dedup anchor are relevant here. Storage cost is\\n-- negligible -- single-digit MB/year for typical capture volume, and it\\n-- is the smallest index on the frames table by a wide margin.\\nCREATE INDEX IF NOT EXISTS idx_frames_elements_ref_frame_id ON frames(elements_ref_frame_id)\\nWHERE\\n elements_ref_frame_id IS NOT NULL;\\n\" rows_affected=0 rows_returned=0 elapsed=1.230052917s\n2026-04-13T19:39:29.593268Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-13T19:39:29.594665Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-13T19:39:29.594680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-13T19:39:29.595089Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-13T19:39:29.595024Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-13T19:39:29.595128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-13T19:39:29.595223Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-13T19:39:29.595562Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-13T19:39:29.595770Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-13T19:39:29.596448Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-13T19:39:29.596584Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-13T19:39:29.596715Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-13T19:39:29.596827Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-13T19:39:29.596844Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-13T19:39:29.598802Z INFO screenpipe: starting UI event capture\n2026-04-13T19:39:29.598404Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-13T19:39:29.603432Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-13T19:39:29.609967Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-13T19:39:29.615106Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-13T19:39:29.630434Z INFO screenpipe_engine::ui_recorder: UI recording session started: faca997c-ce9a-477c-b5d0-e56e509585e9\n2026-04-13T19:39:29.630483Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-13T19:39:29.630562Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-12 16:39:29.630549 UTC to 2026-04-13 16:39:29.630549 UTC)\n2026-04-13T19:39:29.631025Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-13T19:39:29.637981Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-13T19:39:29.643829Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-13T19:39:29.788633Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3943 frame entries, coverage from 2026-04-12 16:39:29.630549 UTC\n2026-04-13T19:39:30.543977Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-13T19:39:30.544012Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-13T19:39:30.544060Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-13T19:39:31.016978Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-13T19:39:31.017036Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-13T19:39:31.017080Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-13T19:39:31.017114Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-13T19:39:32.207273Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-13T19:39:32.673392Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=7912, dur=47ms\n2026-04-13T19:39:32.704069Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-13T19:39:32.872035Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=7913, dur=108ms\n2026-04-13T19:39:34.636509Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-13T19:39:34.637200Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-13T19:39:44.339956Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=5000 elapsed=1.608390416s\n2026-04-13T19:40:29.616115Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames\n2026-04-13T19:40:31.310725Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 0.2MB (11.1x), 16 JPEGs deleted\n2026-04-13T19:41:39.668138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:41:40.367247Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:42:16.296737Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-96467039929937080, trigger=click)\n2026-04-13T19:42:34.936430Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5664644461248729071, trigger=visual_change)\n2026-04-13T19:44:29.627763Z INFO screenpipe_engine::server: api_usage_5min: 5 requests\n2026-04-13T19:45:04.634490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:45:04.634462+00:00 (14d retention)\n2026-04-13T19:45:31.349267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 20 eligible frames\n2026-04-13T19:45:32.543028Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 19 frames, 3.0MB → 0.3MB (9.9x), 19 JPEGs deleted\n2026-04-13T19:50:02.916584Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:02.918035Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:04.630322Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:50:04.630300+00:00 (14d retention)\n2026-04-13T19:50:32.575742Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-13T19:50:35.515577Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 46 frames, 6.6MB → 2.0MB (3.3x), 46 JPEGs deleted\n2026-04-13T19:50:36.330072Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.6MB (1.9x), 6 JPEGs deleted\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 24316\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-14T09:23:18.095876Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-14T09:23:19.016665Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-14T09:23:19.018052Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-14T09:23:19.018065Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-14T09:23:19.018310Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-14T09:23:19.018350Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-14T09:23:19.018329Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-14T09:23:19.018781Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-14T09:23:19.018887Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-14T09:23:19.018976Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-14T09:23:19.019743Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-14T09:23:19.021386Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-14T09:23:19.021709Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-14T09:23:19.021835Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-14T09:23:19.021852Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-14T09:23:19.025225Z INFO screenpipe: starting UI event capture\n2026-04-14T09:23:19.024042Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-14T09:23:19.034460Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-14T09:23:19.035048Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-14T09:23:19.041739Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-14T09:23:19.057947Z INFO screenpipe_engine::ui_recorder: UI recording session started: c7672ba6-54dd-483e-9512-949b51a2bd49\n2026-04-14T09:23:19.058064Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-14T09:23:19.058114Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-13 06:23:19.058103 UTC to 2026-04-14 06:23:19.058103 UTC)\n2026-04-14T09:23:19.062532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-14T09:23:19.066551Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-14T09:23:19.080775Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-14T09:23:19.697314Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3756 frame entries, coverage from 2026-04-13 06:23:19.058103 UTC\n2026-04-14T09:23:19.985445Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-14T09:23:19.985474Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-14T09:23:19.985515Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-14T09:23:20.492622Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-14T09:23:20.492664Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-14T09:23:20.492694Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-14T09:23:20.492726Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-14T09:23:21.313246Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-14T09:23:22.387611Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-14T09:23:22.954948Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=8037, dur=1082ms\n2026-04-14T09:23:23.488645Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=8038, dur=1012ms\n2026-04-14T09:23:24.063719Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-14T09:23:24.063951Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-14T09:24:19.745739Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 108 eligible frames\n2026-04-14T09:24:23.350916Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 6.7MB → 2.6MB (2.6x), 51 JPEGs deleted\n2026-04-14T09:24:26.531119Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 10.6MB → 3.9MB (2.7x), 55 JPEGs deleted\n2026-04-14T09:28:19.055456Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:28:54.061635Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:28:54.061630+00:00 (14d retention)\n2026-04-14T09:29:26.561625Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n2026-04-14T09:33:54.056707Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:33:54.056680+00:00 (14d retention)\n2026-04-14T09:34:26.581293Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 11 eligible frames\n2026-04-14T09:34:27.123519Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 4 frames, 0.9MB → 0.6MB (1.6x), 4 JPEGs deleted\n2026-04-14T09:34:28.092531Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 1.4MB → 0.8MB (1.8x), 7 JPEGs deleted\n2026-04-14T09:38:54.029363Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)\n2026-04-14T09:39:28.082314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible frames\n2026-04-14T09:39:29.343941Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.0MB → 0.7MB (6.0x), 18 JPEGs deleted\n2026-04-14T09:39:30.750250Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted\n2026-04-14T09:41:13.184908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6982821907865222085, trigger=click)\n2026-04-14T09:41:19.221590Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6812429097673958383, trigger=visual_change)\n2026-04-14T09:42:17.435758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6365427964931292073, trigger=click)\n2026-04-14T09:42:33.656193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4160452185621303946, trigger=click)\n2026-04-14T09:42:46.140088Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2304266842869419917, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-14T09:43:54.022784Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:43:54.022742+00:00 (14d retention)\n2026-04-14T09:44:07.036758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:16.412880Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:31.467140Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-04-14T09:44:32.220816Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.7MB → 0.2MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:33.112790Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.5MB → 0.4MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:49.822061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=visual_change)\n2026-04-14T09:44:58.085483Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=click)\n2026-04-14T09:45:11.008075Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=visual_change)\n2026-04-14T09:45:27.976077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:28.005455Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:33.771220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6619028446781713005, trigger=click)\n2026-04-14T09:46:17.937329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:20.967541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:39.124248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=visual_change)\n2026-04-14T09:46:48.114315Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:46:48.134347Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:48:19.010549Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:48:28.225785Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:28.241367Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:35.474701Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2313032521647048085, trigger=click)\n2026-04-14T09:48:44.297355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=529628650036307666, trigger=click)\n2026-04-14T09:48:54.016503Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:48:54.016484+00:00 (14d retention)\n2026-04-14T09:49:33.136435Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 87 eligible frames\n2026-04-14T09:49:35.411222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 8.9MB → 1.6MB (5.4x), 33 JPEGs deleted\n2026-04-14T09:49:39.291290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 10.8MB → 4.1MB (2.6x), 52 JPEGs deleted\n2026-04-14T09:52:10.262616Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4590837745933313988, trigger=click)\n2026-04-14T09:52:25.201982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:28.245911Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:37.345773Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:40.396144Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:54.098628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:52:54.108786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:53:13.724192Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:16.763953Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:19.793338Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:25.860403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:28.887448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:31.919424Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:44.021891Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6850664184897375859, trigger=visual_change)\n2026-04-14T09:53:53.090419Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:54.010522Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:53:54.010512+00:00 (14d retention)\n2026-04-14T09:53:56.129621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:59.154578Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:54:05.213884Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:08.251183Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:14.329171Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:39.747828Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 186 eligible frames\n2026-04-14T09:54:41.500859Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2366998612440519548, trigger=visual_change)\n2026-04-14T09:54:44.836247Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 86 frames, 14.4MB → 3.3MB (4.3x), 86 JPEGs deleted\n2026-04-14T09:54:51.018273Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.3MB → 5.7MB (2.5x), 98 JPEGs deleted\n2026-04-14T09:58:35.439655Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7018639353123991036, trigger=click)\n2026-04-14T09:58:53.989016Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:58:53.989006+00:00 (14d retention)\n2026-04-14T09:59:51.618785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 150 eligible frames\n2026-04-14T09:59:57.069345Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 80 frames, 12.2MB → 4.4MB (2.8x), 80 JPEGs deleted\n2026-04-14T10:00:04.665192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.2MB → 5.4MB (2.3x), 68 JPEGs deleted","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.00234375,"top":0.039583333,"width":0.00625,"height":0.011111111},"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.12382813,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.12617187,"top":0.039583333,"width":0.00625,"height":0.011111111},"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.24765626,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.25,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.37148437,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.3738281,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4953125,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.49765626,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6191406,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.6214844,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.74296874,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.7453125,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.86679685,"top":0.036805555,"width":0.12382813,"height":0.016666668},"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.8691406,"top":0.039583333,"width":0.00625,"height":0.011111111},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9746094,"top":0.02013889,"width":0.021875,"height":0.011805556},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.4933594,"top":0.020833334,"width":0.012890625,"height":0.011111111},"role_description":"text"}]...
|
-6150758636940404341
|
-8869373171955034755
|
visual_change
|
accessibility
|
NULL
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
NULL
|
|
8692
|
168
|
0
|
2026-04-14T07:00:21.744361+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150021744_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"clipboard)\n2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames\n2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted\n2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)\n2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)\n2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)\n2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)\n2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)\n2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)\n2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)\n2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)\n2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)\n2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests\n2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)\n2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames\n2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted\n2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)\n2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames\n2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted\n2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)\n2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames\n2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted\n2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)\n2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted\n2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)\n2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)\n2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:19:54.331647Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:19:54.331585+00:00 (14d retention)\n2026-04-12T14:25:49.460879Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:47:08.896043Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:51:40.566736Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:51:40.566667+00:00 (14d retention)\n2026-04-12T15:04:41.463531Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T15:09:53.670591Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T15:09:53.687234Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T15:09:53.694692Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T15:09:54.069049Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T15:09:54.972151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=click)\n2026-04-12T15:10:00.918510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4593439385064446773, trigger=visual_change)\n2026-04-12T15:10:03.918707Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T15:11:30.984863Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:11:30.984842+00:00 (14d retention)\n2026-04-12T15:16:30.982686Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:16:30.982661+00:00 (14d retention)\n2026-04-12T15:21:30.980571Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:21:30.980551+00:00 (14d retention)\n2026-04-12T15:22:42.975270Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-12T15:22:45.011395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 3.1MB → 1.1MB (2.8x), 33 JPEGs deleted\n2026-04-12T15:26:30.978141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:26:30.978120+00:00 (14d retention)\n2026-04-12T15:27:45.265922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-12T15:27:49.938865Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 83 frames, 6.3MB → 0.1MB (58.2x), 83 JPEGs deleted\n2026-04-12T15:31:30.953991Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:31:30.953971+00:00 (14d retention)\n2026-04-12T15:32:50.166006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:32:55.707883Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 7.5MB → 0.1MB (70.1x), 99 JPEGs deleted\n2026-04-12T15:32:56.071976Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (3.0x), 3 JPEGs deleted\n2026-04-12T15:36:30.948421Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:36:30.948401+00:00 (14d retention)\n2026-04-12T15:37:56.337459Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:38:01.842312Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.0x), 98 JPEGs deleted\n2026-04-12T15:38:02.207918Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (2.8x), 3 JPEGs deleted\n2026-04-12T15:41:30.945296Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:41:30.945274+00:00 (14d retention)\n2026-04-12T15:43:02.496758Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:43:08.031970Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (68.3x), 98 JPEGs deleted\n2026-04-12T15:43:09.583075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.5x), 26 JPEGs deleted\n2026-04-12T15:46:30.941625Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:46:30.941607+00:00 (14d retention)\n2026-04-12T15:48:09.854085Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 127 eligible frames\n2026-04-12T15:48:15.376242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.2x), 98 JPEGs deleted\n2026-04-12T15:48:16.986205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.0MB → 0.1MB (22.4x), 27 JPEGs deleted\n2026-04-12T15:51:30.931020Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:51:30.931+00:00 (14d retention)\n2026-04-12T15:53:17.140652Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:53:22.544303Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.5x), 98 JPEGs deleted\n2026-04-12T15:53:24.051282Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.4x), 26 JPEGs deleted\n2026-04-12T15:56:30.903513Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:56:30.903491+00:00 (14d retention)\n2026-04-12T15:58:24.061857Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 107 eligible frames\n2026-04-12T15:58:29.565651Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.8x), 98 JPEGs deleted\n2026-04-12T15:58:30.163222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 0.5MB → 0.1MB (6.1x), 7 JPEGs deleted\n2026-04-12T16:01:30.898705Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:01:30.898688+00:00 (14d retention)\n2026-04-12T16:03:30.176572Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-12T16:03:35.702407Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (66.5x), 98 JPEGs deleted\n2026-04-12T16:03:37.208567Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 1.9MB → 0.1MB (19.5x), 25 JPEGs deleted\n2026-04-12T16:06:30.893145Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:06:30.893123+00:00 (14d retention)\n2026-04-12T16:08:37.224128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 137 eligible frames\n2026-04-12T16:08:42.754922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (55.1x), 98 JPEGs deleted\n2026-04-12T16:08:44.902888Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 2.9MB → 0.1MB (27.8x), 37 JPEGs deleted\n2026-04-12T16:11:30.884492Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:11:30.884475+00:00 (14d retention)\n2026-04-12T16:13:44.914274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 102 eligible frames\n2026-04-12T16:13:50.332990Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (60.2x), 98 JPEGs deleted\n2026-04-12T16:13:50.582963Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.2MB → 0.1MB (1.9x), 2 JPEGs deleted\n2026-04-12T16:16:30.874710Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:16:30.874654+00:00 (14d retention)\n2026-04-12T16:18:50.598274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 92 eligible frames\n2026-04-12T16:18:55.602978Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 7.0MB → 0.1MB (56.9x), 90 JPEGs deleted\n2026-04-12T16:21:30.868887Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:21:30.868843+00:00 (14d retention)\n2026-04-12T16:23:55.619078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 39 eligible frames\n2026-04-12T16:23:57.827626Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 2.9MB → 0.1MB (28.1x), 38 JPEGs deleted\n2026-04-12T16:25:51.808414Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T16:25:55.859250Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-12T16:26:22.022550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=335681983743287612, trigger=visual_change)\n2026-04-12T16:26:30.862865Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:26:30.862859+00:00 (14d retention)\n2026-04-12T16:26:49.195853Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=visual_change)\n2026-04-12T16:26:50.724575Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=clipboard)\n2026-04-12T16:26:58.277345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:26:59.647372Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=clipboard)\n2026-04-12T16:27:58.948426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:28:57.842202Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-12T16:28:59.471378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.1MB → 0.1MB (19.7x), 27 JPEGs deleted\n2026-04-12T16:30:07.202386Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3216013508830929208, trigger=click)\n2026-04-12T16:30:55.852584Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T16:31:30.887381Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:31:30.887363+00:00 (14d retention)\n2026-04-12T16:31:49.004783Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:31:49.729537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=click)\n2026-04-12T16:31:55.091180Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:32:38.955241Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:41.068172Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=clipboard)\n2026-04-12T16:32:42.939568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:44.448998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=visual_change)\n2026-04-12T16:32:46.133335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=click)\n2026-04-12T16:32:47.467019Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:32:47.909378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=clipboard)\n2026-04-12T16:33:06.479217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:33:09.545186Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5503780454464997020, trigger=visual_change)\n2026-04-12T16:33:15.550145Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7389604070772900291, trigger=visual_change)\n2026-04-12T16:33:59.523675Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 12 eligible frames\n2026-04-12T16:34:00.275262Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 0.9MB → 0.1MB (9.2x), 11 JPEGs deleted\n2026-04-12T16:36:30.893415Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:36:30.893405+00:00 (14d retention)\n2026-04-12T16:37:02.339834Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T16:42:28.176895Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 54 eligible frames\n2026-04-12T16:42:31.234893Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 53 frames, 4.9MB → 1.5MB (3.4x), 53 JPEGs deleted\n2026-04-12T16:46:30.256919Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:46:30.256841+00:00 (14d retention)\n2026-04-12T16:58:23.782435Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T16:59:58.366015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 25 eligible frames\n2026-04-12T16:59:59.856243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 2.8MB → 0.5MB (5.8x), 24 JPEGs deleted\n2026-04-12T18:37:05.993577Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T18:39:53.607673Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T18:46:44.262699Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T15:46:44.262630+00:00 (14d retention)\n2026-04-12T18:55:18.717641Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T19:09:18.536900Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T20:13:29.785331Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T17:13:29.785272+00:00 (14d retention)\n2026-04-12T20:13:47.397970Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording\n2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)\n2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording\n2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1\n2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6\n2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording\n2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording\n2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6\n2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1\n2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)\n2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)\n2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)\n2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)\n2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)\n2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)\n2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)\n2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)\n2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)\n2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)\n2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)\n2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)\n2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)\n2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)\n2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)\n2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)\n2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)\n2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)\n2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)\n2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)\n2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)\n2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)\n2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)\n2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)\n2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)\n2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)\n2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)\n2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)\n2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)\n2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)\n2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)\n2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)\n2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)\n2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)\n2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)\n2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)\n2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)\n2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)\n2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)\n2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)\n2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)\n2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)\n2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)\n2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)\n2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)\n2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)\n2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)\n2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames\n2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted\n2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted\n2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)\n2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)\n2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames\n2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted\n2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)\n2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted\n2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)\n2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames\n2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted\n2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)\n2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)\n2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted\n2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted\n2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)\n2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames\n2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted\n2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted\n2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)\n2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames\n2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted\n2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted\n2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)\n2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted\n2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)\n2026-04-13T15:57:06.748688Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=1000 elapsed=1.158041625s\n2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames\n2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted\n2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)\n2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames\n2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted\n2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)\n2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames\n2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted\n2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)\n2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames\n2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted\n2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted\n2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)\n2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted\n2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted\n2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)\n2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted\n2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted\n2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)\n2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:30:07.345631Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.0x), 98 JPEGs deleted\n2026-04-13T16:30:09.401035Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 4.2MB → 0.2MB (17.5x), 35 JPEGs deleted\n2026-04-13T16:30:58.877763Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:30:58.877747+00:00 (14d retention)\n2026-04-13T16:35:09.543901Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 123 eligible frames\n2026-04-13T16:35:15.118342Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (29.4x), 98 JPEGs deleted\n2026-04-13T16:35:16.544264Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 2.8MB → 0.2MB (13.7x), 23 JPEGs deleted\n2026-04-13T16:35:58.877807Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:35:58.877797+00:00 (14d retention)\n2026-04-13T16:38:16.074486Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9190773859099204307, trigger=click)\n2026-04-13T16:39:15.630281Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=visual_change)\n2026-04-13T16:39:18.164527Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T16:39:39.417651Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:39:46.483591Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T16:40:16.572113Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 142 eligible frames\n2026-04-13T16:40:21.964524Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.3x), 98 JPEGs deleted\n2026-04-13T16:40:23.872191Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T16:40:24.338496Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 5.1MB → 0.3MB (19.6x), 42 JPEGs deleted\n2026-04-13T16:40:58.876854Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:40:58.876845+00:00 (14d retention)\n2026-04-13T16:41:10.838114Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=visual_change)\n2026-04-13T16:42:13.892340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5199349294477942535, trigger=click)\n2026-04-13T16:42:44.819070Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:45:24.413681Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 163 eligible frames\n2026-04-13T16:45:29.941955Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.1x), 98 JPEGs deleted\n2026-04-13T16:45:33.507323Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 7.6MB → 0.3MB (24.3x), 63 JPEGs deleted\n2026-04-13T16:45:58.885928Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:45:58.885879+00:00 (14d retention)\n2026-04-13T16:50:33.536731Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 117 eligible frames\n2026-04-13T16:50:39.528450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 12.0MB → 2.2MB (5.4x), 98 JPEGs deleted\n2026-04-13T16:50:41.016936Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.5MB → 1.6MB (2.2x), 17 JPEGs deleted\n2026-04-13T16:50:58.885615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:50:58.885607+00:00 (14d retention)\n2026-04-13T16:55:41.041166Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:55:46.654516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 17.3MB → 4.5MB (3.8x), 98 JPEGs deleted\n2026-04-13T16:55:48.802425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 7.0MB → 0.9MB (7.8x), 35 JPEGs deleted\n2026-04-13T16:55:58.885247Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:55:58.885238+00:00 (14d retention)\n2026-04-13T17:00:48.921394Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-13T17:00:54.499682Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 2.0MB (9.8x), 98 JPEGs deleted\n2026-04-13T17:00:56.069295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 5.0MB → 0.7MB (7.2x), 25 JPEGs deleted\n2026-04-13T17:00:58.884750Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:00:58.884741+00:00 (14d retention)\n2026-04-13T17:04:17.476028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:20.514684Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:23.559568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:29.620877Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:44.761227Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:21.254931Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:24.295008Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:27.336461Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:30.386176Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:42.486968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:51.582326Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:54.624396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:56.063515Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 172 eligible frames\n2026-04-13T17:05:58.849231Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:05:58.849225+00:00 (14d retention)\n2026-04-13T17:06:01.555232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.4MB (13.6x), 98 JPEGs deleted\n2026-04-13T17:06:05.597067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 72 frames, 14.3MB → 1.1MB (12.9x), 72 JPEGs deleted\n2026-04-13T17:06:09.702568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:06:58.426892Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:07:01.047902Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:07:12.921022Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:08:32.658411Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=visual_change)\n2026-04-13T17:08:33.461053Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:34.888152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:44.751908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6880399320930358557, trigger=visual_change)\n2026-04-13T17:08:47.811335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5551774685991471183, trigger=visual_change)\n2026-04-13T17:08:59.877508Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3750487923867570316, trigger=visual_change)\n2026-04-13T17:09:05.917138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5193827678277969729, trigger=visual_change)\n2026-04-13T17:09:08.963248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1573230130233012243, trigger=visual_change)\n2026-04-13T17:09:27.538887Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=visual_change)\n2026-04-13T17:10:15.148423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2198924557410214150, trigger=click)\n2026-04-13T17:10:19.711447Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8529595713999975857, trigger=visual_change)\n2026-04-13T17:10:23.842094Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:10:58.846075Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:10:58.846061+00:00 (14d retention)\n2026-04-13T17:11:05.614778Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 133 eligible frames\n2026-04-13T17:11:11.080267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.6MB (12.4x), 98 JPEGs deleted\n2026-04-13T17:11:13.049885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 6.6MB → 0.8MB (8.5x), 33 JPEGs deleted\n2026-04-13T17:14:28.187399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=click)\n2026-04-13T17:15:58.842867Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:15:58.842852+00:00 (14d retention)\n2026-04-13T17:16:00.560201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3089258739618396828, trigger=click)\n2026-04-13T17:16:05.720267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-756028078299947006, trigger=click)\n2026-04-13T17:16:13.081624Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-13T17:16:17.891451Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 82 frames, 16.3MB → 1.7MB (9.4x), 82 JPEGs deleted\n2026-04-13T17:17:45.943910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7911837907515514222, trigger=click)\n2026-04-13T17:18:44.492158Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5928663278776159308, trigger=visual_change)\n2026-04-13T17:19:18.239507Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8963743573879133782, trigger=visual_change)\n2026-04-13T17:20:52.622485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=visual_change)\n2026-04-13T17:20:52.865628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:53.794741Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:55.173220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:56.419536Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:58.841572Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:20:58.841554+00:00 (14d retention)\n2026-04-13T17:21:17.914363Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T17:21:23.033357Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 19.3MB → 6.9MB (2.8x), 87 JPEGs deleted\n2026-04-13T17:22:17.281652Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8506419545576175835, trigger=visual_change)\n2026-04-13T17:22:24.174259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8506170850142559396, trigger=click)\n2026-04-13T17:24:29.375130Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1367698138829933492, trigger=click)\n2026-04-13T17:25:30.618046Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5264066362649694131, trigger=clipboard)\n2026-04-13T17:25:58.861117Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:25:58.861102+00:00 (14d retention)\n2026-04-13T17:26:07.783284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3389874276161121002, trigger=clipboard)\n2026-04-13T17:26:23.079232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 43 eligible frames\n2026-04-13T17:26:25.533960Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 8.5MB → 1.4MB (5.9x), 42 JPEGs deleted\n2026-04-13T17:26:26.405342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4749965863260205632, trigger=click)\n2026-04-13T17:27:03.146806Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T17:30:23.856612Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:30:58.861025Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:30:58.861012+00:00 (14d retention)\n2026-04-13T17:31:25.542075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:31:29.155449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 13.1MB → 1.9MB (6.9x), 65 JPEGs deleted\n2026-04-13T17:31:53.487787Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8861777922848222919, trigger=click)\n2026-04-13T17:35:26.901256Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:29.203266Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:31.520280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=clipboard)\n2026-04-13T17:35:33.300160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T17:35:45.306897Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6087902347824858697, trigger=clipboard)\n2026-04-13T17:35:58.859672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:35:58.859656+00:00 (14d retention)\n2026-04-13T17:36:29.179810Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T17:36:32.011609Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 10.8MB → 1.7MB (6.2x), 49 JPEGs deleted\n2026-04-13T17:40:58.858490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:40:58.858471+00:00 (14d retention)\n2026-04-13T17:41:32.043222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T17:41:36.069242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 16.1MB → 1.1MB (14.5x), 71 JPEGs deleted\n2026-04-13T17:42:15.596334Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4235966675435269325, trigger=click)\n2026-04-13T17:45:58.869276Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:45:58.869266+00:00 (14d retention)\n2026-04-13T17:46:36.092867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:46:39.758714Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 15.1MB → 1.0MB (15.3x), 65 JPEGs deleted\n2026-04-13T17:49:46.579982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8606465934501073324, trigger=click)\n2026-04-13T17:50:58.869493Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:50:58.869486+00:00 (14d retention)\n2026-04-13T17:51:39.783256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 16 eligible frames\n2026-04-13T17:51:40.758071Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 3.5MB → 0.4MB (9.1x), 15 JPEGs deleted\n2026-04-13T17:52:09.695481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:52:18.104878Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:20.446688Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:22.950263Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:55:58.869201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:55:58.869180+00:00 (14d retention)\n2026-04-13T17:56:40.787956Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-13T17:56:42.144760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 5.1MB → 0.4MB (13.2x), 22 JPEGs deleted\n2026-04-13T17:57:54.358454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:57:58.419369Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:12.778123Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:16.712796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:20.448642Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:36.397921Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T17:58:39.343061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T18:00:55.845071Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-439578195712127451, trigger=click)\n2026-04-13T18:00:58.868418Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:00:58.868403+00:00 (14d retention)\n2026-04-13T18:01:42.187214Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-13T18:01:44.040254Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.2MB → 0.5MB (14.4x), 31 JPEGs deleted\n2026-04-13T18:03:22.816287Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-481145244361585685, trigger=click)\n2026-04-13T18:05:58.873688Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:05:58.873678+00:00 (14d retention)\n2026-04-13T18:06:44.077710Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-13T18:06:46.456870Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 9.6MB → 0.4MB (24.2x), 41 JPEGs deleted\n2026-04-13T18:10:58.873801Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:10:58.873743+00:00 (14d retention)\n2026-04-13T18:11:46.492855Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 38 eligible frames\n2026-04-13T18:11:48.658067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 8.6MB → 0.8MB (11.3x), 37 JPEGs deleted\n2026-04-13T18:15:58.875133Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:15:58.875119+00:00 (14d retention)\n2026-04-13T18:16:48.694011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 27 eligible frames\n2026-04-13T18:16:50.273243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 6.1MB → 0.4MB (15.6x), 26 JPEGs deleted\n2026-04-13T18:18:31.734321Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T18:23:08.990753Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:23:08.990735+00:00 (14d retention)\n2026-04-13T18:24:18.871885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:24:20.038791Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.2MB → 0.4MB (10.8x), 18 JPEGs deleted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T18:35:13.146239Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T18:35:13.149068Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T18:35:13.170962Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T18:35:13.680481Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T18:35:27.620608Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-13T18:36:17.152264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1184372696878099077, trigger=click)\n2026-04-13T18:36:28.363701Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:36:28.363689+00:00 (14d retention)\n2026-04-13T18:37:21.142467Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 10 eligible frames\n2026-04-13T18:37:21.905994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 2.1MB → 0.4MB (5.5x), 9 JPEGs deleted\n2026-04-13T18:37:36.639362Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6976444594554398738, trigger=click)\n2026-04-13T18:39:53.327516Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:41:28.358989Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:41:28.358952+00:00 (14d retention)\n2026-04-13T18:42:21.940046Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-13T18:46:28.358214Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:46:28.358197+00:00 (14d retention)\n2026-04-13T18:47:21.955151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 6 eligible frames\n2026-04-13T18:47:22.689470Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.2MB → 0.5MB (2.3x), 6 JPEGs deleted\n2026-04-13T18:48:30.117101Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8612826691778232576, trigger=click)\n2026-04-13T18:51:28.358332Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:51:28.358272+00:00 (14d retention)\n2026-04-13T18:52:22.720460Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T18:52:24.625362Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 7.5MB → 0.5MB (14.3x), 32 JPEGs deleted\n2026-04-13T18:53:26.194571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2525325065609490636, trigger=click)\n2026-04-13T18:54:48.394617Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:56:28.358108Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:56:28.358077+00:00 (14d retention)\n2026-04-13T18:57:24.630003Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:57:26.008482Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.3MB → 1.1MB (3.8x), 18 JPEGs deleted\n2026-04-13T19:01:28.309932Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:01:28.309902+00:00 (14d retention)\n2026-04-13T19:01:34.835096Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8845567138521432327, trigger=click)\n2026-04-13T19:02:26.033245Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 59 eligible frames\n2026-04-13T19:02:29.410795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 58 frames, 15.1MB → 2.4MB (6.3x), 58 JPEGs deleted\n2026-04-13T19:06:28.306223Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:06:28.306189+00:00 (14d retention)\n2026-04-13T19:07:29.443796Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T19:07:32.264873Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 9.3MB → 1.9MB (4.9x), 49 JPEGs deleted\n2026-04-13T19:09:21.780997Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2535583028595392832, trigger=click)\n2026-04-13T19:11:28.301542Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:11:28.301502+00:00 (14d retention)\n2026-04-13T19:12:32.301751Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 55 eligible frames\n2026-04-13T19:12:35.543171Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 54 frames, 8.4MB → 0.2MB (34.0x), 54 JPEGs deleted\n2026-04-13T19:15:28.279261Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3643209958340923733, trigger=click)\n2026-04-13T19:16:28.300071Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:16:28.300040+00:00 (14d retention)\n2026-04-13T19:17:35.879347Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T19:17:37.771162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 5.0MB → 0.2MB (21.2x), 32 JPEGs deleted\n2026-04-13T19:21:28.313672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:21:28.313650+00:00 (14d retention)\n2026-04-13T19:21:43.867272Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:21:53.316112Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:22:37.824162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 30 eligible frames\n2026-04-13T19:22:39.564867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.5MB → 0.2MB (19.7x), 29 JPEGs deleted\n2026-04-13T19:23:58.293564Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:05.926037Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:07.100441Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:08.189505Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:09.316024Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:10.334454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:11.039989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.279934Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.934012Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:13.905703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:14.688081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:16.790073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:17.648048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:18.648340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:20.939136Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:32.085226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1677564857471996960, trigger=click)\n2026-04-13T19:24:52.669280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5315255766850756707, trigger=click)\n2026-04-13T19:26:28.311385Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:26:28.311371+00:00 (14d retention)\n2026-04-13T19:27:39.600820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T19:27:43.607748Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 10.7MB → 2.0MB (5.3x), 71 JPEGs deleted\n2026-04-13T19:29:29.337437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6191878184103635993, trigger=click)\n2026-04-13T19:30:53.305205Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T19:31:28.308892Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:31:28.308882+00:00 (14d retention)\n2026-04-13T19:32:39.123443Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:32:43.640042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-04-13T19:32:47.533673Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 69 frames, 10.8MB → 0.5MB (22.6x), 69 JPEGs deleted\n2026-04-13T19:32:50.924091Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:36:28.306590Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:36:28.306551+00:00 (14d retention)\n2026-04-13T19:37:47.886163Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T19:37:51.291730Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:37:52.768785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.5MB → 0.5MB (28.8x), 87 JPEGs deleted\n2026-04-13T19:37:57.364851Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:38:38.577300Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4736856628251450227, trigger=click)\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-strt\nzsh: command not found: sp-strt\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start \n[1] 21900\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-13T19:39:27.177326Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-13T19:39:29.590345Z WARN sqlx::query: summary=\"-- Partial index on …\" db.statement=\"\\n\\n-- Partial index on frames.elements_ref_frame_id to eliminate the full\\n-- table scan in the retention anchor-frame subquery.\\n--\\n-- The correlated subquery in delete_time_range_batch:\\n-- SELECT DISTINCT f.id FROM frames f\\n-- WHERE f.timestamp BETWEEN ?1 AND ?2\\n-- AND EXISTS (SELECT 1 FROM frames ref\\n-- WHERE ref.elements_ref_frame_id = f.id\\n-- AND ref.timestamp NOT BETWEEN ?1 AND ?2)\\n--\\n-- falls back to a full scan of `frames` on the inner EXISTS without this\\n-- index (elements_ref_frame_id was added in 20260318000000 without one).\\n-- Measured 5m55s per 1-hour retention batch on a 33k-frame DB, making\\n-- retention unusable on any non-trivial backlog.\\n--\\n-- With the index, the inner plan becomes:\\n-- SEARCH ref USING INDEX idx_frames_elements_ref_frame_id (elements_ref_frame_id=?)\\n-- and the same query runs in ~5ms.\\n--\\n-- Partial (WHERE elements_ref_frame_id IS NOT NULL) because only frames\\n-- that reference a dedup anchor are relevant here. Storage cost is\\n-- negligible -- single-digit MB/year for typical capture volume, and it\\n-- is the smallest index on the frames table by a wide margin.\\nCREATE INDEX IF NOT EXISTS idx_frames_elements_ref_frame_id ON frames(elements_ref_frame_id)\\nWHERE\\n elements_ref_frame_id IS NOT NULL;\\n\" rows_affected=0 rows_returned=0 elapsed=1.230052917s\n2026-04-13T19:39:29.593268Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-13T19:39:29.594665Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-13T19:39:29.594680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-13T19:39:29.595089Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-13T19:39:29.595024Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-13T19:39:29.595128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-13T19:39:29.595223Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-13T19:39:29.595562Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-13T19:39:29.595770Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-13T19:39:29.596448Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-13T19:39:29.596584Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-13T19:39:29.596715Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-13T19:39:29.596827Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-13T19:39:29.596844Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-13T19:39:29.598802Z INFO screenpipe: starting UI event capture\n2026-04-13T19:39:29.598404Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-13T19:39:29.603432Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-13T19:39:29.609967Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-13T19:39:29.615106Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-13T19:39:29.630434Z INFO screenpipe_engine::ui_recorder: UI recording session started: faca997c-ce9a-477c-b5d0-e56e509585e9\n2026-04-13T19:39:29.630483Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-13T19:39:29.630562Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-12 16:39:29.630549 UTC to 2026-04-13 16:39:29.630549 UTC)\n2026-04-13T19:39:29.631025Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-13T19:39:29.637981Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-13T19:39:29.643829Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-13T19:39:29.788633Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3943 frame entries, coverage from 2026-04-12 16:39:29.630549 UTC\n2026-04-13T19:39:30.543977Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-13T19:39:30.544012Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-13T19:39:30.544060Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-13T19:39:31.016978Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-13T19:39:31.017036Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-13T19:39:31.017080Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-13T19:39:31.017114Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-13T19:39:32.207273Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-13T19:39:32.673392Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=7912, dur=47ms\n2026-04-13T19:39:32.704069Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-13T19:39:32.872035Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=7913, dur=108ms\n2026-04-13T19:39:34.636509Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-13T19:39:34.637200Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-13T19:39:44.339956Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=5000 elapsed=1.608390416s\n2026-04-13T19:40:29.616115Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames\n2026-04-13T19:40:31.310725Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 0.2MB (11.1x), 16 JPEGs deleted\n2026-04-13T19:41:39.668138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:41:40.367247Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:42:16.296737Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-96467039929937080, trigger=click)\n2026-04-13T19:42:34.936430Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5664644461248729071, trigger=visual_change)\n2026-04-13T19:44:29.627763Z INFO screenpipe_engine::server: api_usage_5min: 5 requests\n2026-04-13T19:45:04.634490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:45:04.634462+00:00 (14d retention)\n2026-04-13T19:45:31.349267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 20 eligible frames\n2026-04-13T19:45:32.543028Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 19 frames, 3.0MB → 0.3MB (9.9x), 19 JPEGs deleted\n2026-04-13T19:50:02.916584Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:02.918035Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:04.630322Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:50:04.630300+00:00 (14d retention)\n2026-04-13T19:50:32.575742Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-13T19:50:35.515577Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 46 frames, 6.6MB → 2.0MB (3.3x), 46 JPEGs deleted\n2026-04-13T19:50:36.330072Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.6MB (1.9x), 6 JPEGs deleted\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 24316\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-14T09:23:18.095876Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-14T09:23:19.016665Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-14T09:23:19.018052Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-14T09:23:19.018065Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-14T09:23:19.018310Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-14T09:23:19.018350Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-14T09:23:19.018329Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-14T09:23:19.018781Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-14T09:23:19.018887Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-14T09:23:19.018976Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-14T09:23:19.019743Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-14T09:23:19.021386Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-14T09:23:19.021709Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-14T09:23:19.021835Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-14T09:23:19.021852Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-14T09:23:19.025225Z INFO screenpipe: starting UI event capture\n2026-04-14T09:23:19.024042Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-14T09:23:19.034460Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-14T09:23:19.035048Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-14T09:23:19.041739Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-14T09:23:19.057947Z INFO screenpipe_engine::ui_recorder: UI recording session started: c7672ba6-54dd-483e-9512-949b51a2bd49\n2026-04-14T09:23:19.058064Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-14T09:23:19.058114Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-13 06:23:19.058103 UTC to 2026-04-14 06:23:19.058103 UTC)\n2026-04-14T09:23:19.062532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-14T09:23:19.066551Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-14T09:23:19.080775Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-14T09:23:19.697314Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3756 frame entries, coverage from 2026-04-13 06:23:19.058103 UTC\n2026-04-14T09:23:19.985445Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-14T09:23:19.985474Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-14T09:23:19.985515Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-14T09:23:20.492622Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-14T09:23:20.492664Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-14T09:23:20.492694Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-14T09:23:20.492726Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-14T09:23:21.313246Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-14T09:23:22.387611Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-14T09:23:22.954948Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=8037, dur=1082ms\n2026-04-14T09:23:23.488645Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=8038, dur=1012ms\n2026-04-14T09:23:24.063719Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-14T09:23:24.063951Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-14T09:24:19.745739Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 108 eligible frames\n2026-04-14T09:24:23.350916Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 6.7MB → 2.6MB (2.6x), 51 JPEGs deleted\n2026-04-14T09:24:26.531119Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 10.6MB → 3.9MB (2.7x), 55 JPEGs deleted\n2026-04-14T09:28:19.055456Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:28:54.061635Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:28:54.061630+00:00 (14d retention)\n2026-04-14T09:29:26.561625Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n2026-04-14T09:33:54.056707Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:33:54.056680+00:00 (14d retention)\n2026-04-14T09:34:26.581293Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 11 eligible frames\n2026-04-14T09:34:27.123519Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 4 frames, 0.9MB → 0.6MB (1.6x), 4 JPEGs deleted\n2026-04-14T09:34:28.092531Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 1.4MB → 0.8MB (1.8x), 7 JPEGs deleted\n2026-04-14T09:38:54.029363Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)\n2026-04-14T09:39:28.082314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible frames\n2026-04-14T09:39:29.343941Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.0MB → 0.7MB (6.0x), 18 JPEGs deleted\n2026-04-14T09:39:30.750250Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted\n2026-04-14T09:41:13.184908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6982821907865222085, trigger=click)\n2026-04-14T09:41:19.221590Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6812429097673958383, trigger=visual_change)\n2026-04-14T09:42:17.435758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6365427964931292073, trigger=click)\n2026-04-14T09:42:33.656193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4160452185621303946, trigger=click)\n2026-04-14T09:42:46.140088Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2304266842869419917, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-14T09:43:54.022784Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:43:54.022742+00:00 (14d retention)\n2026-04-14T09:44:07.036758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:16.412880Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:31.467140Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-04-14T09:44:32.220816Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.7MB → 0.2MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:33.112790Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.5MB → 0.4MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:49.822061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=visual_change)\n2026-04-14T09:44:58.085483Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=click)\n2026-04-14T09:45:11.008075Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=visual_change)\n2026-04-14T09:45:27.976077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:28.005455Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:33.771220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6619028446781713005, trigger=click)\n2026-04-14T09:46:17.937329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:20.967541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:39.124248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=visual_change)\n2026-04-14T09:46:48.114315Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:46:48.134347Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:48:19.010549Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:48:28.225785Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:28.241367Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:35.474701Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2313032521647048085, trigger=click)\n2026-04-14T09:48:44.297355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=529628650036307666, trigger=click)\n2026-04-14T09:48:54.016503Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:48:54.016484+00:00 (14d retention)\n2026-04-14T09:49:33.136435Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 87 eligible frames\n2026-04-14T09:49:35.411222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 8.9MB → 1.6MB (5.4x), 33 JPEGs deleted\n2026-04-14T09:49:39.291290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 10.8MB → 4.1MB (2.6x), 52 JPEGs deleted\n2026-04-14T09:52:10.262616Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4590837745933313988, trigger=click)\n2026-04-14T09:52:25.201982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:28.245911Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:37.345773Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:40.396144Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:54.098628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:52:54.108786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:53:13.724192Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:16.763953Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:19.793338Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:25.860403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:28.887448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:31.919424Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:44.021891Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6850664184897375859, trigger=visual_change)\n2026-04-14T09:53:53.090419Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:54.010522Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:53:54.010512+00:00 (14d retention)\n2026-04-14T09:53:56.129621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:59.154578Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:54:05.213884Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:08.251183Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:14.329171Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:39.747828Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 186 eligible frames\n2026-04-14T09:54:41.500859Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2366998612440519548, trigger=visual_change)\n2026-04-14T09:54:44.836247Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 86 frames, 14.4MB → 3.3MB (4.3x), 86 JPEGs deleted\n2026-04-14T09:54:51.018273Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.3MB → 5.7MB (2.5x), 98 JPEGs deleted\n2026-04-14T09:58:35.439655Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7018639353123991036, trigger=click)\n2026-04-14T09:58:53.989016Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:58:53.989006+00:00 (14d retention)\n2026-04-14T09:59:51.618785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 150 eligible frames\n2026-04-14T09:59:57.069345Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 80 frames, 12.2MB → 4.4MB (2.8x), 80 JPEGs deleted\n2026-04-14T10:00:04.665192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.2MB → 5.4MB (2.3x), 68 JPEGs deleted","depth":4,"value":"clipboard)\n2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames\n2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted\n2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)\n2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)\n2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)\n2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)\n2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)\n2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)\n2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)\n2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)\n2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)\n2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)\n2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)\n2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)\n2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)\n2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests\n2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)\n2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames\n2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted\n2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)\n2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames\n2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted\n2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)\n2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames\n2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted\n2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)\n2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted\n2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)\n2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)\n2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:19:54.331647Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:19:54.331585+00:00 (14d retention)\n2026-04-12T14:25:49.460879Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:47:08.896043Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T14:51:40.566736Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:51:40.566667+00:00 (14d retention)\n2026-04-12T15:04:41.463531Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T15:09:53.670591Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T15:09:53.687234Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T15:09:53.694692Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T15:09:54.069049Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T15:09:54.972151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=click)\n2026-04-12T15:10:00.918510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4593439385064446773, trigger=visual_change)\n2026-04-12T15:10:03.918707Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T15:11:30.984863Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:11:30.984842+00:00 (14d retention)\n2026-04-12T15:16:30.982686Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:16:30.982661+00:00 (14d retention)\n2026-04-12T15:21:30.980571Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:21:30.980551+00:00 (14d retention)\n2026-04-12T15:22:42.975270Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-12T15:22:45.011395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 3.1MB → 1.1MB (2.8x), 33 JPEGs deleted\n2026-04-12T15:26:30.978141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:26:30.978120+00:00 (14d retention)\n2026-04-12T15:27:45.265922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-12T15:27:49.938865Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 83 frames, 6.3MB → 0.1MB (58.2x), 83 JPEGs deleted\n2026-04-12T15:31:30.953991Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:31:30.953971+00:00 (14d retention)\n2026-04-12T15:32:50.166006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:32:55.707883Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 7.5MB → 0.1MB (70.1x), 99 JPEGs deleted\n2026-04-12T15:32:56.071976Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (3.0x), 3 JPEGs deleted\n2026-04-12T15:36:30.948421Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:36:30.948401+00:00 (14d retention)\n2026-04-12T15:37:56.337459Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 103 eligible frames\n2026-04-12T15:38:01.842312Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.0x), 98 JPEGs deleted\n2026-04-12T15:38:02.207918Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 3 frames, 0.2MB → 0.1MB (2.8x), 3 JPEGs deleted\n2026-04-12T15:41:30.945296Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:41:30.945274+00:00 (14d retention)\n2026-04-12T15:43:02.496758Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:43:08.031970Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (68.3x), 98 JPEGs deleted\n2026-04-12T15:43:09.583075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.5x), 26 JPEGs deleted\n2026-04-12T15:46:30.941625Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:46:30.941607+00:00 (14d retention)\n2026-04-12T15:48:09.854085Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 127 eligible frames\n2026-04-12T15:48:15.376242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.2x), 98 JPEGs deleted\n2026-04-12T15:48:16.986205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.0MB → 0.1MB (22.4x), 27 JPEGs deleted\n2026-04-12T15:51:30.931020Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:51:30.931+00:00 (14d retention)\n2026-04-12T15:53:17.140652Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 126 eligible frames\n2026-04-12T15:53:22.544303Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.5x), 98 JPEGs deleted\n2026-04-12T15:53:24.051282Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 2.0MB → 0.1MB (21.4x), 26 JPEGs deleted\n2026-04-12T15:56:30.903513Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T12:56:30.903491+00:00 (14d retention)\n2026-04-12T15:58:24.061857Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 107 eligible frames\n2026-04-12T15:58:29.565651Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (67.8x), 98 JPEGs deleted\n2026-04-12T15:58:30.163222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 0.5MB → 0.1MB (6.1x), 7 JPEGs deleted\n2026-04-12T16:01:30.898705Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:01:30.898688+00:00 (14d retention)\n2026-04-12T16:03:30.176572Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-12T16:03:35.702407Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.4MB → 0.1MB (66.5x), 98 JPEGs deleted\n2026-04-12T16:03:37.208567Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 1.9MB → 0.1MB (19.5x), 25 JPEGs deleted\n2026-04-12T16:06:30.893145Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:06:30.893123+00:00 (14d retention)\n2026-04-12T16:08:37.224128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 137 eligible frames\n2026-04-12T16:08:42.754922Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (55.1x), 98 JPEGs deleted\n2026-04-12T16:08:44.902888Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 2.9MB → 0.1MB (27.8x), 37 JPEGs deleted\n2026-04-12T16:11:30.884492Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:11:30.884475+00:00 (14d retention)\n2026-04-12T16:13:44.914274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 102 eligible frames\n2026-04-12T16:13:50.332990Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 7.6MB → 0.1MB (60.2x), 98 JPEGs deleted\n2026-04-12T16:13:50.582963Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.2MB → 0.1MB (1.9x), 2 JPEGs deleted\n2026-04-12T16:16:30.874710Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:16:30.874654+00:00 (14d retention)\n2026-04-12T16:18:50.598274Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 92 eligible frames\n2026-04-12T16:18:55.602978Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 7.0MB → 0.1MB (56.9x), 90 JPEGs deleted\n2026-04-12T16:21:30.868887Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:21:30.868843+00:00 (14d retention)\n2026-04-12T16:23:55.619078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 39 eligible frames\n2026-04-12T16:23:57.827626Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 2.9MB → 0.1MB (28.1x), 38 JPEGs deleted\n2026-04-12T16:25:51.808414Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=18550308951191011, trigger=visual_change)\n2026-04-12T16:25:55.859250Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-12T16:26:22.022550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=335681983743287612, trigger=visual_change)\n2026-04-12T16:26:30.862865Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:26:30.862859+00:00 (14d retention)\n2026-04-12T16:26:49.195853Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=visual_change)\n2026-04-12T16:26:50.724575Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5343690734172522381, trigger=clipboard)\n2026-04-12T16:26:58.277345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:26:59.647372Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=clipboard)\n2026-04-12T16:27:58.948426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3010912370653750266, trigger=visual_change)\n2026-04-12T16:28:57.842202Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-12T16:28:59.471378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 2.1MB → 0.1MB (19.7x), 27 JPEGs deleted\n2026-04-12T16:30:07.202386Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3216013508830929208, trigger=click)\n2026-04-12T16:30:55.852584Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-12T16:31:30.887381Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:31:30.887363+00:00 (14d retention)\n2026-04-12T16:31:49.004783Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:31:49.729537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=click)\n2026-04-12T16:31:55.091180Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4616856516066852268, trigger=visual_change)\n2026-04-12T16:32:38.955241Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:41.068172Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=clipboard)\n2026-04-12T16:32:42.939568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=click)\n2026-04-12T16:32:44.448998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6390325610652879158, trigger=visual_change)\n2026-04-12T16:32:46.133335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=click)\n2026-04-12T16:32:47.467019Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:32:47.909378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=clipboard)\n2026-04-12T16:33:06.479217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8449023476417186364, trigger=visual_change)\n2026-04-12T16:33:09.545186Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5503780454464997020, trigger=visual_change)\n2026-04-12T16:33:15.550145Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7389604070772900291, trigger=visual_change)\n2026-04-12T16:33:59.523675Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 12 eligible frames\n2026-04-12T16:34:00.275262Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 0.9MB → 0.1MB (9.2x), 11 JPEGs deleted\n2026-04-12T16:36:30.893415Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:36:30.893405+00:00 (14d retention)\n2026-04-12T16:37:02.339834Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-12T16:42:28.176895Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 54 eligible frames\n2026-04-12T16:42:31.234893Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 53 frames, 4.9MB → 1.5MB (3.4x), 53 JPEGs deleted\n2026-04-12T16:46:30.256919Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T13:46:30.256841+00:00 (14d retention)\n2026-04-12T16:58:23.782435Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T16:59:58.366015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 25 eligible frames\n2026-04-12T16:59:59.856243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 2.8MB → 0.5MB (5.8x), 24 JPEGs deleted\n2026-04-12T18:37:05.993577Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T18:39:53.607673Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T18:46:44.262699Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T15:46:44.262630+00:00 (14d retention)\n2026-04-12T18:55:18.717641Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-12T19:09:18.536900Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-12T20:13:29.785331Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T17:13:29.785272+00:00 (14d retention)\n2026-04-12T20:13:47.397970Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording\n2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)\n2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording\n2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1\n2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)\n2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6\n2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording\n2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording\n2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6\n2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1\n2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)\n2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)\n2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)\n2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)\n2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)\n2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)\n2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)\n2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)\n2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)\n2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)\n2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)\n2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)\n2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)\n2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)\n2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)\n2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)\n2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)\n2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)\n2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)\n2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)\n2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)\n2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)\n2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)\n2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)\n2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)\n2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)\n2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)\n2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)\n2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)\n2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)\n2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)\n2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)\n2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)\n2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)\n2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)\n2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)\n2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)\n2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)\n2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)\n2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)\n2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)\n2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)\n2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)\n2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)\n2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)\n2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)\n2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)\n2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)\n2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)\n2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)\n2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)\n2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)\n2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out\n2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)\n2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)\n2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)\n2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)\n2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)\n2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)\n2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)\n2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames\n2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)\n2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted\n2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted\n2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted\n2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)\n2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)\n2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames\n2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted\n2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)\n2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted\n2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)\n2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames\n2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted\n2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)\n2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)\n2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted\n2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted\n2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)\n2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames\n2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted\n2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted\n2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)\n2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames\n2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted\n2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted\n2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)\n2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames\n2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted\n2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)\n2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)\n2026-04-13T15:57:06.748688Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=1000 elapsed=1.158041625s\n2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames\n2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted\n2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)\n2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames\n2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted\n2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)\n2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames\n2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted\n2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)\n2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames\n2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted\n2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted\n2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)\n2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames\n2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted\n2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted\n2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)\n2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted\n2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted\n2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)\n2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:30:07.345631Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.0x), 98 JPEGs deleted\n2026-04-13T16:30:09.401035Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 4.2MB → 0.2MB (17.5x), 35 JPEGs deleted\n2026-04-13T16:30:58.877763Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:30:58.877747+00:00 (14d retention)\n2026-04-13T16:35:09.543901Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 123 eligible frames\n2026-04-13T16:35:15.118342Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (29.4x), 98 JPEGs deleted\n2026-04-13T16:35:16.544264Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 2.8MB → 0.2MB (13.7x), 23 JPEGs deleted\n2026-04-13T16:35:58.877807Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:35:58.877797+00:00 (14d retention)\n2026-04-13T16:38:16.074486Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9190773859099204307, trigger=click)\n2026-04-13T16:39:15.630281Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=visual_change)\n2026-04-13T16:39:18.164527Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T16:39:39.417651Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:39:46.483591Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T16:40:16.572113Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 142 eligible frames\n2026-04-13T16:40:21.964524Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.3x), 98 JPEGs deleted\n2026-04-13T16:40:23.872191Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-13T16:40:24.338496Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 5.1MB → 0.3MB (19.6x), 42 JPEGs deleted\n2026-04-13T16:40:58.876854Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:40:58.876845+00:00 (14d retention)\n2026-04-13T16:41:10.838114Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4963488946692588978, trigger=visual_change)\n2026-04-13T16:42:13.892340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5199349294477942535, trigger=click)\n2026-04-13T16:42:44.819070Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2884217071189902213, trigger=click)\n2026-04-13T16:45:24.413681Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 163 eligible frames\n2026-04-13T16:45:29.941955Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (33.1x), 98 JPEGs deleted\n2026-04-13T16:45:33.507323Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 7.6MB → 0.3MB (24.3x), 63 JPEGs deleted\n2026-04-13T16:45:58.885928Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:45:58.885879+00:00 (14d retention)\n2026-04-13T16:50:33.536731Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 117 eligible frames\n2026-04-13T16:50:39.528450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 12.0MB → 2.2MB (5.4x), 98 JPEGs deleted\n2026-04-13T16:50:41.016936Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.5MB → 1.6MB (2.2x), 17 JPEGs deleted\n2026-04-13T16:50:58.885615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:50:58.885607+00:00 (14d retention)\n2026-04-13T16:55:41.041166Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames\n2026-04-13T16:55:46.654516Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 17.3MB → 4.5MB (3.8x), 98 JPEGs deleted\n2026-04-13T16:55:48.802425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 7.0MB → 0.9MB (7.8x), 35 JPEGs deleted\n2026-04-13T16:55:58.885247Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:55:58.885238+00:00 (14d retention)\n2026-04-13T17:00:48.921394Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 125 eligible frames\n2026-04-13T17:00:54.499682Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 2.0MB (9.8x), 98 JPEGs deleted\n2026-04-13T17:00:56.069295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 5.0MB → 0.7MB (7.2x), 25 JPEGs deleted\n2026-04-13T17:00:58.884750Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:00:58.884741+00:00 (14d retention)\n2026-04-13T17:04:17.476028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:20.514684Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:23.559568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:29.620877Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:04:44.761227Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:21.254931Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:24.295008Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:27.336461Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:30.386176Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:42.486968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:51.582326Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:54.624396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:05:56.063515Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 172 eligible frames\n2026-04-13T17:05:58.849231Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:05:58.849225+00:00 (14d retention)\n2026-04-13T17:06:01.555232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.4MB (13.6x), 98 JPEGs deleted\n2026-04-13T17:06:05.597067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 72 frames, 14.3MB → 1.1MB (12.9x), 72 JPEGs deleted\n2026-04-13T17:06:09.702568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:06:58.426892Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=visual_change)\n2026-04-13T17:07:01.047902Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:07:12.921022Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3329654316747887579, trigger=click)\n2026-04-13T17:08:32.658411Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=visual_change)\n2026-04-13T17:08:33.461053Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:34.888152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1828895530282165448, trigger=click)\n2026-04-13T17:08:44.751908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6880399320930358557, trigger=visual_change)\n2026-04-13T17:08:47.811335Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5551774685991471183, trigger=visual_change)\n2026-04-13T17:08:59.877508Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3750487923867570316, trigger=visual_change)\n2026-04-13T17:09:05.917138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5193827678277969729, trigger=visual_change)\n2026-04-13T17:09:08.963248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1573230130233012243, trigger=visual_change)\n2026-04-13T17:09:27.538887Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=visual_change)\n2026-04-13T17:10:15.148423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2198924557410214150, trigger=click)\n2026-04-13T17:10:19.711447Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8529595713999975857, trigger=visual_change)\n2026-04-13T17:10:23.842094Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:10:58.846075Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:10:58.846061+00:00 (14d retention)\n2026-04-13T17:11:05.614778Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 133 eligible frames\n2026-04-13T17:11:11.080267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 19.5MB → 1.6MB (12.4x), 98 JPEGs deleted\n2026-04-13T17:11:13.049885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 6.6MB → 0.8MB (8.5x), 33 JPEGs deleted\n2026-04-13T17:14:28.187399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5634032665621410328, trigger=click)\n2026-04-13T17:15:58.842867Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:15:58.842852+00:00 (14d retention)\n2026-04-13T17:16:00.560201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3089258739618396828, trigger=click)\n2026-04-13T17:16:05.720267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-756028078299947006, trigger=click)\n2026-04-13T17:16:13.081624Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 84 eligible frames\n2026-04-13T17:16:17.891451Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 82 frames, 16.3MB → 1.7MB (9.4x), 82 JPEGs deleted\n2026-04-13T17:17:45.943910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7911837907515514222, trigger=click)\n2026-04-13T17:18:44.492158Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5928663278776159308, trigger=visual_change)\n2026-04-13T17:19:18.239507Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8963743573879133782, trigger=visual_change)\n2026-04-13T17:20:52.622485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=visual_change)\n2026-04-13T17:20:52.865628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:53.794741Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:55.173220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:56.419536Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6420472110783357773, trigger=click)\n2026-04-13T17:20:58.841572Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:20:58.841554+00:00 (14d retention)\n2026-04-13T17:21:17.914363Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T17:21:23.033357Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 19.3MB → 6.9MB (2.8x), 87 JPEGs deleted\n2026-04-13T17:22:17.281652Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8506419545576175835, trigger=visual_change)\n2026-04-13T17:22:24.174259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8506170850142559396, trigger=click)\n2026-04-13T17:24:29.375130Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1367698138829933492, trigger=click)\n2026-04-13T17:25:30.618046Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5264066362649694131, trigger=clipboard)\n2026-04-13T17:25:58.861117Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:25:58.861102+00:00 (14d retention)\n2026-04-13T17:26:07.783284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3389874276161121002, trigger=clipboard)\n2026-04-13T17:26:23.079232Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 43 eligible frames\n2026-04-13T17:26:25.533960Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 8.5MB → 1.4MB (5.9x), 42 JPEGs deleted\n2026-04-13T17:26:26.405342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4749965863260205632, trigger=click)\n2026-04-13T17:27:03.146806Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5798553087892232859, trigger=click)\n2026-04-13T17:30:23.856612Z INFO screenpipe_engine::server: api_usage_5min: 2 requests\n2026-04-13T17:30:58.861025Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:30:58.861012+00:00 (14d retention)\n2026-04-13T17:31:25.542075Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:31:29.155449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 13.1MB → 1.9MB (6.9x), 65 JPEGs deleted\n2026-04-13T17:31:53.487787Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8861777922848222919, trigger=click)\n2026-04-13T17:35:26.901256Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:29.203266Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=click)\n2026-04-13T17:35:31.520280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5026980759537816432, trigger=clipboard)\n2026-04-13T17:35:33.300160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T17:35:45.306897Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6087902347824858697, trigger=clipboard)\n2026-04-13T17:35:58.859672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:35:58.859656+00:00 (14d retention)\n2026-04-13T17:36:29.179810Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T17:36:32.011609Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 10.8MB → 1.7MB (6.2x), 49 JPEGs deleted\n2026-04-13T17:40:58.858490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:40:58.858471+00:00 (14d retention)\n2026-04-13T17:41:32.043222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T17:41:36.069242Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 16.1MB → 1.1MB (14.5x), 71 JPEGs deleted\n2026-04-13T17:42:15.596334Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4235966675435269325, trigger=click)\n2026-04-13T17:45:58.869276Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:45:58.869266+00:00 (14d retention)\n2026-04-13T17:46:36.092867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 66 eligible frames\n2026-04-13T17:46:39.758714Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 65 frames, 15.1MB → 1.0MB (15.3x), 65 JPEGs deleted\n2026-04-13T17:49:46.579982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8606465934501073324, trigger=click)\n2026-04-13T17:50:58.869493Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:50:58.869486+00:00 (14d retention)\n2026-04-13T17:51:39.783256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 16 eligible frames\n2026-04-13T17:51:40.758071Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 3.5MB → 0.4MB (9.1x), 15 JPEGs deleted\n2026-04-13T17:52:09.695481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:52:18.104878Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:20.446688Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:52:22.950263Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4700020112238551079, trigger=click)\n2026-04-13T17:55:58.869201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T14:55:58.869180+00:00 (14d retention)\n2026-04-13T17:56:40.787956Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-13T17:56:42.144760Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 5.1MB → 0.4MB (13.2x), 22 JPEGs deleted\n2026-04-13T17:57:54.358454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:57:58.419369Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:12.778123Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=click)\n2026-04-13T17:58:16.712796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:20.448642Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4773775936264703502, trigger=clipboard)\n2026-04-13T17:58:36.397921Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T17:58:39.343061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7884575463800473404, trigger=click)\n2026-04-13T18:00:55.845071Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-439578195712127451, trigger=click)\n2026-04-13T18:00:58.868418Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:00:58.868403+00:00 (14d retention)\n2026-04-13T18:01:42.187214Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-13T18:01:44.040254Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.2MB → 0.5MB (14.4x), 31 JPEGs deleted\n2026-04-13T18:03:22.816287Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-481145244361585685, trigger=click)\n2026-04-13T18:05:58.873688Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:05:58.873678+00:00 (14d retention)\n2026-04-13T18:06:44.077710Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-13T18:06:46.456870Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 9.6MB → 0.4MB (24.2x), 41 JPEGs deleted\n2026-04-13T18:10:58.873801Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:10:58.873743+00:00 (14d retention)\n2026-04-13T18:11:46.492855Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 38 eligible frames\n2026-04-13T18:11:48.658067Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 8.6MB → 0.8MB (11.3x), 37 JPEGs deleted\n2026-04-13T18:15:58.875133Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:15:58.875119+00:00 (14d retention)\n2026-04-13T18:16:48.694011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 27 eligible frames\n2026-04-13T18:16:50.273243Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 6.1MB → 0.4MB (15.6x), 26 JPEGs deleted\n2026-04-13T18:18:31.734321Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-04-13T18:23:08.990753Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:23:08.990735+00:00 (14d retention)\n2026-04-13T18:24:18.871885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:24:20.038791Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.2MB → 0.4MB (10.8x), 18 JPEGs deleted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T18:35:13.146239Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-04-13T18:35:13.149068Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-04-13T18:35:13.170962Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-04-13T18:35:13.680481Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-13T18:35:27.620608Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url (https://us.i.posthog.com/capture/)\n2026-04-13T18:36:17.152264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1184372696878099077, trigger=click)\n2026-04-13T18:36:28.363701Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:36:28.363689+00:00 (14d retention)\n2026-04-13T18:37:21.142467Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 10 eligible frames\n2026-04-13T18:37:21.905994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 2.1MB → 0.4MB (5.5x), 9 JPEGs deleted\n2026-04-13T18:37:36.639362Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6976444594554398738, trigger=click)\n2026-04-13T18:39:53.327516Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:41:28.358989Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:41:28.358952+00:00 (14d retention)\n2026-04-13T18:42:21.940046Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-13T18:46:28.358214Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:46:28.358197+00:00 (14d retention)\n2026-04-13T18:47:21.955151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 6 eligible frames\n2026-04-13T18:47:22.689470Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.2MB → 0.5MB (2.3x), 6 JPEGs deleted\n2026-04-13T18:48:30.117101Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8612826691778232576, trigger=click)\n2026-04-13T18:51:28.358332Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:51:28.358272+00:00 (14d retention)\n2026-04-13T18:52:22.720460Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T18:52:24.625362Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 7.5MB → 0.5MB (14.3x), 32 JPEGs deleted\n2026-04-13T18:53:26.194571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2525325065609490636, trigger=click)\n2026-04-13T18:54:48.394617Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T18:56:28.358108Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T15:56:28.358077+00:00 (14d retention)\n2026-04-13T18:57:24.630003Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 19 eligible frames\n2026-04-13T18:57:26.008482Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.3MB → 1.1MB (3.8x), 18 JPEGs deleted\n2026-04-13T19:01:28.309932Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:01:28.309902+00:00 (14d retention)\n2026-04-13T19:01:34.835096Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8845567138521432327, trigger=click)\n2026-04-13T19:02:26.033245Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 59 eligible frames\n2026-04-13T19:02:29.410795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 58 frames, 15.1MB → 2.4MB (6.3x), 58 JPEGs deleted\n2026-04-13T19:06:28.306223Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:06:28.306189+00:00 (14d retention)\n2026-04-13T19:07:29.443796Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-04-13T19:07:32.264873Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 49 frames, 9.3MB → 1.9MB (4.9x), 49 JPEGs deleted\n2026-04-13T19:09:21.780997Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2535583028595392832, trigger=click)\n2026-04-13T19:11:28.301542Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:11:28.301502+00:00 (14d retention)\n2026-04-13T19:12:32.301751Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 55 eligible frames\n2026-04-13T19:12:35.543171Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 54 frames, 8.4MB → 0.2MB (34.0x), 54 JPEGs deleted\n2026-04-13T19:15:28.279261Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3643209958340923733, trigger=click)\n2026-04-13T19:16:28.300071Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:16:28.300040+00:00 (14d retention)\n2026-04-13T19:17:35.879347Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-13T19:17:37.771162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 5.0MB → 0.2MB (21.2x), 32 JPEGs deleted\n2026-04-13T19:21:28.313672Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:21:28.313650+00:00 (14d retention)\n2026-04-13T19:21:43.867272Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:21:53.316112Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7726912391365776224, trigger=click)\n2026-04-13T19:22:37.824162Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 30 eligible frames\n2026-04-13T19:22:39.564867Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.5MB → 0.2MB (19.7x), 29 JPEGs deleted\n2026-04-13T19:23:58.293564Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:05.926037Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:07.100441Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:08.189505Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:09.316024Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:10.334454Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:11.039989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.279934Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:12.934012Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:13.905703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:14.688081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:16.790073Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:17.648048Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:18.648340Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:20.939136Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3870500721152908643, trigger=click)\n2026-04-13T19:24:32.085226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1677564857471996960, trigger=click)\n2026-04-13T19:24:52.669280Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5315255766850756707, trigger=click)\n2026-04-13T19:26:28.311385Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:26:28.311371+00:00 (14d retention)\n2026-04-13T19:27:39.600820Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-04-13T19:27:43.607748Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 71 frames, 10.7MB → 2.0MB (5.3x), 71 JPEGs deleted\n2026-04-13T19:29:29.337437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6191878184103635993, trigger=click)\n2026-04-13T19:30:53.305205Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-13T19:31:28.308892Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:31:28.308882+00:00 (14d retention)\n2026-04-13T19:32:39.123443Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:32:43.640042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-04-13T19:32:47.533673Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 69 frames, 10.8MB → 0.5MB (22.6x), 69 JPEGs deleted\n2026-04-13T19:32:50.924091Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1693584930482156986, trigger=click)\n2026-04-13T19:36:28.306590Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:36:28.306551+00:00 (14d retention)\n2026-04-13T19:37:47.886163Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 88 eligible frames\n2026-04-13T19:37:51.291730Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:37:52.768785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.5MB → 0.5MB (28.8x), 87 JPEGs deleted\n2026-04-13T19:37:57.364851Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366768294006797733, trigger=visual_change)\n2026-04-13T19:38:38.577300Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4736856628251450227, trigger=click)\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-strt\nzsh: command not found: sp-strt\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start \n[1] 21900\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-13T19:39:27.177326Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-13T19:39:29.590345Z WARN sqlx::query: summary=\"-- Partial index on …\" db.statement=\"\\n\\n-- Partial index on frames.elements_ref_frame_id to eliminate the full\\n-- table scan in the retention anchor-frame subquery.\\n--\\n-- The correlated subquery in delete_time_range_batch:\\n-- SELECT DISTINCT f.id FROM frames f\\n-- WHERE f.timestamp BETWEEN ?1 AND ?2\\n-- AND EXISTS (SELECT 1 FROM frames ref\\n-- WHERE ref.elements_ref_frame_id = f.id\\n-- AND ref.timestamp NOT BETWEEN ?1 AND ?2)\\n--\\n-- falls back to a full scan of `frames` on the inner EXISTS without this\\n-- index (elements_ref_frame_id was added in 20260318000000 without one).\\n-- Measured 5m55s per 1-hour retention batch on a 33k-frame DB, making\\n-- retention unusable on any non-trivial backlog.\\n--\\n-- With the index, the inner plan becomes:\\n-- SEARCH ref USING INDEX idx_frames_elements_ref_frame_id (elements_ref_frame_id=?)\\n-- and the same query runs in ~5ms.\\n--\\n-- Partial (WHERE elements_ref_frame_id IS NOT NULL) because only frames\\n-- that reference a dedup anchor are relevant here. Storage cost is\\n-- negligible -- single-digit MB/year for typical capture volume, and it\\n-- is the smallest index on the frames table by a wide margin.\\nCREATE INDEX IF NOT EXISTS idx_frames_elements_ref_frame_id ON frames(elements_ref_frame_id)\\nWHERE\\n elements_ref_frame_id IS NOT NULL;\\n\" rows_affected=0 rows_returned=0 elapsed=1.230052917s\n2026-04-13T19:39:29.593268Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-13T19:39:29.594665Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-13T19:39:29.594680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-13T19:39:29.595089Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-13T19:39:29.595024Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-13T19:39:29.595128Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-13T19:39:29.595223Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-13T19:39:29.595562Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-13T19:39:29.595770Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-13T19:39:29.596448Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-13T19:39:29.596584Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-13T19:39:29.596715Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-13T19:39:29.596827Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-13T19:39:29.596844Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-13T19:39:29.598802Z INFO screenpipe: starting UI event capture\n2026-04-13T19:39:29.598404Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-13T19:39:29.603432Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-13T19:39:29.609967Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-13T19:39:29.615106Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-13T19:39:29.630434Z INFO screenpipe_engine::ui_recorder: UI recording session started: faca997c-ce9a-477c-b5d0-e56e509585e9\n2026-04-13T19:39:29.630483Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-13T19:39:29.630562Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-12 16:39:29.630549 UTC to 2026-04-13 16:39:29.630549 UTC)\n2026-04-13T19:39:29.631025Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-13T19:39:29.637981Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-13T19:39:29.643829Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-13T19:39:29.788633Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3943 frame entries, coverage from 2026-04-12 16:39:29.630549 UTC\n2026-04-13T19:39:30.543977Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-13T19:39:30.544012Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-13T19:39:30.544060Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-13T19:39:31.016978Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-13T19:39:31.017036Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-13T19:39:31.017080Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-13T19:39:31.017114Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-13T19:39:32.207273Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-13T19:39:32.673392Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=7912, dur=47ms\n2026-04-13T19:39:32.704069Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-13T19:39:32.872035Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=7913, dur=108ms\n2026-04-13T19:39:34.636509Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-13T19:39:34.637200Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-13T19:39:44.339956Z WARN sqlx::query: summary=\"SELECT frames.id as frame_id, …\" db.statement=\"\\n\\nSELECT\\n frames.id as frame_id,\\n COALESCE(\\n frames.full_text,\\n ocr_text.text,\\n frames.accessibility_text,\\n ''\\n ) as ocr_text,\\n ocr_text.text_json,\\n frames.timestamp,\\n frames.name as frame_name,\\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\\n frames.offset_index,\\n frames.app_name,\\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\\n frames.window_name,\\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\\n GROUP_CONCAT(tags.name, ',') as tags,\\n frames.browser_url,\\n frames.focused\\nFROM\\n frames\\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\\nWHERE\\n 1 = 1\\n AND (\\n ?2 IS NULL\\n OR frames.timestamp >= ?2\\n )\\n AND (\\n ?3 IS NULL\\n OR frames.timestamp <= ?3\\n )\\n AND (\\n ?4 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\\n )\\n AND (\\n ?5 IS NULL\\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\\n )\\n AND (\\n ?6 IS NULL\\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\\n )\\n AND (\\n ?7 IS NULL\\n OR frames.machine_id = ?7\\n )\\n AND (\\n ?8 IS NULL\\n OR frames.focused = ?8\\n )\\n AND (\\n ?9 IS NULL\\n OR frames.name LIKE '%' || ?9 || '%'\\n )\\nGROUP BY\\n frames.id\\nORDER BY\\n frames.timestamp DESC\\nLIMIT\\n ?10 OFFSET ?11\\n\" rows_affected=0 rows_returned=5000 elapsed=1.608390416s\n2026-04-13T19:40:29.616115Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames\n2026-04-13T19:40:31.310725Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 0.2MB (11.1x), 16 JPEGs deleted\n2026-04-13T19:41:39.668138Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:41:40.367247Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8016967779645642766, trigger=click)\n2026-04-13T19:42:16.296737Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-96467039929937080, trigger=click)\n2026-04-13T19:42:34.936430Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5664644461248729071, trigger=visual_change)\n2026-04-13T19:44:29.627763Z INFO screenpipe_engine::server: api_usage_5min: 5 requests\n2026-04-13T19:45:04.634490Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:45:04.634462+00:00 (14d retention)\n2026-04-13T19:45:31.349267Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 20 eligible frames\n2026-04-13T19:45:32.543028Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 19 frames, 3.0MB → 0.3MB (9.9x), 19 JPEGs deleted\n2026-04-13T19:50:02.916584Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:02.918035Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6198286277822952673, trigger=click)\n2026-04-13T19:50:04.630322Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T16:50:04.630300+00:00 (14d retention)\n2026-04-13T19:50:32.575742Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-13T19:50:35.515577Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 46 frames, 6.6MB → 2.0MB (3.3x), 46 JPEGs deleted\n2026-04-13T19:50:36.330072Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.6MB (1.9x), 6 JPEGs deleted\n\n[1] + terminated npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 24316\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-14T09:23:18.095876Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-14T09:23:19.016665Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-14T09:23:19.018052Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-14T09:23:19.018065Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-14T09:23:19.018310Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-14T09:23:19.018350Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-14T09:23:19.018329Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-14T09:23:19.018781Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-14T09:23:19.018887Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-14T09:23:19.018976Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-14T09:23:19.019743Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-14T09:23:19.021386Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-14T09:23:19.021709Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-14T09:23:19.021835Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-14T09:23:19.021852Z 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 │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\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 │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\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-04-14T09:23:19.025225Z INFO screenpipe: starting UI event capture\n2026-04-14T09:23:19.024042Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-14T09:23:19.034460Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-14T09:23:19.035048Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-14T09:23:19.041739Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-14T09:23:19.057947Z INFO screenpipe_engine::ui_recorder: UI recording session started: c7672ba6-54dd-483e-9512-949b51a2bd49\n2026-04-14T09:23:19.058064Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-14T09:23:19.058114Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-13 06:23:19.058103 UTC to 2026-04-14 06:23:19.058103 UTC)\n2026-04-14T09:23:19.062532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-14T09:23:19.066551Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-14T09:23:19.080775Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-14T09:23:19.697314Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3756 frame entries, coverage from 2026-04-13 06:23:19.058103 UTC\n2026-04-14T09:23:19.985445Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-14T09:23:19.985474Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-14T09:23:19.985515Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-14T09:23:20.492622Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-14T09:23:20.492664Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-14T09:23:20.492694Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-14T09:23:20.492726Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-14T09:23:21.313246Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-14T09:23:22.387611Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-14T09:23:22.954948Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=8037, dur=1082ms\n2026-04-14T09:23:23.488645Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=8038, dur=1012ms\n2026-04-14T09:23:24.063719Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-14T09:23:24.063951Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-14T09:24:19.745739Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 108 eligible frames\n2026-04-14T09:24:23.350916Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 51 frames, 6.7MB → 2.6MB (2.6x), 51 JPEGs deleted\n2026-04-14T09:24:26.531119Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 10.6MB → 3.9MB (2.7x), 55 JPEGs deleted\n2026-04-14T09:28:19.055456Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:28:54.061635Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:28:54.061630+00:00 (14d retention)\n2026-04-14T09:29:26.561625Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n2026-04-14T09:33:54.056707Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:33:54.056680+00:00 (14d retention)\n2026-04-14T09:34:26.581293Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 11 eligible frames\n2026-04-14T09:34:27.123519Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 4 frames, 0.9MB → 0.6MB (1.6x), 4 JPEGs deleted\n2026-04-14T09:34:28.092531Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames, 1.4MB → 0.8MB (1.8x), 7 JPEGs deleted\n2026-04-14T09:38:54.029363Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)\n2026-04-14T09:39:28.082314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible frames\n2026-04-14T09:39:29.343941Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.0MB → 0.7MB (6.0x), 18 JPEGs deleted\n2026-04-14T09:39:30.750250Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted\n2026-04-14T09:41:13.184908Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6982821907865222085, trigger=click)\n2026-04-14T09:41:19.221590Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6812429097673958383, trigger=visual_change)\n2026-04-14T09:42:17.435758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6365427964931292073, trigger=click)\n2026-04-14T09:42:33.656193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4160452185621303946, trigger=click)\n2026-04-14T09:42:46.140088Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2304266842869419917, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-14T09:43:54.022784Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:43:54.022742+00:00 (14d retention)\n2026-04-14T09:44:07.036758Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:16.412880Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6150758636940404341, trigger=visual_change)\n2026-04-14T09:44:31.467140Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-04-14T09:44:32.220816Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.7MB → 0.2MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:33.112790Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.5MB → 0.4MB (6.9x), 10 JPEGs deleted\n2026-04-14T09:44:49.822061Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=visual_change)\n2026-04-14T09:44:58.085483Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1260068684416652810, trigger=click)\n2026-04-14T09:45:11.008075Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=visual_change)\n2026-04-14T09:45:27.976077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:28.005455Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6037618265436815739, trigger=click)\n2026-04-14T09:45:33.771220Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6619028446781713005, trigger=click)\n2026-04-14T09:46:17.937329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:20.967541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6551069930100399172, trigger=visual_change)\n2026-04-14T09:46:39.124248Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=visual_change)\n2026-04-14T09:46:48.114315Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:46:48.134347Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=8975630290856622014, trigger=click)\n2026-04-14T09:48:19.010549Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-14T09:48:28.225785Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:28.241367Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2746019670363252567, trigger=click)\n2026-04-14T09:48:35.474701Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2313032521647048085, trigger=click)\n2026-04-14T09:48:44.297355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=529628650036307666, trigger=click)\n2026-04-14T09:48:54.016503Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:48:54.016484+00:00 (14d retention)\n2026-04-14T09:49:33.136435Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 87 eligible frames\n2026-04-14T09:49:35.411222Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 33 frames, 8.9MB → 1.6MB (5.4x), 33 JPEGs deleted\n2026-04-14T09:49:39.291290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 10.8MB → 4.1MB (2.6x), 52 JPEGs deleted\n2026-04-14T09:52:10.262616Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4590837745933313988, trigger=click)\n2026-04-14T09:52:25.201982Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:28.245911Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:37.345773Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:40.396144Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4590837745933313988, trigger=visual_change)\n2026-04-14T09:52:54.098628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:52:54.108786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2540129927862717858, trigger=click)\n2026-04-14T09:53:13.724192Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:16.763953Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:19.793338Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:25.860403Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:28.887448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:31.919424Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:44.021891Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6850664184897375859, trigger=visual_change)\n2026-04-14T09:53:53.090419Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:54.010522Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:53:54.010512+00:00 (14d retention)\n2026-04-14T09:53:56.129621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:53:59.154578Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4595186536147244130, trigger=visual_change)\n2026-04-14T09:54:05.213884Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:08.251183Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:14.329171Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6448776714852722509, trigger=visual_change)\n2026-04-14T09:54:39.747828Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 186 eligible frames\n2026-04-14T09:54:41.500859Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2366998612440519548, trigger=visual_change)\n2026-04-14T09:54:44.836247Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 86 frames, 14.4MB → 3.3MB (4.3x), 86 JPEGs deleted\n2026-04-14T09:54:51.018273Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.3MB → 5.7MB (2.5x), 98 JPEGs deleted\n2026-04-14T09:58:35.439655Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7018639353123991036, trigger=click)\n2026-04-14T09:58:53.989016Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:58:53.989006+00:00 (14d retention)\n2026-04-14T09:59:51.618785Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 150 eligible frames\n2026-04-14T09:59:57.069345Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 80 frames, 12.2MB → 4.4MB (2.8x), 80 JPEGs deleted\n2026-04-14T10:00:04.665192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.2MB → 5.4MB (2.3x), 68 JPEGs deleted","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"role_description":"text"}]...
|
-6150758636940404341
|
-8869373171955034755
|
visual_change
|
accessibility
|
NULL
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
NULL
|
|
8697
|
169
|
4
|
2026-04-14T07:01:21.452075+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150081452_m2.jpg...
|
Dia
|
Work: Meet - Daily - Pla…
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
Mute Aneliya Angelova's microphone
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform...
|
[{"role":"AXHeading","text" [{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.2589844,"top":1.0,"width":0.0703125,"height":-0.068750024},"role_description":"heading"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":14,"bounds":{"left":0.2589844,"top":1.0,"width":0.0703125,"height":-0.06944442},"role_description":"text"},{"role":"AXPopUpButton","text":"People","depth":15,"bounds":{"left":0.7296875,"top":1.0,"width":0.023046875,"height":-0.061805606},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":18,"bounds":{"left":0.7453125,"top":1.0,"width":0.002734375,"height":-0.068750024},"role_description":"text"},{"role":"AXPopUpButton","text":"Take notes with Gemini","depth":15,"bounds":{"left":0.7558594,"top":1.0,"width":0.0140625,"height":-0.061805606},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":19,"bounds":{"left":0.75742185,"top":1.0,"width":0.0125,"height":-0.068750024},"role_description":"text"},{"role":"AXStaticText","text":"Gemini","depth":19,"bounds":{"left":0.7746094,"top":1.0,"width":0.0125,"height":-0.068750024},"role_description":"text"},{"role":"AXButton","text":"Gemini","depth":18,"bounds":{"left":0.7734375,"top":1.0,"width":0.01328125,"height":-0.0625},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Unpin Nikolay Yankov's presentation from your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":15,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Yankov","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in new window","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Enter Full Screen","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Pin Stefka Stoyanova to your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else","depth":15,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Stefka Stoyanova","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Nikolay Yankov to your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Yankov's microphone","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Yankov","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Steliyan Georgiev to your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Steliyan Georgiev's microphone","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Steliyan Georgiev","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Nikolay Ivanov to your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else","depth":15,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Ivanov","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Aneliya Angelova to your main screen","depth":15,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Aneliya Angelova's microphone","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Aneliya Angelova","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"role_description":"text"},{"role":"AXButton","text":"You’re continuously framed","depth":15,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Backgrounds and effects","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Lukas Kovalik","depth":16,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:01","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"AM","depth":10,"role_description":"text"},{"role":"AXHeading","text":"Daily - Platform","depth":10,"role_description":"heading"},{"role":"AXStaticText","text":"Daily - Platform","depth":13,"role_description":"text"},{"role":"AXPopUpButton","text":"Audio settings","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":14,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Video settings","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov is presenting","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":14,"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting details","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova joined","depth":4,"bounds":{"left":0.23554687,"top":1.0,"width":0.000390625,"height":-0.050694466},"role_description":"text"},{"role":"AXTextArea","text":"meet.google.com / Daily - Platform","depth":5,"bounds":{"left":0.2957031,"top":1.0,"width":0.12148438,"height":-0.02569449},"automation_id":"navigationBarAssistantBarTextField","value":"meet.google.com / Daily - Platform","role_description":"text entry area","is_focused":false}]...
|
3796331739634639311
|
-3390734344583914664
|
visual_change
|
hybrid
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
Mute Aneliya Angelova's microphone
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform
FirefoxFileEditViewHistoryBookmarks)HookmalProfilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3→0 i • Daily - Platform • 4 m left100% 4l8• Tue 14 Apr 10:01:21- | + Automatic Zoom ~Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platform- New laoSearch bookmarksv booknarks100l0atSprint BoardSRD Queuecithuav E Bookmarks Menu> C Mozilla FirefoxOther BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
|
8699
|
168
|
3
|
2026-04-14T07:01:26.200760+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150086200_m1.jpg...
|
Dia
|
Work: Meet - Daily - Pla…
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
You can't unmute someone else
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Your microphone is on.
meet.google.com / Daily - Platform...
|
[{"role":"AXHeading","text" [{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.045833334,"top":0.11,"width":0.125,"height":0.022222223},"role_description":"heading"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":14,"bounds":{"left":0.045833334,"top":0.11111111,"width":0.125,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"People","depth":15,"bounds":{"left":0.8826389,"top":0.09888889,"width":0.04097222,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":18,"bounds":{"left":0.91041666,"top":0.11,"width":0.0048611113,"height":0.016666668},"role_description":"text"},{"role":"AXPopUpButton","text":"Take notes with Gemini","depth":15,"bounds":{"left":0.9291667,"top":0.09888889,"width":0.025,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":19,"bounds":{"left":0.93194443,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXStaticText","text":"Gemini","depth":19,"bounds":{"left":0.9625,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Gemini","depth":18,"bounds":{"left":0.9604167,"top":0.1,"width":0.023611112,"height":0.037777778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Unpin Nikolay Yankov's presentation from your main screen","depth":15,"bounds":{"left":0.32708332,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":15,"bounds":{"left":0.3548611,"top":0.50777775,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Yankov","depth":16,"bounds":{"left":0.38541666,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":14,"bounds":{"left":0.62083334,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in new window","depth":15,"bounds":{"left":0.65416664,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Enter Full Screen","depth":15,"bounds":{"left":0.6875,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Pin Stefka Stoyanova to your main screen","depth":15,"bounds":{"left":0.75208336,"top":0.25777778,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else","depth":15,"bounds":{"left":0.7798611,"top":0.25555557,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Stefka Stoyanova","depth":16,"bounds":{"left":0.81041664,"top":0.25777778,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"bounds":{"left":0.7430556,"top":0.36666667,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Nikolay Yankov to your main screen","depth":15,"bounds":{"left":0.88125,"top":0.25777778,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Yankov's microphone","depth":15,"bounds":{"left":0.90902776,"top":0.25555557,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Yankov","depth":16,"bounds":{"left":0.93958336,"top":0.25777778,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.87222224,"top":0.36666667,"width":0.077083334,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Steliyan Georgiev to your main screen","depth":15,"bounds":{"left":0.75208336,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Steliyan Georgiev's microphone","depth":15,"bounds":{"left":0.7798611,"top":0.50777775,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Steliyan Georgiev","depth":16,"bounds":{"left":0.81041664,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"bounds":{"left":0.7430556,"top":0.6188889,"width":0.09097222,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Nikolay Ivanov to your main screen","depth":15,"bounds":{"left":0.88125,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else","depth":15,"bounds":{"left":0.90902776,"top":0.50777775,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Nikolay Ivanov","depth":16,"bounds":{"left":0.93958336,"top":0.51,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"bounds":{"left":0.87222224,"top":0.6188889,"width":0.075,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Pin Aneliya Angelova to your main screen","depth":15,"bounds":{"left":0.75208336,"top":0.76222223,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else","depth":15,"bounds":{"left":0.7798611,"top":0.76,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Aneliya Angelova","depth":16,"bounds":{"left":0.81041664,"top":0.76222223,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"bounds":{"left":0.7430556,"top":0.8711111,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXButton","text":"You’re continuously framed","depth":15,"bounds":{"left":0.8798611,"top":0.76,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Backgrounds and effects","depth":15,"bounds":{"left":0.91041666,"top":0.76,"width":0.030555556,"height":0.04888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Lukas Kovalik","depth":16,"bounds":{"left":0.9409722,"top":0.76222223,"width":0.027777778,"height":0.044444446},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.87222224,"top":0.8711111,"width":0.06944445,"height":0.022222223},"role_description":"text"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9618056,"top":0.86777776,"width":0.018055556,"height":0.028888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:01","depth":10,"bounds":{"left":0.020833334,"top":0.93777776,"width":0.027083334,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"AM","depth":10,"bounds":{"left":0.05138889,"top":0.93777776,"width":0.018055556,"height":0.022222223},"role_description":"text"},{"role":"AXHeading","text":"Daily - Platform","depth":10,"bounds":{"left":0.08611111,"top":0.90444446,"width":0.08194444,"height":0.08888889},"role_description":"heading"},{"role":"AXStaticText","text":"Daily - Platform","depth":13,"bounds":{"left":0.08611111,"top":0.93777776,"width":0.08194444,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Audio settings","depth":14,"bounds":{"left":0.30416667,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off microphone","depth":14,"bounds":{"left":0.33194444,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Video settings","depth":14,"bounds":{"left":0.37083334,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":14,"bounds":{"left":0.3986111,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov is presenting","depth":12,"bounds":{"left":0.4375,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"bounds":{"left":0.48194444,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":11,"bounds":{"left":0.5263889,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":11,"bounds":{"left":0.5708333,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":14,"bounds":{"left":0.61527777,"top":0.9222222,"width":0.025,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":11,"bounds":{"left":0.6458333,"top":0.9222222,"width":0.05,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting details","depth":12,"bounds":{"left":0.8875,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"bounds":{"left":0.92083335,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"bounds":{"left":0.95416665,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Your microphone is on.","depth":4,"bounds":{"left":0.004166667,"top":0.08111111,"width":0.00069444446,"height":0.0011111111},"role_description":"text"},{"role":"AXTextArea","text":"meet.google.com / Daily - Platform","depth":5,"bounds":{"left":0.11111111,"top":0.04111111,"width":0.21597221,"height":0.033333335},"automation_id":"navigationBarAssistantBarTextField","value":"meet.google.com / Daily - Platform","role_description":"text entry area","is_focused":false}]...
|
1959710066326107556
|
54238311987534616
|
click
|
hybrid
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
You can't unmute someone else
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Your microphone is on.
meet.google.com / Daily - Platform
S(CDiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)C SRD-677С зy 19798(l Service-oDe Foet, AnvCost | CM/37?selectedissue=JY-18909• ProjectsE SSHEl Dutadog* ClaudePlatform TeamQ Search board200$ 39-19240 / Д Jy-18900READY FOR DEV 1[Part2) Automated reports with Ask JiminnyooaesnoTxwiexceed Fontawesomepackage limitsMASNTENANEDReady for Dev8-20564 1 П ****=Descriptionwrich thoy neco them.We want to allow our users to automate the execution of their AJA prompts in order to save time and have them ready• admins and manages should be able to automate reports based on their Panorama prompts and saved searches• the report should be generated in a paf - use a lightly branded one this time - F https://www.figma.com/design/jXcUe1y9mx5Fiz8KosLAUn/Project-Phoenix?node-id=7691-616888t«cLuF71P72T14xBsQ-1 [Connect your Figma accoun• l the customer hasn t adoco a orano logo tien use tie vimniny logo• once the report is ready it should be shared with the users over emall - F https://www.figma.com/design//XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=12208-230648t=nJK629FloDyaWRYR-1 |Connect your Figma account• If no one is selected then the report will only be shared with the person who created it• ensure the reports has a proper structure and formatting - headings, bold etc. - take examples from the Exec Reports•crisure the teport nas lnxs to otroack when examples are useol• in the beginning of each report have a brief section for "Data Srouce' and '"Objective' - take the Exec summary reportfor example• data source should cover what data has been analysedhowroposimnnya• show the report in the Al Reports page with a special logo - Prolest Phoscixonly the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download itActions10:01 AM Daily - Platform‹$0(abl| Daily - Platform • 4 m left100% C47 8• Tue 14 Apr 10:01:25Chat8•C Ct: Depe• Actions s• Dependel• Far Depel0 Tasks|7 Insights & CoachinD Dev- UX# Improve StoryDetailsAssignee32 Stellyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeui@ Open with VS Code|3 branches32 commits2uenewOuid TauirxReleasesProduction2 See all deploymentsComponentsPlatformSub-ProductAdd optionsAl BookmarksGroup: QueriesDEPLOYuie ouring tofeature fiag reieaseDeployedXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 1 • **** =No such column "Type' onentity 'Event"DeployedE -20384 05 #1 **** =®Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployedH-200%0 # ****=Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay Ivanov:Aneliya Angelova16:01Lukas Kovalik...
|
NULL
|
|
8702
|
168
|
5
|
2026-04-14T07:01:40.660013+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150100660_m1.jpg...
|
Dia
|
Work: Meet - Daily - Pla…
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Your microphone is off.
meet.google.com / Daily - Platform...
|
[{"role":"AXHeading","text" [{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.045833334,"top":0.11,"width":0.125,"height":0.022222223},"role_description":"heading"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":14,"bounds":{"left":0.045833334,"top":0.11111111,"width":0.125,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"People","depth":15,"bounds":{"left":0.8826389,"top":0.09888889,"width":0.04097222,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":18,"bounds":{"left":0.91041666,"top":0.11,"width":0.0048611113,"height":0.016666668},"role_description":"text"},{"role":"AXPopUpButton","text":"Take notes with Gemini","depth":15,"bounds":{"left":0.9291667,"top":0.09888889,"width":0.025,"height":0.04},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":19,"bounds":{"left":0.93194443,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXStaticText","text":"Gemini","depth":19,"bounds":{"left":0.9625,"top":0.11,"width":0.022222223,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Gemini","depth":18,"bounds":{"left":0.9604167,"top":0.1,"width":0.023611112,"height":0.037777778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":14,"bounds":{"left":0.62083334,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in new window","depth":15,"bounds":{"left":0.65416664,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Enter Full Screen","depth":15,"bounds":{"left":0.6875,"top":0.7922222,"width":0.027777778,"height":0.044444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"bounds":{"left":0.7430556,"top":0.36666667,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.87222224,"top":0.36666667,"width":0.077083334,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"bounds":{"left":0.7430556,"top":0.6188889,"width":0.09097222,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"bounds":{"left":0.87222224,"top":0.6188889,"width":0.075,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"bounds":{"left":0.7430556,"top":0.8711111,"width":0.08888889,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.87222224,"top":0.8711111,"width":0.06944445,"height":0.022222223},"role_description":"text"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9618056,"top":0.86777776,"width":0.018055556,"height":0.028888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:01","depth":10,"bounds":{"left":0.020833334,"top":0.93777776,"width":0.027083334,"height":0.022222223},"role_description":"text"},{"role":"AXStaticText","text":"AM","depth":10,"bounds":{"left":0.05138889,"top":0.93777776,"width":0.018055556,"height":0.022222223},"role_description":"text"},{"role":"AXHeading","text":"Daily - Platform","depth":10,"bounds":{"left":0.08611111,"top":0.90444446,"width":0.08194444,"height":0.08888889},"role_description":"heading"},{"role":"AXStaticText","text":"Daily - Platform","depth":13,"bounds":{"left":0.08611111,"top":0.93777776,"width":0.08194444,"height":0.022222223},"role_description":"text"},{"role":"AXPopUpButton","text":"Audio settings","depth":14,"bounds":{"left":0.30416667,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":14,"bounds":{"left":0.33194444,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Video settings","depth":14,"bounds":{"left":0.37083334,"top":0.9222222,"width":0.06111111,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":14,"bounds":{"left":0.3986111,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov is presenting","depth":12,"bounds":{"left":0.4375,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"bounds":{"left":0.48194444,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":11,"bounds":{"left":0.5263889,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":11,"bounds":{"left":0.5708333,"top":0.9222222,"width":0.03888889,"height":0.053333335},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":14,"bounds":{"left":0.61527777,"top":0.9222222,"width":0.025,"height":0.053333335},"role_description":"pop up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":11,"bounds":{"left":0.6458333,"top":0.9222222,"width":0.05,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting details","depth":12,"bounds":{"left":0.8875,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"bounds":{"left":0.92083335,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"bounds":{"left":0.95416665,"top":0.9222222,"width":0.033333335,"height":0.053333335},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Your microphone is off.","depth":4,"bounds":{"left":0.004166667,"top":0.08111111,"width":0.00069444446,"height":0.0011111111},"role_description":"text"},{"role":"AXTextArea","text":"meet.google.com / Daily - Platform","depth":5,"bounds":{"left":0.11111111,"top":0.04111111,"width":0.21597221,"height":0.033333335},"automation_id":"navigationBarAssistantBarTextField","value":"meet.google.com / Daily - Platform","role_description":"text entry area","is_focused":false}]...
|
5564909847619150166
|
5832296603347645240
|
visual_change
|
accessibility
|
NULL
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Your microphone is off.
meet.google.com / Daily - Platform...
|
NULL
|
|
8704
|
169
|
6
|
2026-04-14T07:01:41.561772+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150101561_m2.jpg...
|
Firefox
|
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf — Work...
|
1
|
app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d0 app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Toggle Sidebar
Toggle Sidebar
Previous
Previous
Next
Next
1
of 3
Zoom Out
Zoom Out
Zoom In
Zoom In
Comment
Comment
Add signature
Add signature
Highlight
Highlight
Text
Text
Draw
Draw
Add or edit images
Add or edit images
Print
Print
Save
Save
Tools
Tools
Ask Jiminny Test Report
8 Apr 2026
Based on the analysis of recent customer interactions, Jiminny is currently being utilized as a
strategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of the
key themes and trends observed across our accounts.
Driving Adoption and Coaching
Clients are increasingly moving beyond basic call recording to leverage Jiminny for structured
performance improvement:
Manager Accountability:
Many teams are shifting coaching responsibility to managers by
https://app.staging.jiminny.com/playback/299f6fe6-d94f-4a57-9aee-0d72ea7cf85f?apFrom=217
using automated nudges to highlight specific calls for review.
Peer-to-Peer Learning:
https://app.staging.jiminny.com/playback/4c90dfe7-0d83-4692-9dcf-9be85e5ecdd5?apFrom=161
Organizations like Insuritas and PipeDrive are creating "best of"
https://app.staging.jiminny.com/playback/69e57e78-c6fd-43f5-adf6-34c5721010df?apFrom=1855
playlists to share successful objection handling and sales techniques, fostering a culture of
reflection.
Self-Coaching:
https://app.staging.jiminny.com/playback/ad9442a4-564f-4106-83da-3109534cdcff?apFrom=1213
Several clients, including Funding Circle and Edozo, are implementing self-
https://app.staging.jiminny.com/playback/c9e7c974-6001-4997-a390-e50ab5d51508?apFrom=474
coaching workflows where reps identify their own calls for review based on specific criteria
like urgency or discovery quality.
CRM Integration and Data Accuracy
Seamless integration with CRM platforms remains a primary value driver for our users:
Salesforce & HubSpot:
https://app.staging.jiminny.com/playback/927d43d2-bc41-4eba-a3ca-fb11e52266e2?apFrom=268
https://app.staging.jiminny.com/playback/34431fe9-3211-4187-937a-c8df8f6da36c?apFrom=1001
Clients such as Productsup, Unbiased, and PostHog prioritize deep
https://app.staging.jiminny.com/playback/41710312-388f-4d77-b47d-0878dbfe8ec5?apFrom=534
CRM integration to ensure Jiminny serves as a single source of truth.
Technical Troubleshooting:
We are actively addressing integration challenges, such as
https://app.staging.jiminny.com/playback/b703b339-7cca-4a78-ad68-aa76c5496422?apFrom=226
Salesforce mapping errors and Notetaker configuration issues, to ensure data flows correctly
https://app.staging.jiminny.com/playback/7ec29505-fa65-475f-b221-ef3f1fcf6fea?apFrom=116
between systems.
Roadmap Requests:
There is significant interest in upcoming features, including native Zoho
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
integration and automated field mapping for Salesforce.
https://app.staging.jiminny.com/playback/9d971fbe-7e32-4243-97ea-d37bc8f8315c?apFrom=1517
Strategic AI Utilization
The "Ask Jiminny" feature and AI-driven insights are becoming central to how teams manage
their pipeline:
Deal Visibility:
https://app.staging.jiminny.com/playback/06de5e10-1e9b-43de-8839-85d179633dfb?apFrom=479
https://app.staging.jiminny.com/playback/b0d29a10-aa12-414e-8039-79d805c7803d?apFrom=858
Users at Specright and Cision are using "Ask Jiminny" at the opportunity level
to generate summaries, identify risks, and determine next steps without needing to listen to
every call.
•
•
•
•
•
•
•
Competitive Intelligence:
https://app.staging.jiminny.com/playback/204c4327-517d-4f0b-b055-d661e4b9094e?apFrom=1888
Teams are configuring competitor trackers and automated alerts to
https://app.staging.jiminny.com/playback/57b92b82-8674-492a-876e-1947275032e3?apFrom=492
gain insights into market trends and churn risks.
Implementation and Expansion
Trial Strategies:
We are successfully using flexible trial structures, such as 90-day paid trials
https://app.staging.jiminny.com/playback/fab460ca-ac4b-48b4-8617-6349da36b32f?apFrom=853
https://app.staging.jiminny.com/playback/098c5d08-16e6-4e4b-9128-4204561a4d65?apFrom=924
or proof-of-concept migrations, to help prospects evaluate Jiminny against incumbents like
Gong.
Scaling Usage:
https://app.staging.jiminny.com/playback/8c45d5b8-3842-4baf-821b-453fc4898b72?apFrom=435
Existing customers like Nourish Care and Les Mills are expanding their usage
https://app.staging.jiminny.com/playback/f3362bd7-af1c-4208-b358-3cdab49a6c73?apFrom=130
across multiple departments, including Customer Success and Service Delivery, to consolidate
their tech stacks.
While adoption is strong, some clients—such as CrossPurpose—face challenges with team
https://app.staging.jiminny.com/playback/a277399f-739a-40f3-b8e9-c56c314b4b38?apFrom=230
bandwidth and require a more targeted, "crawl-walk-run" approach to implementation to ensure
long-term success.
•
•
•...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"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.015625,"top":0.14930555,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.17430556,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.22638889,"width":0.08710937,"height":0.022222223},"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.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"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.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"bounds":{"left":0.09804688,"top":0.060416665,"width":0.03125,"height":0.013194445},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"bounds":{"left":0.09804688,"top":0.060416665,"width":0.03125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"bounds":{"left":0.20976563,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"bounds":{"left":0.096875,"top":0.08680555,"width":0.12617187,"height":0.022222223},"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Toggle Sidebar","depth":11,"bounds":{"left":0.23007813,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"Toggle Sidebar (document contains thumbnails/outline/attachments/layers)","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toggle Sidebar","depth":13,"bounds":{"left":0.23867187,"top":0.05625,"width":0.015625,"height":0.019444445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Previous","depth":11,"bounds":{"left":0.26484376,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"Previous Page","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Previous","depth":13,"bounds":{"left":0.2734375,"top":0.05625,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Next","depth":11,"bounds":{"left":0.27695313,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"Next Page","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Next","depth":13,"bounds":{"left":0.28554687,"top":0.05625,"width":0.009375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":12,"bounds":{"left":0.30507812,"top":0.05138889,"width":0.001953125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of 3","depth":11,"bounds":{"left":0.3125,"top":0.05138889,"width":0.00859375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom Out","depth":11,"bounds":{"left":0.56953126,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Zoom Out","depth":13,"bounds":{"left":0.578125,"top":0.05625,"width":0.01171875,"height":0.019444445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom In","depth":11,"bounds":{"left":0.5816406,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Zoom In","depth":13,"bounds":{"left":0.5902344,"top":0.05625,"width":0.01171875,"height":0.019444445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Comment","depth":13,"bounds":{"left":0.89335936,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Comment","depth":15,"bounds":{"left":0.9019531,"top":0.05625,"width":0.019921875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add signature","depth":13,"bounds":{"left":0.9046875,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add signature","depth":15,"bounds":{"left":0.91328126,"top":0.05625,"width":0.019140625,"height":0.019444445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Highlight","depth":13,"bounds":{"left":0.9160156,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Highlight","depth":15,"bounds":{"left":0.92460936,"top":0.05625,"width":0.018359374,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Text","depth":13,"bounds":{"left":0.9273437,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Text","depth":15,"bounds":{"left":0.9359375,"top":0.05625,"width":0.00859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Draw","depth":13,"bounds":{"left":0.9386719,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Draw","depth":15,"bounds":{"left":0.9472656,"top":0.05625,"width":0.010546875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or edit images","depth":13,"bounds":{"left":0.95,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or edit images","depth":15,"bounds":{"left":0.9585937,"top":0.05625,"width":0.014453125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Print","depth":11,"bounds":{"left":0.96367186,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Print","depth":13,"bounds":{"left":0.9722656,"top":0.05625,"width":0.009765625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save","depth":11,"bounds":{"left":0.975,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Save","depth":13,"bounds":{"left":0.98359376,"top":0.05625,"width":0.009765625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Tools","depth":12,"bounds":{"left":0.9886719,"top":0.046527777,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Tools","depth":14,"bounds":{"left":0.99726564,"top":0.05625,"width":0.002734363,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ask Jiminny Test Report","depth":13,"bounds":{"left":0.5175781,"top":0.54375,"width":0.18867187,"height":0.031944446},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8 Apr 2026","depth":13,"bounds":{"left":0.58085936,"top":0.5875,"width":0.062109374,"height":0.023611112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the analysis of recent customer interactions, Jiminny is currently being utilized as a","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"strategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of the","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"key themes and trends observed across our accounts.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Driving Adoption and Coaching","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Clients are increasingly moving beyond basic call recording to leverage Jiminny for structured","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"performance improvement:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Manager Accountability:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Many teams are shifting coaching responsibility to managers by","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/299f6fe6-d94f-4a57-9aee-0d72ea7cf85f?apFrom=217","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"using automated nudges to highlight specific calls for review.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Peer-to-Peer Learning:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/4c90dfe7-0d83-4692-9dcf-9be85e5ecdd5?apFrom=161","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Organizations like Insuritas and PipeDrive are creating \"best of\"","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/69e57e78-c6fd-43f5-adf6-34c5721010df?apFrom=1855","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"playlists to share successful objection handling and sales techniques, fostering a culture of","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reflection.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Self-Coaching:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/ad9442a4-564f-4106-83da-3109534cdcff?apFrom=1213","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Several clients, including Funding Circle and Edozo, are implementing self-","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/c9e7c974-6001-4997-a390-e50ab5d51508?apFrom=474","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"coaching workflows where reps identify their own calls for review based on specific criteria","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"like urgency or discovery quality.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRM Integration and Data Accuracy","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Seamless integration with CRM platforms remains a primary value driver for our users:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce & HubSpot:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/927d43d2-bc41-4eba-a3ca-fb11e52266e2?apFrom=268","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/34431fe9-3211-4187-937a-c8df8f6da36c?apFrom=1001","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Clients such as Productsup, Unbiased, and PostHog prioritize deep","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/41710312-388f-4d77-b47d-0878dbfe8ec5?apFrom=534","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRM integration to ensure Jiminny serves as a single source of truth.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Technical Troubleshooting:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We are actively addressing integration challenges, such as","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/b703b339-7cca-4a78-ad68-aa76c5496422?apFrom=226","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Salesforce mapping errors and Notetaker configuration issues, to ensure data flows correctly","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/7ec29505-fa65-475f-b221-ef3f1fcf6fea?apFrom=116","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"between systems.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Roadmap Requests:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"There is significant interest in upcoming features, including native Zoho","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"integration and automated field mapping for Salesforce.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/9d971fbe-7e32-4243-97ea-d37bc8f8315c?apFrom=1517","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Strategic AI Utilization","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The \"Ask Jiminny\" feature and AI-driven insights are becoming central to how teams manage","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"their pipeline:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal Visibility:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/06de5e10-1e9b-43de-8839-85d179633dfb?apFrom=479","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/b0d29a10-aa12-414e-8039-79d805c7803d?apFrom=858","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users at Specright and Cision are using \"Ask Jiminny\" at the opportunity level","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to generate summaries, identify risks, and determine next steps without needing to listen to","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every call.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Competitive Intelligence:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/204c4327-517d-4f0b-b055-d661e4b9094e?apFrom=1888","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams are configuring competitor trackers and automated alerts to","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/57b92b82-8674-492a-876e-1947275032e3?apFrom=492","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"gain insights into market trends and churn risks.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implementation and Expansion","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trial Strategies:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We are successfully using flexible trial structures, such as 90-day paid trials","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/fab460ca-ac4b-48b4-8617-6349da36b32f?apFrom=853","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/098c5d08-16e6-4e4b-9128-4204561a4d65?apFrom=924","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"or proof-of-concept migrations, to help prospects evaluate Jiminny against incumbents like","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gong.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scaling Usage:","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/8c45d5b8-3842-4baf-821b-453fc4898b72?apFrom=435","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Existing customers like Nourish Care and Les Mills are expanding their usage","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/f3362bd7-af1c-4208-b358-3cdab49a6c73?apFrom=130","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"across multiple departments, including Customer Success and Service Delivery, to consolidate","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"their tech stacks.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"While adoption is strong, some clients—such as CrossPurpose—face challenges with team","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.staging.jiminny.com/playback/a277399f-739a-40f3-b8e9-c56c314b4b38?apFrom=230","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"bandwidth and require a more targeted, \"crawl-walk-run\" approach to implementation to ensure","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"long-term success.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8188073704889657247
|
-9132603998420241001
|
click
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Toggle Sidebar
Toggle Sidebar
Previous
Previous
Next
Next
1
of 3
Zoom Out
Zoom Out
Zoom In
Zoom In
Comment
Comment
Add signature
Add signature
Highlight
Highlight
Text
Text
Draw
Draw
Add or edit images
Add or edit images
Print
Print
Save
Save
Tools
Tools
Ask Jiminny Test Report
8 Apr 2026
Based on the analysis of recent customer interactions, Jiminny is currently being utilized as a
strategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of the
key themes and trends observed across our accounts.
Driving Adoption and Coaching
Clients are increasingly moving beyond basic call recording to leverage Jiminny for structured
performance improvement:
Manager Accountability:
Many teams are shifting coaching responsibility to managers by
https://app.staging.jiminny.com/playback/299f6fe6-d94f-4a57-9aee-0d72ea7cf85f?apFrom=217
using automated nudges to highlight specific calls for review.
Peer-to-Peer Learning:
https://app.staging.jiminny.com/playback/4c90dfe7-0d83-4692-9dcf-9be85e5ecdd5?apFrom=161
Organizations like Insuritas and PipeDrive are creating "best of"
https://app.staging.jiminny.com/playback/69e57e78-c6fd-43f5-adf6-34c5721010df?apFrom=1855
playlists to share successful objection handling and sales techniques, fostering a culture of
reflection.
Self-Coaching:
https://app.staging.jiminny.com/playback/ad9442a4-564f-4106-83da-3109534cdcff?apFrom=1213
Several clients, including Funding Circle and Edozo, are implementing self-
https://app.staging.jiminny.com/playback/c9e7c974-6001-4997-a390-e50ab5d51508?apFrom=474
coaching workflows where reps identify their own calls for review based on specific criteria
like urgency or discovery quality.
CRM Integration and Data Accuracy
Seamless integration with CRM platforms remains a primary value driver for our users:
Salesforce & HubSpot:
https://app.staging.jiminny.com/playback/927d43d2-bc41-4eba-a3ca-fb11e52266e2?apFrom=268
https://app.staging.jiminny.com/playback/34431fe9-3211-4187-937a-c8df8f6da36c?apFrom=1001
Clients such as Productsup, Unbiased, and PostHog prioritize deep
https://app.staging.jiminny.com/playback/41710312-388f-4d77-b47d-0878dbfe8ec5?apFrom=534
CRM integration to ensure Jiminny serves as a single source of truth.
Technical Troubleshooting:
We are actively addressing integration challenges, such as
https://app.staging.jiminny.com/playback/b703b339-7cca-4a78-ad68-aa76c5496422?apFrom=226
Salesforce mapping errors and Notetaker configuration issues, to ensure data flows correctly
https://app.staging.jiminny.com/playback/7ec29505-fa65-475f-b221-ef3f1fcf6fea?apFrom=116
between systems.
Roadmap Requests:
There is significant interest in upcoming features, including native Zoho
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
integration and automated field mapping for Salesforce.
https://app.staging.jiminny.com/playback/9d971fbe-7e32-4243-97ea-d37bc8f8315c?apFrom=1517
Strategic AI Utilization
The "Ask Jiminny" feature and AI-driven insights are becoming central to how teams manage
their pipeline:
Deal Visibility:
https://app.staging.jiminny.com/playback/06de5e10-1e9b-43de-8839-85d179633dfb?apFrom=479
https://app.staging.jiminny.com/playback/b0d29a10-aa12-414e-8039-79d805c7803d?apFrom=858
Users at Specright and Cision are using "Ask Jiminny" at the opportunity level
to generate summaries, identify risks, and determine next steps without needing to listen to
every call.
•
•
•
•
•
•
•
Competitive Intelligence:
https://app.staging.jiminny.com/playback/204c4327-517d-4f0b-b055-d661e4b9094e?apFrom=1888
Teams are configuring competitor trackers and automated alerts to
https://app.staging.jiminny.com/playback/57b92b82-8674-492a-876e-1947275032e3?apFrom=492
gain insights into market trends and churn risks.
Implementation and Expansion
Trial Strategies:
We are successfully using flexible trial structures, such as 90-day paid trials
https://app.staging.jiminny.com/playback/fab460ca-ac4b-48b4-8617-6349da36b32f?apFrom=853
https://app.staging.jiminny.com/playback/098c5d08-16e6-4e4b-9128-4204561a4d65?apFrom=924
or proof-of-concept migrations, to help prospects evaluate Jiminny against incumbents like
Gong.
Scaling Usage:
https://app.staging.jiminny.com/playback/8c45d5b8-3842-4baf-821b-453fc4898b72?apFrom=435
Existing customers like Nourish Care and Les Mills are expanding their usage
https://app.staging.jiminny.com/playback/f3362bd7-af1c-4208-b358-3cdab49a6c73?apFrom=130
across multiple departments, including Customer Success and Service Delivery, to consolidate
their tech stacks.
While adoption is strong, some clients—such as CrossPurpose—face challenges with team
https://app.staging.jiminny.com/playback/a277399f-739a-40f3-b8e9-c56c314b4b38?apFrom=230
bandwidth and require a more targeted, "crawl-walk-run" approach to implementation to ensure
long-term success.
•
•
•...
|
NULL
|
|
8705
|
168
|
7
|
2026-04-14T07:01:42.600253+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150102600_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 Insights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesPTooUeoT7 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% K28 • Tue 14 Apr 10:01:42ChatDepende• Far Depel•ux.Al BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 •.•*=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_10082 |1 • ****= 2No such column "Type' onentity 'Event"DeployedE -20384 05 #1 **** =®Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 -20614 05 12 «*** = |:Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:18Lukas Kovalik...
|
NULL
|
-3205706679850471698
|
NULL
|
click
|
ocr
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 Insights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesPTooUeoT7 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% K28 • Tue 14 Apr 10:01:42ChatDepende• Far Depel•ux.Al BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 •.•*=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_10082 |1 • ****= 2No such column "Type' onentity 'Event"DeployedE -20384 05 #1 **** =®Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 -20614 05 12 «*** = |:Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:18Lukas Kovalik...
|
NULL
|
|
8706
|
169
|
7
|
2026-04-14T07:01:42.581670+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150102581_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3• 40 l6l• | Daily - Platform • 4mleft A 100% C &• Tue 14 Apr 10:01:42Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platform+ New labnokmareQ Search bffokmarksv booknarks100l0atSprint BoardSRD Queue•Githuav E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks- | + Automatic Zoom ~Ask Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
-5080367489325635546
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3• 40 l6l• | Daily - Platform • 4mleft A 100% C &• Tue 14 Apr 10:01:42Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platform+ New labnokmareQ Search bffokmarksv booknarks100l0atSprint BoardSRD Queue•Githuav E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks- | + Automatic Zoom ~Ask Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
|
8708
|
169
|
9
|
2026-04-14T07:01:46.617450+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150106617_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv 3o0knarks 100 oa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types Lv eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/pecfcp0BFiHnzVnhBKre.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignoreS0 bbl• | Daily - Platform - 4 m leftA100%∞• Tue 14 Apr 10:01:46• 2 | 203 viewed|• Awaltino aporovaliVlewedwu t tnnyie te matmstcuct ti tu pc шso uovtorasmuvves ull vores orooukter oc uvvronsker at tade en reoort. rvk1. cr cuforhandler inden for marines, salags og fiskeri? Tryk 2. Er du forhandler af vores andreproduktert Irvk 3. Mar du sp uootorasm uobesl cll Takturer elleruootonsker at komme 1 koncaкtmed uuutakonomiatde 1nden? Trvk 4. Fller trvk 5 tor at komme til recentionen."*"speaker": "239220800","text": "Hvad er det.""speaker": "239220801","text": "du taler med?""speaker": "239220800","text": "Det m\u00e5 du meget gerne. Det vil iea fornemme.""speaker": 239220801,"text": "Yes, lad mig lige finde nogle, s\u00e5 er jeg sikker p\u00e5, at... S\u00e5 dukan skrive til den mail. der hedder Heinrich. s\u00e5 H-E-I-N-R-I-C-H.""speaker": "239220800","text": "Yes.""speaker": "239220801'."text": "Punktum. 0g s\u00e5 Rygaard, R-Y-G-A-A-R-D."35"Speaker: "239220800"text": "Ja.""speaker": "239220801","text": "Punktum Nielsen.""speaker": "239220800","text": "Lige ud af landeveien?""speaker": "239220801","text": "Yes, snabbelaqqarmin.com""toyt':"Garmin.com?""speaker": "239220801",...
|
NULL
|
-3326496376063654962
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv 3o0knarks 100 oa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types Lv eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/pecfcp0BFiHnzVnhBKre.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignoreS0 bbl• | Daily - Platform - 4 m leftA100%∞• Tue 14 Apr 10:01:46• 2 | 203 viewed|• Awaltino aporovaliVlewedwu t tnnyie te matmstcuct ti tu pc шso uovtorasmuvves ull vores orooukter oc uvvronsker at tade en reoort. rvk1. cr cuforhandler inden for marines, salags og fiskeri? Tryk 2. Er du forhandler af vores andreproduktert Irvk 3. Mar du sp uootorasm uobesl cll Takturer elleruootonsker at komme 1 koncaкtmed uuutakonomiatde 1nden? Trvk 4. Fller trvk 5 tor at komme til recentionen."*"speaker": "239220800","text": "Hvad er det.""speaker": "239220801","text": "du taler med?""speaker": "239220800","text": "Det m\u00e5 du meget gerne. Det vil iea fornemme.""speaker": 239220801,"text": "Yes, lad mig lige finde nogle, s\u00e5 er jeg sikker p\u00e5, at... S\u00e5 dukan skrive til den mail. der hedder Heinrich. s\u00e5 H-E-I-N-R-I-C-H.""speaker": "239220800","text": "Yes.""speaker": "239220801'."text": "Punktum. 0g s\u00e5 Rygaard, R-Y-G-A-A-R-D."35"Speaker: "239220800"text": "Ja.""speaker": "239220801","text": "Punktum Nielsen.""speaker": "239220800","text": "Lige ud af landeveien?""speaker": "239220801","text": "Yes, snabbelaqqarmin.com""toyt':"Garmin.com?""speaker": "239220801",...
|
NULL
|
|
8711
|
168
|
9
|
2026-04-14T07:01:55.916485+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150115916_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMrds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 Insights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesPTooUeoT2 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% K8 • Tue 14 Apr 10:01:55ChatDepende• Far Depel•ux.Group: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 •.•*=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 |1 • ** =No such column "Type' onentity 'Event"Deployed0-20384 05 11 ****=|Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 -20614 05 12 «*** = |:Al BookmarksStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:31Lukas Kovalik...
|
NULL
|
-2941472019448460647
|
NULL
|
click
|
ocr
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMrds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 Insights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesPTooUeoT2 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% K8 • Tue 14 Apr 10:01:55ChatDepende• Far Depel•ux.Group: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 •.•*=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 |1 • ** =No such column "Type' onentity 'Event"Deployed0-20384 05 11 ****=|Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 -20614 05 12 «*** = |:Al BookmarksStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:31Lukas Kovalik...
|
NULL
|
|
8712
|
169
|
11
|
2026-04-14T07:01:55.916483+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150115916_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv*booknarks 100loa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [v eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/nufEcZ0BFiHnzVnhTar9.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignore•:< 40 ll | Daily - Platform • 4m left100% C4• • Tue 14 Apr 10:01:55• 2 1 203 viewed|Awallind aporovali+228 UUUUU|Viewedokay, cool, let's ao that. ana, un, just, um, l'm just doudle-checking, you re pasea ovenEstonia. So you're not qoing to pay the VAT, which is, which is also nice because here in the UKit would be \ubba34,500 plus 20%. So that's a nice saving tor you. So let me get that set up.And just so you know, I'm going to send you the invoice and I'll talk you through it because,because I'm based in the Uk 1t automaticauly sets to puus VAl. out I'ul show vou how vou removethe VAT as well. Okay, uh, so this would just take me a moment. Give me one second.""Speaker: "230820405"text": "And it goes to the company if possible.""speaker": "238826408","text": "You want it as a company receipt? Yeah, yeah, that's tine. I'll show you how wedo that as well. Um, and you're doing a fractional to board advisor program? Okay, cool. So, um,I've just sent over the invoice that's gone to the Gmall one. Um, so let me know when you cansee that and open it up, and I'll show you how we do the business receipt, and I'll show you howune, un. we take the vai ott Tor vou as weul.'55"speaker": "238826409","text": "Okay, I got the email.":+ ++ +"speaker": "238826408","text": "You've got it. Okay, let me know when you can open that up and you can see theinvoice.""speaker": "238826409","text": "I see it.""speaker": "238826408","text": "Okay, cool. So first thing you need to do, do you see where it says, um, there'sTwo ontlons. you can do a convanv recelor or an inozvioual recelot, can vou culck on the recelotwhich says company, please?""speaker": "238820409,"text": "Yeah, I see it.""speaker": "238826408","text": "Okay, and then do you see where it says legal name and it's got your name there?""speaker": "238826409","text": "Yeah.""speaker": "238826408,"text": "So keep your name in and then put a space with a little dash, and then if you put...
|
NULL
|
3967488378696864813
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv*booknarks 100loa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [v eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/nufEcZ0BFiHnzVnhTar9.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignore•:< 40 ll | Daily - Platform • 4m left100% C4• • Tue 14 Apr 10:01:55• 2 1 203 viewed|Awallind aporovali+228 UUUUU|Viewedokay, cool, let's ao that. ana, un, just, um, l'm just doudle-checking, you re pasea ovenEstonia. So you're not qoing to pay the VAT, which is, which is also nice because here in the UKit would be \ubba34,500 plus 20%. So that's a nice saving tor you. So let me get that set up.And just so you know, I'm going to send you the invoice and I'll talk you through it because,because I'm based in the Uk 1t automaticauly sets to puus VAl. out I'ul show vou how vou removethe VAT as well. Okay, uh, so this would just take me a moment. Give me one second.""Speaker: "230820405"text": "And it goes to the company if possible.""speaker": "238826408","text": "You want it as a company receipt? Yeah, yeah, that's tine. I'll show you how wedo that as well. Um, and you're doing a fractional to board advisor program? Okay, cool. So, um,I've just sent over the invoice that's gone to the Gmall one. Um, so let me know when you cansee that and open it up, and I'll show you how we do the business receipt, and I'll show you howune, un. we take the vai ott Tor vou as weul.'55"speaker": "238826409","text": "Okay, I got the email.":+ ++ +"speaker": "238826408","text": "You've got it. Okay, let me know when you can open that up and you can see theinvoice.""speaker": "238826409","text": "I see it.""speaker": "238826408","text": "Okay, cool. So first thing you need to do, do you see where it says, um, there'sTwo ontlons. you can do a convanv recelor or an inozvioual recelot, can vou culck on the recelotwhich says company, please?""speaker": "238820409,"text": "Yeah, I see it.""speaker": "238826408","text": "Okay, and then do you see where it says legal name and it's got your name there?""speaker": "238826409","text": "Yeah.""speaker": "238826408,"text": "So keep your name in and then put a space with a little dash, and then if you put...
|
NULL
|
|
8715
|
169
|
13
|
2026-04-14T07:01:59.946891+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150119946_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8bookmhlePlatform Sprint 1 Q2 - Platform TeaQ Search bookmarks@ Jy 19798 evaluation for ai activ(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)Service-Desk - Queues - Platformv*booknarks 100loa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla FirefoxOther Bookmarks+ New Tabjiminny / prophet &<> Code© Issues82 Pull requests 6 Agents Actions # Projects 00 Wiki ® Security and quality 20 Insights ộs Settings® On April 24 we'll start using GitHub Copilot interaction data for Al model training unless you opt out. Review this update and manage your preferences in your GitHub account settings.Jy 19798 evaluation for ai activity types #468 °8? Opennikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types @Conversation 3a Commits 9E Checks 3E Files changed 203"O All commits -Q Filter files...® This page has been optimized for large pull requests. Some browser features (like Find on Page or Select All) may not work as expected.• E eval_output/ai_activity_type/eval…..•_ ground_truthv...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_-E4rcp0Bd4RvtuaTN2RY. json Laa -0,0 +1,4 @> inputv E src/evalendpoints.py* eval-ai-activity-type.pyE gitignore<40 ll • | Daily - Platform • 4m leftA100% CS8 • Tue 14 Apr 10:01:59Q Type to search+-v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7067cZ0Bd4RvtuaT1GTC.json L... @@ -0,0 +1,4 c• Awaiting approvalCode -Preview) -+25,671 ш0000O 2/203 viewedSubmit rgaiewSwitch to single file mode+4 UUUU._Viewed+ ("ai_activity_type_reasoning": "Both Connectd rep (Jake Chweidan) and prospect (Andrew Thomas)participated and call duration 1s 33+ minutes, exceeding 5 minutes; therefore the criteria tor'Meeting Sat' are met.","ai_activity_type": "Meeting Sat"+4 0000• Viewed+ {"ai_activity_type_reasoning": "Vendor rep Toby Firkins (Connectd) and prospect Chris Lockyerboth attended, and call duration is 12 minutes 11 seconds (>5 minutes), satisfying bothcriteria.",+ "ai activity type": "Meeting Sat"4v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json [**• @d -0,0 +1,4 Ccv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_807ncZ0Bd4RvtuaTumTS.json L... @ -0,0 +1,4 @@+4 UUUU• Viewed"ai_activity_type_reasoning": "Both a Connectd rep (Alex Pertwee) and the prospect (Dan Hyde)attended the call, and the call duration was 33 minutes 41 seconds, which is longer than 5minuces tuzol4meeting the criterta.,"ai_activity_type": "Meeting Sat"+ 3Viewed"ai activity type reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir calling Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matches...
|
NULL
|
-3127662283793150860
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8bookmhlePlatform Sprint 1 Q2 - Platform TeaQ Search bookmarks@ Jy 19798 evaluation for ai activ(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)Service-Desk - Queues - Platformv*booknarks 100loa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla FirefoxOther Bookmarks+ New Tabjiminny / prophet &<> Code© Issues82 Pull requests 6 Agents Actions # Projects 00 Wiki ® Security and quality 20 Insights ộs Settings® On April 24 we'll start using GitHub Copilot interaction data for Al model training unless you opt out. Review this update and manage your preferences in your GitHub account settings.Jy 19798 evaluation for ai activity types #468 °8? Opennikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types @Conversation 3a Commits 9E Checks 3E Files changed 203"O All commits -Q Filter files...® This page has been optimized for large pull requests. Some browser features (like Find on Page or Select All) may not work as expected.• E eval_output/ai_activity_type/eval…..•_ ground_truthv...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_-E4rcp0Bd4RvtuaTN2RY. json Laa -0,0 +1,4 @> inputv E src/evalendpoints.py* eval-ai-activity-type.pyE gitignore<40 ll • | Daily - Platform • 4m leftA100% CS8 • Tue 14 Apr 10:01:59Q Type to search+-v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7067cZ0Bd4RvtuaT1GTC.json L... @@ -0,0 +1,4 c• Awaiting approvalCode -Preview) -+25,671 ш0000O 2/203 viewedSubmit rgaiewSwitch to single file mode+4 UUUU._Viewed+ ("ai_activity_type_reasoning": "Both Connectd rep (Jake Chweidan) and prospect (Andrew Thomas)participated and call duration 1s 33+ minutes, exceeding 5 minutes; therefore the criteria tor'Meeting Sat' are met.","ai_activity_type": "Meeting Sat"+4 0000• Viewed+ {"ai_activity_type_reasoning": "Vendor rep Toby Firkins (Connectd) and prospect Chris Lockyerboth attended, and call duration is 12 minutes 11 seconds (>5 minutes), satisfying bothcriteria.",+ "ai activity type": "Meeting Sat"4v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json [**• @d -0,0 +1,4 Ccv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_807ncZ0Bd4RvtuaTumTS.json L... @ -0,0 +1,4 @@+4 UUUU• Viewed"ai_activity_type_reasoning": "Both a Connectd rep (Alex Pertwee) and the prospect (Dan Hyde)attended the call, and the call duration was 33 minutes 41 seconds, which is longer than 5minuces tuzol4meeting the criterta.,"ai_activity_type": "Meeting Sat"+ 3Viewed"ai activity type reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir calling Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matches...
|
NULL
|
|
8716
|
168
|
11
|
2026-04-14T07:02:01.190394+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150121190_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 iInsights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesProduction7 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% <28 • Tue 14 Apr 10:02:00ChatDepende• Far Depel•ux.Al BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 |1 • ** =No such column "Type' onentity 'Event"Deployed0 -20384 05 11 ****=|Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 _20614 05 12 «** = |:Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:36Lukas Kovalik...
|
NULL
|
-8179743696843456778
|
NULL
|
click
|
ocr
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8 -20564 1T.ees=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is goodi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 [QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:01 AM Daily - PlatformCI: DepeActionss• Tusts7 iInsights & CoachinD Dev# Improve StoryDetailsAssignee32 Steliyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitszuenereOuid TauirxReleasesProduction7 See all deploymentsComponentsPlatformSub-ProductAdd optionsDaily - Platform • 4 m left100% <28 • Tue 14 Apr 10:02:00ChatDepende• Far Depel•ux.Al BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 |1 • ** =No such column "Type' onentity 'Event"Deployed0 -20384 05 11 ****=|Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 _20614 05 12 «** = |:Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:36Lukas Kovalik...
|
NULL
|
|
8718
|
169
|
15
|
2026-04-14T07:02:05.442283+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150125442_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesWindowH FirefoxFileEoitViewHistoryBookmarksProfilesWindowHelpPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ X(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8w conversclion 3o commits 9ty checks 3E Fies changed 203HookmalQ Search bookmarksv booknarks100loaSprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla FirefoxOther Bookmarks" All commits• Fliter Tiles...~ E eval_output/ai_activity_type/eval…….> D ground_truth> inputv — srcleval* endpoints.pyeval-ai-activity-type.py₫) aitianore© This page has been optimized for large pull requests. Some browser features (like Find on Page or Select All) may nov ...ut/ai activity type/eval datasets/v2-from-logs-replayable/ground truth/qt -E4rcp0Bd4RvtuaTN2RY. ison [L••• @@ -0,0 +1,4 cav ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7067cZ0Bd4RvtuaT1GTC. json [ed -,0t1,4 CgV ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json L... @a -0,0 +1,4 @v ...ut/ai activity type/eval datasets/v2-from-loqs-replayable/ground truth/qt 807ncZ0Bd4RvtuaTumTs. ison [... @@ -0,0 +1,4 cv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8E6-cZ0Bd4RvtuaThmSx.json L0a -0,0 +1,4 cFinish your reviewwurlePreviewLeave a comment<40 ll © | Daily - Platform • 3m leftA100% C 8• Tue 14 Apr 10:02:05+20.0/ UUUUUI• 2 | 203 viewedSuomit reviewto single file mode] Viewed[Andrew Thomas)criteria for@ Paste, drop, or click to add filescommentsuomit deneral Teedoacx wirnour exolicir aporoval.O ApproveSubmit feedback and approve merging these changes.• Request changesSubmit feedback suggesting changes."ai_activity_type": "Meeting Sat"CancelSubmit review seJ Viewedunris Lockver1g both+4 UUUU._ Viewed+ €"ai activity type reasoning": "Both a Connectd rep (Alex Pertwee) and the prospect (Dan Hyde)attended the call, and the call duration was 33 minutes 41 seconds, which is longer than 5minutes\u2014meeting the criteria.","ai_activity_type": "Meeting Sat"+4 _ Viewed"ai_ activity_type_reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir callina Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matchesan outbound cold cale to book a demo.,"a1_activity_type": "Outbound Phone Call"+}+4 UUUULViewed"ai activity_ type_reasoning": "Call metadata: 57-second call, vendor sales director Jake Bishopoutoound to a contact at nanna Instrunenus Luo la manutacturino condany, No transcrior contentsShort scheduled call likely an initial outreach/cold qualification attempt rather than discovery,...
|
NULL
|
-2894672857716990207
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesWindowH FirefoxFileEoitViewHistoryBookmarksProfilesWindowHelpPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ X(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8w conversclion 3o commits 9ty checks 3E Fies changed 203HookmalQ Search bookmarksv booknarks100loaSprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla FirefoxOther Bookmarks" All commits• Fliter Tiles...~ E eval_output/ai_activity_type/eval…….> D ground_truth> inputv — srcleval* endpoints.pyeval-ai-activity-type.py₫) aitianore© This page has been optimized for large pull requests. Some browser features (like Find on Page or Select All) may nov ...ut/ai activity type/eval datasets/v2-from-logs-replayable/ground truth/qt -E4rcp0Bd4RvtuaTN2RY. ison [L••• @@ -0,0 +1,4 cav ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7067cZ0Bd4RvtuaT1GTC. json [ed -,0t1,4 CgV ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json L... @a -0,0 +1,4 @v ...ut/ai activity type/eval datasets/v2-from-loqs-replayable/ground truth/qt 807ncZ0Bd4RvtuaTumTs. ison [... @@ -0,0 +1,4 cv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8E6-cZ0Bd4RvtuaThmSx.json L0a -0,0 +1,4 cFinish your reviewwurlePreviewLeave a comment<40 ll © | Daily - Platform • 3m leftA100% C 8• Tue 14 Apr 10:02:05+20.0/ UUUUUI• 2 | 203 viewedSuomit reviewto single file mode] Viewed[Andrew Thomas)criteria for@ Paste, drop, or click to add filescommentsuomit deneral Teedoacx wirnour exolicir aporoval.O ApproveSubmit feedback and approve merging these changes.• Request changesSubmit feedback suggesting changes."ai_activity_type": "Meeting Sat"CancelSubmit review seJ Viewedunris Lockver1g both+4 UUUU._ Viewed+ €"ai activity type reasoning": "Both a Connectd rep (Alex Pertwee) and the prospect (Dan Hyde)attended the call, and the call duration was 33 minutes 41 seconds, which is longer than 5minutes\u2014meeting the criteria.","ai_activity_type": "Meeting Sat"+4 _ Viewed"ai_ activity_type_reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir callina Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matchesan outbound cold cale to book a demo.,"a1_activity_type": "Outbound Phone Call"+}+4 UUUULViewed"ai activity_ type_reasoning": "Call metadata: 57-second call, vendor sales director Jake Bishopoutoound to a contact at nanna Instrunenus Luo la manutacturino condany, No transcrior contentsShort scheduled call likely an initial outreach/cold qualification attempt rather than discovery,...
|
NULL
|
|
8721
|
169
|
17
|
2026-04-14T07:02:08.445442+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150128445_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv booknarks 100l0a1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inout& src/evalendpoints.py• eval-ai-activity-type.pyE gitignorev ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json [v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_807ncZ0Bd4RvtuaTumTs.json L•••∞a -0,0 +1,4 cav ..ut/ai activity tvoe/eval datasets/v2-from-logs-replavable/around truth/at 8E6-cZ0Bd4RvtuaThmSx, ison rC... @@ -0,0 +1,4 cv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8k7mcZ0Bd4RvtuaT02Rf.json [.•• @a -0,0 +1,4 cav ..ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8U7VcZ0Bd4RvtuaTOWRt.jsondc00+1,4ccv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_904Lcp0Bd4RvtuaTyGTO.json L.•• @ -0,0 +1,4 c‹90 hl• | Daily - Platform • 3m leftA100% CS•8 • Tue 14 Apr 10:02:08• 2 1 203 viewed• Awallind aporovallSubmit review+4 UUULViewed+ }+4 -000• Viewed"ai_activity_type_reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir calling Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matchesan outbound cold call to book a demo.","ai activity tvpe": "Outbound Phone Call"+ }+4 0000• Viewed"ai_activity_type_reasoning": "Call metadata: 57-second call, vendor sales director Jake Bishopoutbound to a contact at Hanna Instruments Ltd (a manufacturing company). No transcript content.Short scheduled call likely an initial outreach/cold qualification attempt rather than discovery,demo, or scoping. Fits the Manufacturer cold prospecting description focused on quick relevancevalidation and booking a follow-up.","ai_activity_type": "Outreach and Qualification - Manufacturers"4 +}3+4 DUUUU• Viewed..•+ {"a1 activitv tyoe reasoning": "Both connecto red Jake Chweldan and the prospect Ben0\u2019Neill) are listed as participants, and the call duration is 24 minutes 58 seconds, whichis longer than o minutes. Iheretore the criterla tor this activity type are met.»"ai_activity_type": "Meeting Sat"4+}+4 UUUL• Viewedal accivity type reasonino: bouh a connecta representacive Alex kose and a cllencparticipant (Kayleigh Laverick) attended the call, and the call duration was 25 minutes 40seconds, which exceeds 5 minutes \u2014 meeting both required criteria.","a1_activity_type": "Meeting Sat"+}+4 UOUU_Viewed"ai_ activity_type_reasoning": "Call had both Connectd rep (Harry Field) and prospect (RoselleAusoo oresent, our une call curauion was 4 minutes 48 seconos, whieh is less uhan the reculred...
|
NULL
|
5176567153997152118
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv booknarks 100l0a1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inout& src/evalendpoints.py• eval-ai-activity-type.pyE gitignorev ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_7k6scZ0Bd4RvtuaT9GQV.json [v ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_807ncZ0Bd4RvtuaTumTs.json L•••∞a -0,0 +1,4 cav ..ut/ai activity tvoe/eval datasets/v2-from-logs-replavable/around truth/at 8E6-cZ0Bd4RvtuaThmSx, ison rC... @@ -0,0 +1,4 cv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8k7mcZ0Bd4RvtuaT02Rf.json [.•• @a -0,0 +1,4 cav ..ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_8U7VcZ0Bd4RvtuaTOWRt.jsondc00+1,4ccv ...ut/ai_activity_type/eval_datasets/v2-from-logs-replayable/ground_truth/gt_904Lcp0Bd4RvtuaTyGTO.json L.•• @ -0,0 +1,4 c‹90 hl• | Daily - Platform • 3m leftA100% CS•8 • Tue 14 Apr 10:02:08• 2 1 203 viewed• Awallind aporovallSubmit review+4 UUULViewed+ }+4 -000• Viewed"ai_activity_type_reasoning": "Call metadata shows an SDR (Mads Hartmann Rasmussen) fromVelatir calling Entech Marine A/S for 1m23s, typical of a short outbound cold call to book ademo. No transcript content indicating a demo, follow-up, or onboarding. The description matchesan outbound cold call to book a demo.","ai activity tvpe": "Outbound Phone Call"+ }+4 0000• Viewed"ai_activity_type_reasoning": "Call metadata: 57-second call, vendor sales director Jake Bishopoutbound to a contact at Hanna Instruments Ltd (a manufacturing company). No transcript content.Short scheduled call likely an initial outreach/cold qualification attempt rather than discovery,demo, or scoping. Fits the Manufacturer cold prospecting description focused on quick relevancevalidation and booking a follow-up.","ai_activity_type": "Outreach and Qualification - Manufacturers"4 +}3+4 DUUUU• Viewed..•+ {"a1 activitv tyoe reasoning": "Both connecto red Jake Chweldan and the prospect Ben0\u2019Neill) are listed as participants, and the call duration is 24 minutes 58 seconds, whichis longer than o minutes. Iheretore the criterla tor this activity type are met.»"ai_activity_type": "Meeting Sat"4+}+4 UUUL• Viewedal accivity type reasonino: bouh a connecta representacive Alex kose and a cllencparticipant (Kayleigh Laverick) attended the call, and the call duration was 25 minutes 40seconds, which exceeds 5 minutes \u2014 meeting both required criteria.","a1_activity_type": "Meeting Sat"+}+4 UOUU_Viewed"ai_ activity_type_reasoning": "Call had both Connectd rep (Harry Field) and prospect (RoselleAusoo oresent, our une call curauion was 4 minutes 48 seconos, whieh is less uhan the reculred...
|
NULL
|
|
8723
|
168
|
13
|
2026-04-14T07:02:11.769936+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150131769_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8-20564 1 П ****=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is good= Mediumi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 (QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:02 AM | Daily - PlatformDaily - Platform • 3 m left100% <8 • Tue 14 Apr 10:02:11ChatCI: DepeActionssDepende• Far Depel• Tusts7 Insights & CoachinD Dev•ux.# Improve StoryDetailsAssignee32 Stellyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitsOuid TauirxReleasesProduction7 See all deploymentsComponentsPlatformSub-ProductAdd options2uenewAl BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 1 • **** =No such column "Type' onentity 'Event"DeployedE -20384 05 #1 **** =®Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 _20614 05 12 «** = |:Sterka StoyanoyaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:47Lukas Kovalik...
|
NULL
|
-3339794003602283244
|
NULL
|
click
|
ocr
|
NULL
|
SDiaFilelEditViewTabsBookmarksHistoryExtensionsWin SDiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)• ProjectsPlatform TeamQ Search board200READY FOR DEV 1Anvestgate snd tix ww)exceed Fontawesomepackage limitsMASNTENANEDReady for Dev8-20564 1 П ****=C SRD-677© Jy 19790(l Service-oDe Foet, AnvCost | CMds/37?selectedissue=JY-18909E SSHEl Dutados$ 31-19240 / Д JY-18900• data source should cover what data has been analysed• objective should be a short paragraph that explains the goalShow the reports in Jiminny:• show the report in the AI Reports page with a special logo - Proiest Phoenix|onty the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download it• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type fiter so users can filter the list for such reports• when a report is shared with a user then show who shared it in the 'Shared column - F https://www.figma.com/design/|XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=14369-400788t+We33fyQzTUfHuXVR-4 |Connect your Flgm77% DonePriority% JY-20574 [AI) Ensure PDF formatting is good= Mediumi Stellyan...."o Jt"zuso2 lot-Alttntra, Crease new queueStellyan…IN DEV VREADY FOR DEVS% JY-20586 (QA] Manual Testing% JY-20626 Integration testing= MediumAneliya A.8 Unassign...KRADTTORDEYSLinked work items1CioneooyActions10:02 AM | Daily - PlatformDaily - Platform • 3 m left100% <8 • Tue 14 Apr 10:02:11ChatCI: DepeActionssDepende• Far Depel• Tusts7 Insights & CoachinD Dev•ux.# Improve StoryDetailsAssignee32 Stellyan GeorgievAssioin to me2 Galya DimitrovaUuncoomeuik@ Open with VS Code |3 branches32 commitsOuid TauirxReleasesProduction7 See all deploymentsComponentsPlatformSub-ProductAdd options2uenewAl BookmarksGroup: QueriesVOLVTfix cohinitme ouring toXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 1 • **** =No such column "Type' onentity 'Event"DeployedE -20384 05 #1 **** =®Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed0 _20614 05 12 «** = |:Sterka StoyanoyaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova16:47Lukas Kovalik...
|
NULL
|
|
8724
|
169
|
19
|
2026-04-14T07:02:14.505982+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150134505_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv 3o0knarks 100 oa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [v src/eval/eval-ai-activity-type.py LQ Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignore•:< 40 ll | Daily - Platform • 3m leftA100% C 8• Tue 14 Apr 10:02:14• 2 1 203 viewed• Awaltino aporovali162163164166167168169170171174175+330 UUUUuViewedresp = r.get("new_response") or 1samples[il["around truth llm"] = reso.aet("ai activity tvpe")samp les [i] ["ground_truth_llm_reasoning"] =resp.oet a1 accivity cvoe reasonina)reurn samplesasync def collect from files(self) -> List[Dict(str, Anyl]:if not self._inputs_dir.exists():raise FileNotFoundError(f"Dataset folder not found: {self. inouts dir?. ""Run --steps collect first or check your --data-set name."+ + + + + + +samples: List(Dict[str, Any]] = 0for filename in sorted(os.listdir(self._inputs_dir)):input path = self. inputs dir / filenamegt_path = self._ground_truths_dir / f"gt_{filename}"1t not at path.exists:print(f"Warning: ground truth not found for {filename}, skipping")continuelwith open(input_path, "r") as f:request_body: Dict[str, Anyl = json. load(f)with open(gt_path, "p"') as f:ground_truth: Dict[str, Anyl = json.load(f)samples.append("id": Path(filename).stem,"request_body: request_body,"original_response": None, I"ground truth": ground truth,193194195196 +)197198199200201202203 [PHONE]08209211print(f"Loaded {len(samples) } samples from {self._inputs_dir.parent}")return samplesasync der evaluate_against_ground_truchtseut, resutts: Listiunctlstr, AnyJd) -List[EvaluationResult]:evaluation results: List[EvaluationResult] = []compare_to = self._class_.COMPARE_TO_GROUND_TRUTHfor res in results:req_id = res ["request_id"]is_success = res.get ("success", True)It nor 1s success.evaluation_results.append(...
|
NULL
|
-2697322963752320365
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmalQ Search bookmarksv 3o0knarks 100 oa1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [v src/eval/eval-ai-activity-type.py LQ Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignore•:< 40 ll | Daily - Platform • 3m leftA100% C 8• Tue 14 Apr 10:02:14• 2 1 203 viewed• Awaltino aporovali162163164166167168169170171174175+330 UUUUuViewedresp = r.get("new_response") or 1samples[il["around truth llm"] = reso.aet("ai activity tvpe")samp les [i] ["ground_truth_llm_reasoning"] =resp.oet a1 accivity cvoe reasonina)reurn samplesasync def collect from files(self) -> List[Dict(str, Anyl]:if not self._inputs_dir.exists():raise FileNotFoundError(f"Dataset folder not found: {self. inouts dir?. ""Run --steps collect first or check your --data-set name."+ + + + + + +samples: List(Dict[str, Any]] = 0for filename in sorted(os.listdir(self._inputs_dir)):input path = self. inputs dir / filenamegt_path = self._ground_truths_dir / f"gt_{filename}"1t not at path.exists:print(f"Warning: ground truth not found for {filename}, skipping")continuelwith open(input_path, "r") as f:request_body: Dict[str, Anyl = json. load(f)with open(gt_path, "p"') as f:ground_truth: Dict[str, Anyl = json.load(f)samples.append("id": Path(filename).stem,"request_body: request_body,"original_response": None, I"ground truth": ground truth,193194195196 +)197198199200201202203 [PHONE]08209211print(f"Loaded {len(samples) } samples from {self._inputs_dir.parent}")return samplesasync der evaluate_against_ground_truchtseut, resutts: Listiunctlstr, AnyJd) -List[EvaluationResult]:evaluation results: List[EvaluationResult] = []compare_to = self._class_.COMPARE_TO_GROUND_TRUTHfor res in results:req_id = res ["request_id"]is_success = res.get ("success", True)It nor 1s success.evaluation_results.append(...
|
NULL
|
|
8726
|
169
|
21
|
2026-04-14T07:02:29.704175+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150149704_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmaleQ Search bookmarksv booknarks100loaSprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [Lv eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/nufEcZ0BFiHnzVnhTar9.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignoreC < 40 ll @ | Daily - Platform • 3m leftA100% C• • Tue 14 Apr 10:02:29• 2 1 203 viewed|• Awaltino aporovaliSuonitrevewy+228 UUUUU|Viewed"Text:"rean. so. so vou l nave access to unar as soon as vou lod in. out chen cneaccount managers on the onboard, they show you where the courses are and, you know, how tointroduce vou to vour mentor. and all of that stuff has aone through on the onboardina session."159160161162"speaker": "238826409","text": "Okay, and then I go to the training, and then if this is passed, so I will havealso some kind ot cllent manader there. or now this aoes?'163165100"speaker": "238826408","text": "It's the client success team, so they will look after you through Connectd, butyou've also got your mentors who will help you during your placement to make sure you're doing agood iob and adding value as well."167100169"speaker": "238826409","text": "And the matching starts, uh, once I have completed the trainings?"172 +%"speaker": "230820408,174 +"text": "So it's actually a bit of both. So we will obviously provide a placement if itTakes a wnlle, In vou see a varccular oustness tnar vou ulke in. In tne. un. an our sort otopportunity section, if you let us know, we can facilitate that as well. So if you want to be abit quicker, then iust let us know which one you want, um, and we'll look at making thathappen."175 : }177178"speaker": "238826409","text": "Okay, clear."179+ },180182"speaker": "238826408","text": "Cool. Well, Thank you for your time. Welcome on board, and I'm very much lookingforward to seeing good work from yourself as well."183"speaker": "238826409","text": "Okay, thank you.""speaker": "238826408","text": "You're welcome. Have a aood dav."191192194195196198199200+ J,"speaker": "238826409","text": "Yeah, bye.""speaker": "238826408","text": "Take care. Bye-bye."...
|
NULL
|
-4471583167632275577
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesPlatfor FirefoxFileEoitViewHistoryBookmarksProfilesPlatform Sprint 1 Q2 - Platform Tea( Jy 19798 evaluation for ai activ(8 Jiminny• Ask Jiminny test report - 8 Apr 202Service-Desk - Queues - Platform+ New labToolsWindowHelpgithub.com/jiminny/prophet/pull/468/changes#diff-d2f9fea9bc428b119ae26a66453e8eab7dd0782d4a4d93075ca5ce05903d77e8HookmaleQ Search bookmarksv booknarks100loaSprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks87 OpenJy 19798 evaluation for ai activity types #468All commits-nikolaybiaivanov wants to merge 9 commits into master from JY-19798-evaluation-for-ai-activity-types [Lv eval_output/ai_activity_type/eval_datasets/v2-from-logs-replayable/input/nufEcZ0BFiHnzVnhTar9.json [Q Filter files...• E eval_output/ai_activity_type/eval……•L ground_truth>I inoutv F src/evalendpoints.py• eval-ai-activity-type.pyE gitignoreC < 40 ll @ | Daily - Platform • 3m leftA100% C• • Tue 14 Apr 10:02:29• 2 1 203 viewed|• Awaltino aporovaliSuonitrevewy+228 UUUUU|Viewed"Text:"rean. so. so vou l nave access to unar as soon as vou lod in. out chen cneaccount managers on the onboard, they show you where the courses are and, you know, how tointroduce vou to vour mentor. and all of that stuff has aone through on the onboardina session."159160161162"speaker": "238826409","text": "Okay, and then I go to the training, and then if this is passed, so I will havealso some kind ot cllent manader there. or now this aoes?'163165100"speaker": "238826408","text": "It's the client success team, so they will look after you through Connectd, butyou've also got your mentors who will help you during your placement to make sure you're doing agood iob and adding value as well."167100169"speaker": "238826409","text": "And the matching starts, uh, once I have completed the trainings?"172 +%"speaker": "230820408,174 +"text": "So it's actually a bit of both. So we will obviously provide a placement if itTakes a wnlle, In vou see a varccular oustness tnar vou ulke in. In tne. un. an our sort otopportunity section, if you let us know, we can facilitate that as well. So if you want to be abit quicker, then iust let us know which one you want, um, and we'll look at making thathappen."175 : }177178"speaker": "238826409","text": "Okay, clear."179+ },180182"speaker": "238826408","text": "Cool. Well, Thank you for your time. Welcome on board, and I'm very much lookingforward to seeing good work from yourself as well."183"speaker": "238826409","text": "Okay, thank you.""speaker": "238826408","text": "You're welcome. Have a aood dav."191192194195196198199200+ J,"speaker": "238826409","text": "Yeah, bye.""speaker": "238826408","text": "Take care. Bye-bye."...
|
NULL
|